diff options
273 files changed, 4 insertions, 44316 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index dbcbc1d2..bb3c382e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -7,7 +7,7 @@ PROJECT( rekonq ) # Information to update before to release this package. # rekonq info -SET(REKONQ_VERSION "1.3" ) +SET(REKONQ_VERSION "1.0" ) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/config-version.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/src/config-version.h ) @@ -35,7 +35,7 @@ FIND_PACKAGE(Qt4 4.8.0 COMPONENTS QtCore QtGui QtNetwork QtWebKit REQUIRED) # MESSAGE(STATUS "Found QtWebKit ${PC_QTWEBKIT_VERSION}") #ENDIF() -FIND_PACKAGE(KDE4 4.8.3 REQUIRED) +FIND_PACKAGE(KDE4 4.7.0 REQUIRED) INCLUDE(MacroOptionalFindPackage) @@ -56,15 +56,6 @@ configure_file(${CMAKE_CURRENT_SOURCE_DIR}/config-nepomuk.h.cmake ${CMAKE_CURREN # ================================================================================== -# optional KActivities requirements - -MACRO_OPTIONAL_FIND_PACKAGE(KActivities 6.1.0) -MACRO_BOOL_TO_01(KActivities_FOUND HAVE_KACTIVITIES) - -configure_file(${CMAKE_CURRENT_SOURCE_DIR}/config-kactivities.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/src/config-kactivities.h ) - - -# ================================================================================== # optional QCA2 & QtOAuth requirements MACRO_OPTIONAL_FIND_PACKAGE(QCA2) @@ -155,16 +146,6 @@ IF(REKONQ_CAN_BE_COMPILED) MESSAGE(STATUS " Rekonq will be compiled WITHOUT support for bookmarks tagging") ENDIF(HAVE_NEPOMUK) - # KActivities - - IF(HAVE_KACTIVITIES) - MESSAGE(STATUS " KActivities Libraries................. YES") - MESSAGE(STATUS " Rekonq will be compiled with support for document event reporting") - ELSE(HAVE_KACTIVITIES) - MESSAGE(STATUS " KActivities Libraries................. NO") - MESSAGE(STATUS " Rekonq will be compiled WITHOUT support for document event reporting") - ENDIF(HAVE_KACTIVITIES) - MESSAGE(STATUS "") # QCA2 @@ -7,7 +7,7 @@ To build, rekonq needs at least: - Qt 4.8.x: - QtWebkit 2.2.x -- kdelibs 4.8.3 +- kdelibs 4.7.x This software should be prepackaged for all major Linux distributions. Please see http://techbase.kde.org/Getting_Started#Building_and_Running_KDE_Software_From_Source diff --git a/config-kactivities.h.cmake b/config-kactivities.h.cmake deleted file mode 100644 index e136858c..00000000 --- a/config-kactivities.h.cmake +++ /dev/null @@ -1 +0,0 @@ -#cmakedefine HAVE_KACTIVITIES diff --git a/doc/index.docbook b/doc/index.docbook index 81d54c88..dd72acfa 100644 --- a/doc/index.docbook +++ b/doc/index.docbook @@ -31,7 +31,7 @@ <!ENTITY % English "INCLUDE"> ]> -<book id="rekonq" lang="&language;"> +<book lang="&language;"> <bookinfo> <title>The &rekonq; Handbook</title> <authorgroup> diff --git a/kwebapp/CMakeLists.txt b/kwebapp/CMakeLists.txt deleted file mode 100644 index 459c5a45..00000000 --- a/kwebapp/CMakeLists.txt +++ /dev/null @@ -1,29 +0,0 @@ -set( kwebapp_SRCS - rekonqview.cpp - searchengine.cpp - urlresolver.cpp - walletbar.cpp - webview.cpp - webpage.cpp - websnap.cpp - kwebmain.cpp - ) - -include_directories ( - ${CMAKE_CURRENT_SOURCE_DIR} - ${CMAKE_CURRENT_BINARY_DIR} - ${QT4_INCLUDES} - ${KDE4_INCLUDES} -) - - -kde4_add_executable(kwebapp ${kwebapp_SRCS}) - -target_link_libraries(kwebapp - ${KDE4_KDEUI_LIBS} - ${KDE4_KDEWEBKIT_LIBS} -) - - -install(TARGETS kwebapp ${INSTALL_TARGETS_DEFAULT_ARGS} ) - diff --git a/kwebapp/Messages.sh b/kwebapp/Messages.sh deleted file mode 100644 index 37199e06..00000000 --- a/kwebapp/Messages.sh +++ /dev/null @@ -1,3 +0,0 @@ -#! /usr/bin/env bash -$EXTRACTRC `find . -name \*.rc` >> rc.cpp -$XGETTEXT *.cpp -o $podir/kwebapp.pot diff --git a/kwebapp/kwebmain.cpp b/kwebapp/kwebmain.cpp deleted file mode 100644 index 8c324fa9..00000000 --- a/kwebapp/kwebmain.cpp +++ /dev/null @@ -1,82 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2011-2012 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/>. -* -* ============================================================ */ - - -// Local Includes -#include "rekonqview.h" -#include "urlresolver.h" - -// KDE Includes -#include <KApplication> -#include <KAboutData> -#include <KCmdLineArgs> -#include <KUrl> -#include <KStandardDirs> - -// Qt Includes -#include <QWebSettings> -#include <QDebug> - - -static const char description[] = - I18N_NOOP("Web Application Viewer"); - -static const char version[] = "0.2"; - - -int main(int argc, char **argv) -{ - KAboutData about("kwebapp", 0, ki18n("kwebapp"), version, ki18n(description), - KAboutData::License_GPL, ki18n("(C) 2011-2012 Andrea Diamantini"), KLocalizedString(), 0, "adjam7@gmail.com"); - about.addAuthor(ki18n("Andrea Diamantini"), KLocalizedString(), "adjam7@gmail.com"); - KCmdLineArgs::init(argc, argv, &about); - - KCmdLineOptions options; - options.add("+[URL]", ki18n("Document to open")); - KCmdLineArgs::addCmdLineOptions(options); - - KApplication app; - - QWebSettings::setIconDatabasePath(KStandardDirs::locateLocal("cache", "kwebapp.favicons/")); - - QWebSettings::globalSettings()->setAttribute(QWebSettings::DnsPrefetchEnabled, true); - QWebSettings::globalSettings()->setAttribute(QWebSettings::PluginsEnabled, true); - QWebSettings::globalSettings()->setAttribute(QWebSettings::JavascriptCanOpenWindows, true); - - KCmdLineArgs *args = KCmdLineArgs::parsedArgs(); - if (args->count() != 1) - { - qDebug() << "ERROR: Impossible to launch kwebapp WITHOUT just ONE url to load!!!"; - return 0; - } - - RekonqView *widg = new RekonqView(); - widg->loadUrl(UrlResolver::urlFromTextTyped(args->arg(0))); - widg->show(); - args->clear(); - - return app.exec(); -} - diff --git a/kwebapp/rekonqview.cpp b/kwebapp/rekonqview.cpp deleted file mode 100644 index ec8ca01d..00000000 --- a/kwebapp/rekonqview.cpp +++ /dev/null @@ -1,270 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2012 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 "rekonqview.h" -#include "rekonqview.moc" - -// Local Includes -#include "walletbar.h" -#include "webpage.h" - -// KDE Includes -#include <KWebWallet> -#include <KStandardShortcut> -#include <KMenu> -#include <KActionMenu> -#include <KWebView> -#include <KDebug> -#include <KMessageBox> -#include <KRun> -#include <klocalizedstring.h> -#include <KSharedConfig> -#include <KConfigGroup> - -// Qt Includes -#include <QVBoxLayout> -#include <QWebElement> -#include <QWebFrame> -#include <QByteArray> -#include <QDataStream> -#include <QLabel> -#include <QTimer> -#include <QTextDocument> -#include <QStyle> - - -RekonqView::RekonqView(QWidget *parent) - : QWidget(parent) - , m_webView(0) - , m_popup(new QLabel(this)) - , m_hidePopupTimer(new QTimer(this)) - -{ - setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); - - QVBoxLayout *l = new QVBoxLayout(this); - l->setMargin(0); - l->setSpacing(0); - - l->addWidget(view()); - view()->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); - - // fix focus handling - setFocusProxy(view()); - - KWebWallet *wallet = page()->wallet(); - - if (wallet) - { - connect(wallet, SIGNAL(saveFormDataRequested(QString, QUrl)), - this, SLOT(createWalletBar(QString, QUrl))); - } - - connect(page(), SIGNAL(linkHovered(QString, QString, QString)), this, SLOT(notifyMessage(QString))); - - // setting popup notification - m_popup->setAutoFillBackground(true); - m_popup->setMargin(4); - m_popup->raise(); - m_popup->hide(); - - connect(m_hidePopupTimer, SIGNAL(timeout()), m_popup, SLOT(hide())); - - // signal && slots - connect(view(), SIGNAL(iconChanged()), this, SLOT(setIcon())); - connect(view(), SIGNAL(titleChanged(QString)), this, SLOT(setTitle(QString))); - -} - - -RekonqView::~RekonqView() -{ - m_walletBar.clear(); - - delete m_webView; -} - - -WebView *RekonqView::view() -{ - if (!m_webView) - { - m_webView = new WebView(this); - } - return m_webView; -} - - -WebPage *RekonqView::page() -{ - return view()->page(); -} - - -KUrl RekonqView::url() -{ -// if (page() && page()->isOnRekonqPage()) -// { -// return page()->loadingUrl(); -// } - - return view()->url(); -} - - -void RekonqView::setTitle(const QString &t) -{ - setWindowTitle(t); -} - - -void RekonqView::setIcon() -{ - setWindowIcon(view()->icon()); -} - - -void RekonqView::createWalletBar(const QString &key, const QUrl &url) -{ - // check if the url is in the wallet blacklist - QString urlString = url.toString(); - - KSharedConfig::Ptr config = KSharedConfig::openConfig("rekonqrc", KConfig::SimpleConfig, "config"); - KConfigGroup group1(config, "misc"); - QStringList blackList = group1.readEntry("walletBlackList", QStringList()); - if (blackList.contains(urlString)) - return; - - KWebWallet *wallet = page()->wallet(); - - KConfigGroup group2(config, "Privacy"); - bool passwordSavingEnabled = group2.readEntry("passwordSavingEnabled", false); - - if (!passwordSavingEnabled) - { - wallet->rejectSaveFormDataRequest(key); - return; - } - - if (m_walletBar.isNull()) - { - m_walletBar = new WalletBar(this); - m_walletBar.data()->onSaveFormData(key, url); - qobject_cast<QVBoxLayout *>(layout())->insertWidget(0, m_walletBar.data()); - m_walletBar.data()->animatedShow(); - } - else - { - disconnect(wallet); - qobject_cast<QVBoxLayout *>(layout())->insertWidget(0, m_walletBar.data()); - m_walletBar.data()->animatedShow(); - } - - connect(m_walletBar.data(), SIGNAL(saveFormDataAccepted(QString)), - wallet, SLOT(acceptSaveFormDataRequest(QString)), Qt::UniqueConnection); - connect(m_walletBar.data(), SIGNAL(saveFormDataRejected(QString)), - wallet, SLOT(rejectSaveFormDataRequest(QString)), Qt::UniqueConnection); -} - - -bool RekonqView::hasRSSInfo() -{ - QWebElementCollection col = page()->mainFrame()->findAllElements("link[type=\"application/rss+xml\"]"); - col.append(page()->mainFrame()->findAllElements("link[type=\"application/atom+xml\"]")); - if (col.count() != 0) - return true; - - return false; -} - - -void RekonqView::loadUrl(const KUrl& url) -{ - if (url.isEmpty()) - return; - - if (!url.isValid()) - { - KMessageBox::error(0, i18n("Malformed URL:\n%1", url.url(KUrl::RemoveTrailingSlash))); - return; - } - - view()->load(url); -} - - -void RekonqView::notifyMessage(const QString &msg) -{ - // deleting popus if empty msgs - if (msg.isEmpty()) - { - m_hidePopupTimer->start(250); - return; - } - - m_hidePopupTimer->stop(); - m_hidePopupTimer->start(3000); - - QString msgToShow = Qt::escape(msg); - - const int margin = 4; - const int halfWidth = width() / 2; - - // Set Popup size - QFontMetrics fm = m_popup->fontMetrics(); - QSize labelSize(fm.width(msgToShow) + 2 * margin, fm.height() + 2 * margin); - - if (labelSize.width() > halfWidth) - labelSize.setWidth(halfWidth); - - m_popup->setFixedSize(labelSize); - m_popup->setText(fm.elidedText(msgToShow, Qt::ElideMiddle, labelSize.width() - 2 * margin)); - - // NOTE: while currentFrame should NEVER be null - // we are checking here its existence cause of bug:264187 - if (!page() || !page()->currentFrame()) - return; - - const bool horizontalScrollbarIsVisible = page()->currentFrame()->scrollBarMaximum(Qt::Horizontal); - const bool verticalScrollbarIsVisible = page()->currentFrame()->scrollBarMaximum(Qt::Vertical); - const bool actionBarsVisible = false; //FIXME m_findBar->isVisible() || m_zoomBar->isVisible(); - - const int scrollbarExtent = style()->pixelMetric(QStyle::PM_ScrollBarExtent); - const int hScrollbarSize = horizontalScrollbarIsVisible ? scrollbarExtent : 0; - const int vScrollbarSize = verticalScrollbarIsVisible ? scrollbarExtent : 0; - - const QPoint mousePos = mapFromGlobal(QCursor::pos()); - const QPoint bottomPoint = geometry().bottomLeft(); - - int y = bottomPoint.y() + 1 - 2 * m_popup->height() - hScrollbarSize; // +1 because bottom() returns top() + height() - 1, see QRect doku - int x = QRect(QPoint(0, y), labelSize).contains(mousePos) || actionBarsVisible - ? width() - labelSize.width() - vScrollbarSize - : 0; - - m_popup->move(x, y); - m_popup->show(); -} diff --git a/kwebapp/rekonqview.h b/kwebapp/rekonqview.h deleted file mode 100644 index 770c468a..00000000 --- a/kwebapp/rekonqview.h +++ /dev/null @@ -1,83 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2012 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 REKONQ_VIEW_H -#define REKONQ_VIEW_H - - -// Local Includes -#include "webview.h" - -// Qt Includes -#include <QWidget> - -// Forward Declarations -class WalletBar; - -class WebPage; - -class QLabel; -class QTimer; - - -class RekonqView : public QWidget -{ - Q_OBJECT - -public: - explicit RekonqView(QWidget *parent = 0); - ~RekonqView(); - - WebView *view(); - WebPage *page(); - - KUrl url(); - - bool hasRSSInfo(); - -public Q_SLOTS: - void loadUrl(const KUrl& url); - -private Q_SLOTS: - void setTitle(const QString &); - void setIcon(); - - void createWalletBar(const QString &, const QUrl &); - void notifyMessage(const QString &msg); - -Q_SIGNALS: - void loadProgressing(); - -private: - WebView *m_webView; - - QWeakPointer<WalletBar> m_walletBar; - - QLabel *m_popup; - QTimer *m_hidePopupTimer; -}; - -#endif diff --git a/kwebapp/searchengine.cpp b/kwebapp/searchengine.cpp deleted file mode 100644 index 212f0ee8..00000000 --- a/kwebapp/searchengine.cpp +++ /dev/null @@ -1,149 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2008-2012 by Andrea Diamantini <adjam7 at gmail dot com> -* Copyright (C) 2009-2011 by Lionel Chauvin <megabigbug@yahoo.fr> -* -* -* 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/>. -* -* ============================================================ */ - - -// local includes -#include "searchengine.h" - -//KDE includes -#include <KConfigGroup> -#include <KServiceTypeTrader> - - -struct SearchEnginePrivate -{ - SearchEnginePrivate() : isLoaded(false) {} - bool isLoaded; - QString delimiter; - KService::List favorites; - KService::Ptr defaultEngine; -}; - - -K_GLOBAL_STATIC(SearchEnginePrivate, d) - - -void SearchEngine::reload() -{ - KConfig config("kuriikwsfilterrc"); - KConfigGroup cg = config.group("General"); - - // load delimiter - d->delimiter = cg.readEntry("KeywordDelimiter", ":"); - - // load favorite engines - QStringList favoriteEngines; -#if KDE_IS_VERSION(4,9,0) - favoriteEngines = cg.readEntry("PreferredWebShortcuts", favoriteEngines); -#else - favoriteEngines = cg.readEntry("FavoriteSearchEngines", favoriteEngines); -#endif - - KService::List favorites; - KService::Ptr service; - Q_FOREACH(const QString & engine, favoriteEngines) - { - service = KService::serviceByDesktopPath(QString("searchproviders/%1.desktop").arg(engine)); - if (service) - { - favorites << service; - } - } - d->favorites = favorites; - - // load default engine - QString dse; -#if KDE_IS_VERSION(4,9,0) - dse = cg.readEntry("DefaultWebShortcut"); -#else - dse = cg.readEntry("DefaultSearchEngine"); -#endif - d->defaultEngine = KService::serviceByDesktopPath(QString("searchproviders/%1.desktop").arg(dse)); - - d->isLoaded = true; -} - - -QString SearchEngine::delimiter() -{ - if (!d->isLoaded) - reload(); - - return d->delimiter; -} - - -KService::List SearchEngine::favorites() -{ - if (!d->isLoaded) - reload(); - - return d->favorites; -} - - -KService::Ptr SearchEngine::defaultEngine() -{ - if (!d->isLoaded) - reload(); - - return d->defaultEngine; -} - - -KService::Ptr SearchEngine::fromString(const QString &text) -{ - KService::List providers = KServiceTypeTrader::self()->query("SearchProvider"); - int i = 0; - bool found = false; - KService::Ptr service; - while (!found && i < providers.size()) - { - QStringList list = providers.at(i)->property("Keys").toStringList(); - Q_FOREACH(const QString & key, list) - { - const QString searchPrefix = key + delimiter(); - if (text.startsWith(searchPrefix)) - { - service = providers.at(i); - found = true; - } - } - i++; - } - - return service; -} - - -QString SearchEngine::buildQuery(KService::Ptr engine, const QString &text) -{ - if (!engine) - return QString(); - QString query = engine->property("Query").toString(); - query = query.replace("\\{@}", KUrl::toPercentEncoding(text)); - return query; -} diff --git a/kwebapp/searchengine.h b/kwebapp/searchengine.h deleted file mode 100644 index bcb364fa..00000000 --- a/kwebapp/searchengine.h +++ /dev/null @@ -1,56 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2008-2012 by Andrea Diamantini <adjam7 at gmail dot com> -* Copyright (C) 2009-2011 by Lionel Chauvin <megabigbug@yahoo.fr> -* -* -* 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 SEARCHENGINE_H -#define SEARCHENGINE_H - - -// KDE Includes -#include <KService> - -//Qt Includes -#include <QString> - - -namespace SearchEngine -{ -void reload(); - -QString delimiter(); - -KService::Ptr defaultEngine(); - -KService::List favorites(); - -KService::Ptr fromString(const QString &text); - -QString buildQuery(KService::Ptr engine, const QString &text); - -QString extractQuery(const QString &text); -} - -#endif diff --git a/kwebapp/urlresolver.cpp b/kwebapp/urlresolver.cpp deleted file mode 100644 index c56e5a94..00000000 --- a/kwebapp/urlresolver.cpp +++ /dev/null @@ -1,98 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2012 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 "urlresolver.h" - -// Local Includes -#include "searchengine.h" - -// KDE Includes -#include <KService> -#include <KProtocolInfo> -#include <KDebug> - -// Qt Includes -#include <QLatin1String> - -#define QL1S(x) QLatin1String(x) - - -// NOTE -// default kurifilter plugin list (at least in my box): -// 1. "kshorturifilter" -// 2. "kurisearchfilter" -// 3. "localdomainurifilter" -// 4 ."kuriikwsfilter" -// 5. "fixhosturifilter" - - -KUrl UrlResolver::urlFromTextTyped(const QString &typedText) -{ - QString typedString = typedText.trimmed(); - - // Url from KService - KService::Ptr engine = SearchEngine::fromString(typedString); - if (engine) - { - QString query = typedString; - query = query.remove(0, typedString.indexOf(SearchEngine::delimiter()) + 1); - - QString url = SearchEngine::buildQuery(engine, query); - - kDebug() << "Url from service: " << url; - return KUrl(url); - } - - // Url from User Input - QUrl urlFromUserInput = QUrl::fromUserInput(typedString); - if (urlFromUserInput.isValid()) - { - // ensure http(s) hosts are lower cases - if (urlFromUserInput.scheme().startsWith(QL1S("http"))) - { - QString hst = urlFromUserInput.host(); - urlFromUserInput.setHost(hst.toLower()); - } - - kDebug() << "(Q)Url from user input: " << urlFromUserInput; - return urlFromUserInput; - } - - // failed... - kDebug() << "KUrl fallback: " << typedText; - return KUrl(typedText); -} - - -bool UrlResolver::isKDEUrl(const QString &urlString) -{ - KService::Ptr engine = SearchEngine::fromString(urlString); - if (engine) - return true; - - return false; -} diff --git a/kwebapp/urlresolver.h b/kwebapp/urlresolver.h deleted file mode 100644 index 47105f01..00000000 --- a/kwebapp/urlresolver.h +++ /dev/null @@ -1,46 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2012 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 URL_RESOLVER_H -#define URL_RESOLVER_H - - -// KDE Includes -#include <KUrl> - -// Qt Includes -#include <QString> - - -namespace UrlResolver -{ -KUrl urlFromTextTyped(const QString &); - -bool isKDEUrl(const QString &); -} - - -#endif // URL_RESOLVER_H diff --git a/kwebapp/walletbar.cpp b/kwebapp/walletbar.cpp deleted file mode 100644 index 36a97578..00000000 --- a/kwebapp/walletbar.cpp +++ /dev/null @@ -1,105 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2009-2012 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 "walletbar.h" -#include "walletbar.moc" - -// KDE Includes -#include <KIcon> -#include <KLocalizedString> -#include <KSharedConfig> -#include <KConfigGroup> - -// Qt Includes -#include <QAction> - - -WalletBar::WalletBar(QWidget *parent) - : KMessageWidget(parent) -{ - setMessageType(KMessageWidget::Warning); - - QSize sz = size(); - sz.setWidth(qobject_cast<QWidget *>(parent)->size().width()); - resize(sz); - - setCloseButtonVisible(false); - - QAction *rememberAction = new QAction(KIcon("document-save"), i18n("Remember"), this); - connect(rememberAction, SIGNAL(triggered(bool)), this, SLOT(rememberData())); - addAction(rememberAction); - - QAction *neverHereAction = new QAction(KIcon("process-stop"), i18n("Never for This Site"), this); - connect(neverHereAction, SIGNAL(triggered(bool)), this, SLOT(neverRememberData())); - addAction(neverHereAction); - - QAction *notNowAction = new QAction(KIcon("dialog-cancel"), i18n("Not Now"), this); - connect(notNowAction, SIGNAL(triggered(bool)), this, SLOT(notNowRememberData())); - addAction(notNowAction); -} - - -void WalletBar::rememberData() -{ - emit saveFormDataAccepted(m_key); - - animatedHide(); - deleteLater(); -} - - -void WalletBar::neverRememberData() -{ - // add url to the blacklist - KSharedConfig::Ptr config = KSharedConfig::openConfig("rekonqrc", KConfig::SimpleConfig, "config"); - KConfigGroup group(config, "misc"); - QStringList list = group.readEntry("walletBlackList", QStringList()); - list << m_url.toString(); - group.writeEntry("walletBlackList", list); - config->sync(); - - notNowRememberData(); -} - - -void WalletBar::notNowRememberData() -{ - emit saveFormDataRejected(m_key); - - animatedHide(); - deleteLater(); -} - - - -void WalletBar::onSaveFormData(const QString &key, const QUrl &url) -{ - setText(i18n("Do you want rekonq to remember the password on %1?", url.host())); - - m_key = key; - m_url = url; -} diff --git a/kwebapp/walletbar.h b/kwebapp/walletbar.h deleted file mode 100644 index 094dec0e..00000000 --- a/kwebapp/walletbar.h +++ /dev/null @@ -1,63 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2009-2012 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 WALLET_BAR_H -#define WALLET_BAR_H - - -// KDE Includes -#include <KMessageWidget> - -// Qt Includes -#include <QUrl> -#include <QString> - - -class WalletBar : public KMessageWidget -{ - Q_OBJECT - -public: - WalletBar(QWidget *parent); - -private Q_SLOTS: - void rememberData(); - void neverRememberData(); - void notNowRememberData(); - -public Q_SLOTS: - void onSaveFormData(const QString &, const QUrl &); - -Q_SIGNALS: - void saveFormDataAccepted(const QString &); - void saveFormDataRejected(const QString &); - -private: - QString m_key; - QUrl m_url; -}; - -#endif // WALLET_BAR_H diff --git a/kwebapp/webpage.cpp b/kwebapp/webpage.cpp deleted file mode 100644 index 827bbce1..00000000 --- a/kwebapp/webpage.cpp +++ /dev/null @@ -1,129 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2011-2012 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 "webpage.h" -#include "webpage.moc" - -// Local Includes -#include "urlresolver.h" - -// KDE Includes -#include <KRun> -#include <KToolInvocation> -#include <KProtocolInfo> -#include <KDebug> - -// Qt Includes -#include <QNetworkRequest> -#include <QNetworkReply> -#include <QWebFrame> - -// Defines -#define QL1S(x) QLatin1String(x) - - -WebPage::WebPage(QObject *parent) - : KWebPage(parent) -{ - // ----- handling unsupported content... - setForwardUnsupportedContent(true); - connect(this, SIGNAL(unsupportedContent(QNetworkReply*)), this, SLOT(handleUnsupportedContent(QNetworkReply*))); - - // downloads - connect(this, SIGNAL(unsupportedContent(QNetworkReply*)), this, SLOT(downloadResponse(QNetworkReply*))); - connect(this, SIGNAL(downloadRequested(QNetworkRequest)), this, SLOT(downloadRequest(QNetworkRequest))); -} - - -bool WebPage::acceptNavigationRequest(QWebFrame *frame, const QNetworkRequest &request, NavigationType type) -{ - QUrl reqUrl = request.url(); - QString protocol = reqUrl.scheme(); - - // javascript handling - if (protocol == QL1S("javascript")) - { - QString scriptSource = QUrl::fromPercentEncoding(reqUrl.toString().mid(11).toUtf8()); - mainFrame()->evaluateJavaScript(scriptSource); - return false; - } - - // "mailto" handling: It needs to be handled both here (mail url launched) - // and in handleUnsupportedContent (mail links clicked) - if (protocol == QL1S("mailto")) - { - KToolInvocation::invokeMailer(reqUrl); - return false; - } - - if (frame && UrlResolver::isKDEUrl(reqUrl.toString())) - { - QUrl newReqUrl = UrlResolver::urlFromTextTyped(reqUrl.toString()); - frame->load(newReqUrl); - return false; - } - - // don't let webkit try to load an unknown (or missing) protocol... - if (!KProtocolInfo::isKnownProtocol(protocol)) - { - kDebug() << "UNKNOWN PROTOCOL: " << protocol; - return false; - } - - return KWebPage::acceptNavigationRequest(frame, request, type); -} - - -void WebPage::handleUnsupportedContent(QNetworkReply *reply) -{ - Q_ASSERT(reply); - - if (!reply) - { - kDebug() << "NO REPLY. Why????"; - return; - } - - QUrl replyUrl = reply->url(); - QString protocol = replyUrl.scheme(); - - // "http(s)" (fast) handling - if (protocol == QL1S("http") || protocol == QL1S("https")) - { - kDebug() << "Error: " << protocol; - return; - } - - // "mailto" handling. - if (protocol == QL1S("mailto")) - { - KToolInvocation::invokeMailer(replyUrl); - return; - } - - return; -} diff --git a/kwebapp/webpage.h b/kwebapp/webpage.h deleted file mode 100644 index 97d7102a..00000000 --- a/kwebapp/webpage.h +++ /dev/null @@ -1,49 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2011-2012 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 _WEB_PAGE_H -#define _WEB_PAGE_H - - -// KDE Includes -#include <KWebPage> - - -class WebPage : public KWebPage -{ - Q_OBJECT - -public: - WebPage(QObject *parent = 0); - -protected: - virtual bool acceptNavigationRequest(QWebFrame *, const QNetworkRequest &, NavigationType); - -private Q_SLOTS: - void handleUnsupportedContent(QNetworkReply *); -}; - -#endif // _WEB_PAGE_H diff --git a/kwebapp/websnap.cpp b/kwebapp/websnap.cpp deleted file mode 100644 index 830d37e1..00000000 --- a/kwebapp/websnap.cpp +++ /dev/null @@ -1,166 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2009 Nokia Corporation <qt-info@nokia.com> -* Copyright (C) 2009-2012 by Andrea Diamantini <adjam7 at gmail dot com> -* Copyright (C) 2010 by Matthieu Gicquel <matgic78 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 "websnap.h" -#include "websnap.moc" - -// KDE Includes -#include <KStandardDirs> - -// Qt Includes -#include <QSize> -#include <QFile> - -#include <QCryptographicHash> - -#include <QPainter> -#include <QAction> - -#include <QWebFrame> -#include <QWebSettings> - - -WebSnap::WebSnap(const KUrl& url, QObject *parent) - : QObject(parent) - , m_url(url) -{ - // this to not register websnap history - m_page.settings()->setAttribute(QWebSettings::PrivateBrowsingEnabled, true); - - // this to not let this page open other windows - m_page.settings()->setAttribute(QWebSettings::PluginsEnabled, false); - m_page.settings()->setAttribute(QWebSettings::JavascriptEnabled, false); - - connect(&m_page, SIGNAL(loadFinished(bool)), this, SLOT(saveResult(bool))); - - QMetaObject::invokeMethod(this, "load", Qt::QueuedConnection); -} - - -WebSnap::~WebSnap() -{ - m_page.action(QWebPage::Stop)->trigger(); - m_page.deleteLater(); -} - - -void WebSnap::load() -{ - m_page.mainFrame()->load(m_url); -} - - - -QPixmap WebSnap::render(const QWebPage &page, int w, int h) -{ - // create the page image - QPixmap pageImage = QPixmap(w, h); - pageImage.fill(Qt::transparent); - - // render it - QPainter p(&pageImage); - page.mainFrame()->render(&p, QWebFrame::ContentsLayer); - p.end(); - - return pageImage; -} - - -// NOTE -// to render page preview in a safe way, you CANNOT work with scrollbars! -// In fact, disabling temporarily them DOES NOT work without reloading a page -// that is something we CANNOT do. -QPixmap WebSnap::renderPagePreview(const QWebPage &page, int w, int h) -{ - // store actual viewportsize - QSize oldSize = page.viewportSize(); - - // prepare page - // NOTE: I saw some sites with strange CMS and with absurd content size width (eg: 8584553) - // This usually leads setViewportSize to crash :( - // So, ensure renderWidth is no more than 2000. - int renderWidth = page.mainFrame()->contentsSize().width(); - if (renderWidth > 2000) - renderWidth = 2000; - int renderHeight = renderWidth * ((0.0 + h) / w); - - page.setViewportSize(QSize(renderWidth, renderHeight)); - - // consider scrollbars and render the page - bool verticalScrollBarActive = !page.mainFrame()->scrollBarGeometry(Qt::Vertical).isEmpty(); - if (verticalScrollBarActive) - renderWidth -= 15; - - bool horizontalScrollBarActive = !page.mainFrame()->scrollBarGeometry(Qt::Horizontal).isEmpty(); - if (horizontalScrollBarActive) - renderHeight -= 15; - - QPixmap pageImage = WebSnap::render(page, renderWidth, renderHeight); - - // resize image - pageImage = pageImage.scaled(w, h, Qt::KeepAspectRatioByExpanding, Qt::SmoothTransformation); - - // restore page state - page.setViewportSize(oldSize); - - return pageImage; -} - - -QString WebSnap::imagePathFromUrl(const KUrl &url) -{ - QUrl temp = QUrl(url.url()); - QByteArray name = temp.toEncoded(QUrl::RemoveScheme | QUrl::RemoveUserInfo | QUrl::StripTrailingSlash); - - QByteArray hashedName = QCryptographicHash::hash(name, QCryptographicHash::Md5).toHex(); - - return KStandardDirs::locateLocal("cache", QString("thumbs/") + hashedName + ".png", true); -} - - -void WebSnap::saveResult(bool ok) -{ - if (ok) - { - QPixmap image = renderPagePreview(m_page, defaultWidth, defaultHeight); - QString path = imagePathFromUrl(m_url); - QFile::remove(path); - image.save(path); - } - - emit snapDone(ok); - - this->deleteLater(); -} - - -bool WebSnap::existsImage(const KUrl &u) -{ - return QFile::exists(imagePathFromUrl(u)); -} diff --git a/kwebapp/websnap.h b/kwebapp/websnap.h deleted file mode 100644 index 0584ce00..00000000 --- a/kwebapp/websnap.h +++ /dev/null @@ -1,121 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2009 Nokia Corporation <qt-info@nokia.com> -* Copyright (C) 2009-2012 by Andrea Diamantini <adjam7 at gmail dot com> -* Copyright (C) 2010 by Matthieu Gicquel <matgic78 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 WEB_SNAP_H -#define WEB_SNAP_H - - -// KDE Includes -#include <KUrl> - -// Qt Includes -#include <QObject> -#include <QWebPage> - -// Forward Declarations -class QPixmap; - -/** - * This class is used in many classes of rekonq to produce an image - * based on the site corresponding to the url passed as argument. - * It also cached the images to not retrieve them every time :) - * - * Heavily based on Graphics-Dojo WebSnap example (thanks!) - * - * We use this in the following rekonq classes: - * - * - TabBar class: to show a tab preview (given a page, you show AND save an image) - * - PreviewSelector class: to save new favorite selection (given a page, you show AND save an image) - * - * - NewTabPage class: to show the favorites page "preview" (given an url, you show AND save an image) - * - */ - -class WebSnap : public QObject -{ - Q_OBJECT - -public: - /** - * Creates a WebSnap object. It will load the url in one WebPage - * and snap an image from it. - * - * @param url the url to load - * @param parent the object parent - */ - explicit WebSnap(const KUrl &url, QObject *parent = 0); - - ~WebSnap(); - - /** - * Snaps a pixmap of size w * h from a page - * - * @param page the page to snap - * @param w the image width - * @param h the image height - * - * @return the pixmap snapped from the page - */ - static QPixmap renderPagePreview(const QWebPage &page, int w = defaultWidth, int h = defaultHeight); - - /** - * Guess the local path where the image for the url provided - * should be - * - * @param url the url to guess snap path - * - * @return the local path of the url snap - */ - static QString imagePathFromUrl(const KUrl &url); - - /** - * Determines if a snap exists for that url - * - */ - static bool existsImage(const KUrl &url); - - -private Q_SLOTS: - void saveResult(bool ok = true); - void load(); - -Q_SIGNALS: - void snapDone(bool ok); - -private: - // Constants - static const int defaultWidth = 200; - static const int defaultHeight = 150; - QWebPage m_page; - KUrl m_url; - - //render a preview: common part of renderPagePreview() and renderTabPreview() - static QPixmap render(const QWebPage &page, int w, int h); -}; - -#endif // WEB_SNAP_H diff --git a/kwebapp/webview.cpp b/kwebapp/webview.cpp deleted file mode 100644 index a79fa41f..00000000 --- a/kwebapp/webview.cpp +++ /dev/null @@ -1,365 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2011-2012 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 "webview.h" -#include "webview.moc" - -// Local Includes -#include "searchengine.h" - -// KDE Includes -#include <KIO/Job> -#include <KIO/RenameDialog> -#include <KIO/JobUiDelegate> - -#include <KGlobalSettings> -#include <KStandardDirs> -#include <KFileDialog> -#include <KJobUiDelegate> -#include <KLocalizedString> -#include <KMenu> -#include <KAction> -#include <KUrl> -#include <KRun> -#include <KToolInvocation> -#include <KActionMenu> - -// Qt Includes -#include <QUrl> -#include <QDebug> -#include <QWebHitTestResult> -#include <QWebHistory> -#include <QNetworkRequest> -#include <QPointer> -#include <QWebSettings> -#include <QApplication> -#include <QMimeData> -#include <QClipboard> - -// Defines -#define QL1S(x) QLatin1String(x) - - -WebView::WebView(QWidget *parent) - : KWebView(parent) - , m_page(0) -{ - page()->setForwardUnsupportedContent(true); - connect(this, SIGNAL(linkShiftClicked(KUrl)), page(), SLOT(downloadUrl(KUrl))); - - setContextMenuPolicy(Qt::CustomContextMenu); - - connect(this, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(menuRequested(QPoint))); -} - - -WebPage *WebView::page() -{ - if (!m_page) - { - m_page = new WebPage(this); - setPage(m_page); - } - return m_page; -} - - -void WebView::menuRequested(const QPoint &pos) -{ - QWebHitTestResult result = page()->mainFrame()->hitTestContent(pos); - - KMenu menu(this); - QAction *a; - - KAction *sendByMailAction = new KAction(this); - sendByMailAction->setIcon(KIcon("mail-send")); - connect(sendByMailAction, SIGNAL(triggered(bool)), this, SLOT(sendByMail())); - - KAction *openInDefaultBrowserAction = new KAction(KIcon("window-new"), i18n("Open in default browser"), this); - connect(openInDefaultBrowserAction, SIGNAL(triggered(bool)), this, SLOT(openLinkInDefaultBrowser())); - - // Choose right context - int resultHit = 0; - if (result.linkUrl().isEmpty()) - resultHit = WebView::EmptySelection; - else - resultHit = WebView::LinkSelection; - - if (!result.pixmap().isNull()) - resultHit |= WebView::ImageSelection; - - if (result.isContentSelected()) - resultHit = WebView::TextSelection; - - // ----------------------------------------------------------- - // Ok, let's start filling up the menu... - - // is content editable? Add PASTE - if (result.isContentEditable()) - { - menu.addAction(pageAction(KWebPage::Paste)); - menu.addSeparator(); - } - - - // EMPTY PAGE ACTIONS ---------------------------------------- - if (resultHit == WebView::EmptySelection) - { - // send by mail: page url - sendByMailAction->setData(page()->currentFrame()->url()); - sendByMailAction->setText(i18n("Share page url")); - - // navigation - QWebHistory *history = page()->history(); - if (history->canGoBack()) - { - menu.addAction(pageAction(KWebPage::Back)); - } - - if (history->canGoForward()) - { - menu.addAction(pageAction(KWebPage::Forward)); - } - - menu.addAction(pageAction(KWebPage::Reload)); - - menu.addSeparator(); - - // Page Actions - menu.addAction(pageAction(KWebPage::SelectAll)); - - menu.addAction(pageAction(KWebPage::DownloadLinkToDisk)); - - } - - // LINK ACTIONS ------------------------------------------ - if (resultHit & WebView::LinkSelection) - { - // send by mail: link url - sendByMailAction->setData(result.linkUrl()); - sendByMailAction->setText(i18n("Share link")); - - openInDefaultBrowserAction->setData(result.linkUrl()); - menu.addAction(openInDefaultBrowserAction); - - menu.addSeparator(); - - a = pageAction(KWebPage::DownloadLinkToDisk); - menu.addAction(a); - menu.addAction(pageAction(KWebPage::CopyLinkToClipboard)); - } - - // IMAGE ACTION ----------------------------------------- - if (resultHit & WebView::ImageSelection) - { - // send by mail: image url - sendByMailAction->setData(result.imageUrl()); - sendByMailAction->setText(i18n("Share image link")); - - menu.addSeparator(); - - a = new KAction(KIcon("view-preview"), i18n("&View Image"), this); - a->setData(result.imageUrl()); - connect(a, SIGNAL(triggered(Qt::MouseButtons, Qt::KeyboardModifiers)), - this, SLOT(viewImage(Qt::MouseButtons, Qt::KeyboardModifiers))); - menu.addAction(a); - - menu.addAction(pageAction(KWebPage::DownloadImageToDisk)); - - a = new KAction(KIcon("view-media-visualization"), i18n("&Copy Image Location"), this); - a->setData(result.imageUrl()); - connect(a, SIGNAL(triggered(Qt::MouseButtons, Qt::KeyboardModifiers)), this, SLOT(slotCopyImageLocation())); - menu.addAction(a); - - } - - // ACTIONS FOR TEXT SELECTION ---------------------------- - if (resultHit & WebView::TextSelection) - { - // send by mail: text - sendByMailAction->setData(selectedText()); - sendByMailAction->setText(i18n("Share selected text")); - - if (result.isContentEditable()) - { - // actions for text selected in field - menu.addAction(pageAction(KWebPage::Cut)); - } - - a = pageAction(KWebPage::Copy); - if (!result.linkUrl().isEmpty()) - a->setText(i18n("Copy Text")); //for link - else - a->setText(i18n("Copy")); - menu.addAction(a); - - if (selectedText().contains('.') && selectedText().indexOf('.') < selectedText().length() - && !selectedText().trimmed().contains(" ") - ) - { - QString text = selectedText(); - text = text.trimmed(); - KUrl urlLikeText(text); - if (urlLikeText.isValid()) - { - QString truncatedUrl = text; - const int maxTextSize = 18; - if (truncatedUrl.length() > maxTextSize) - { - const int truncateSize = 15; - truncatedUrl.truncate(truncateSize); - truncatedUrl += QL1S("..."); - } - - openInDefaultBrowserAction->setData(QUrl(urlLikeText)); - menu.addAction(openInDefaultBrowserAction); - - menu.addSeparator(); - } - } - - // Default SearchEngine - KService::Ptr defaultEngine = SearchEngine::defaultEngine(); - if (defaultEngine) // check if a default engine is set - { - a = new KAction(i18nc("Search selected text with the default search engine", "Search with %1", defaultEngine->name()), this); - a->setIcon(QWebSettings::iconForUrl(SearchEngine::buildQuery(defaultEngine, ""))); - a->setData(defaultEngine->entryPath()); - connect(a, SIGNAL(triggered(bool)), this, SLOT(search())); - menu.addAction(a); - } - - // All favourite ones - KActionMenu *searchMenu = new KActionMenu(KIcon("edit-find"), i18nc("@title:menu", "Search"), this); - - Q_FOREACH(const KService::Ptr & engine, SearchEngine::favorites()) - { - a = new KAction(i18nc("@item:inmenu Search, %1 = search engine", "With %1", engine->name()), this); - a->setIcon(QWebSettings::iconForUrl(SearchEngine::buildQuery(engine, ""))); - a->setData(engine->entryPath()); - connect(a, SIGNAL(triggered(bool)), this, SLOT(search())); - searchMenu->addAction(a); - } - - a = new KAction(KIcon("edit-find"), i18n("On Current Page"), this); - connect(a, SIGNAL(triggered()), this, SLOT(findSelectedText())); - searchMenu->addAction(a); - - if (!searchMenu->menu()->isEmpty()) - { - menu.addAction(searchMenu); - } - } - - // DEFAULT ACTIONs (on the bottom) ----------------------- - menu.addSeparator(); - - // FIXME: bookmarks management -// if (resultHit & WebView::LinkSelection) -// { -// a = new KAction(KIcon("bookmark-new"), i18n("&Bookmark link"), this); -// a->setData(result.linkUrl()); -// connect(a, SIGNAL(triggered(bool)), this, SLOT(bookmarkLink())); -// menu.addAction(a); -// } -// else -// { -// a = new KAction(KIcon("bookmark-new"), i18n("&Add Bookmark"), this); -// connect(a, SIGNAL(triggered(bool)), this, SLOT(bookmarkCurrentPage())); -// menu.addAction(a); -// } - menu.addAction(sendByMailAction); - - - menu.exec(mapToGlobal(pos)); -} - - -void WebView::openLinkInDefaultBrowser() -{ - KAction *a = qobject_cast<KAction*>(sender()); - KUrl u(a->data().toUrl()); - - (void)new KRun(u, this, 0); -} - - -void WebView::sendByMail() -{ - KAction *a = qobject_cast<KAction*>(sender()); - QString url = a->data().toString(); - - KToolInvocation::invokeMailer("", "", "", "", url); -} - - -void WebView::findSelectedText() -{ - QWebPage::FindFlags options = QWebPage::FindWrapsAroundDocument; - - findText(selectedText(), options); -} - - -void WebView::search() -{ - KAction *a = qobject_cast<KAction*>(sender()); - KService::Ptr engine = KService::serviceByDesktopPath(a->data().toString()); - KUrl urlSearch = KUrl(SearchEngine::buildQuery(engine, selectedText())); - - load(urlSearch); -} - - -void WebView::viewImage(Qt::MouseButtons buttons, Qt::KeyboardModifiers modifiers) -{ - Q_UNUSED(buttons); - Q_UNUSED(modifiers); - - KAction *a = qobject_cast<KAction*>(sender()); - KUrl url(a->data().toUrl()); - - load(url); -} - - -void WebView::slotCopyImageLocation() -{ - KAction *a = qobject_cast<KAction*>(sender()); - KUrl imageUrl(a->data().toUrl()); -#ifndef QT_NO_MIMECLIPBOARD - // Set it in both the mouse selection and in the clipboard - QMimeData* mimeData = new QMimeData; - imageUrl.populateMimeData(mimeData); - QApplication::clipboard()->setMimeData(mimeData, QClipboard::Clipboard); - mimeData = new QMimeData; - imageUrl.populateMimeData(mimeData); - QApplication::clipboard()->setMimeData(mimeData, QClipboard::Selection); -#else - QApplication::clipboard()->setText(imageUrl.url()); -#endif -} diff --git a/kwebapp/webview.h b/kwebapp/webview.h deleted file mode 100644 index 7c636367..00000000 --- a/kwebapp/webview.h +++ /dev/null @@ -1,74 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2011-2012 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 WEB_VIEW_H -#define WEB_VIEW_H - - -// Local Includes -#include "webpage.h" - -// KDE Includes -#include <KWebView> - -// Qt Includes -#include <QUrl> - - -class WebView : public KWebView -{ - Q_OBJECT - -public: - - enum ContextType - { - EmptySelection = 0x00000000, - LinkSelection = 0x00000001, - ImageSelection = 0x00000010, - TextSelection = 0x00000100 - }; - - explicit WebView(QWidget *parent = 0); - - WebPage *page(); - -private Q_SLOTS: - void menuRequested(const QPoint &); - void openLinkInDefaultBrowser(); - - void sendByMail(); - void findSelectedText(); - void search(); - - void viewImage(Qt::MouseButtons buttons, Qt::KeyboardModifiers modifiers); - void slotCopyImageLocation(); - -private: - WebPage *m_page; -}; - -#endif // WEB_VIEW_H diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt deleted file mode 100644 index 75c1b0eb..00000000 --- a/src/CMakeLists.txt +++ /dev/null @@ -1,264 +0,0 @@ -### ------- sub dirs ------- - -ADD_SUBDIRECTORY( data ) -ADD_SUBDIRECTORY( tests ) - - -### ------- SETTING REKONQ FILES.. -add_definitions(-DQT_STATICPLUGIN) -QT4_WRAP_CPP(wk_HEADERS_MOC qwebkitplatformplugin.h) - - -SET( rekonq_KDEINIT_SRCS - application.cpp - clicktoflash.cpp - downloaditem.cpp - downloadmanager.cpp - findbar.cpp - icondownloader.cpp - iconmanager.cpp - mainview.cpp - mainwindow.cpp - messagebar.cpp - networkaccessmanager.cpp - newtabpage.cpp - paneltreeview.cpp - previewselectorbar.cpp - protocolhandler.cpp - rekonqmenu.cpp - searchenginebar.cpp - sessionmanager.cpp - sslinfodialog.cpp - tabpreviewpopup.cpp - tabbar.cpp - tabhighlighteffect.cpp - thumbupdater.cpp - urlfilterproxymodel.cpp - urlpanel.cpp - walletbar.cpp - webicon.cpp - webinspectorpanel.cpp - webpage.cpp - webpluginfactory.cpp - websslinfo.cpp - websnap.cpp - webview.cpp - webtab.cpp - zoombar.cpp - #---------------------------------------- - history/autosaver.cpp - history/historymanager.cpp - history/historymodels.cpp - history/historypanel.cpp - #---------------------------------------- - settings/settingsdialog.cpp - settings/appearancewidget.cpp - settings/advancedwidget.cpp - settings/generalwidget.cpp - settings/privacywidget.cpp - settings/tabswidget.cpp - settings/webkitwidget.cpp - settings/passexceptionswidget.cpp - #---------------------------------------- - bookmarks/bookmarkmanager.cpp - bookmarks/bookmarkspanel.cpp - bookmarks/bookmarkstreemodel.cpp - bookmarks/bookmarkscontextmenu.cpp - bookmarks/bookmarkstoolbar.cpp - bookmarks/bookmarkowner.cpp - #---------------------------------------- - adblock/adblockhostmatcher.cpp - adblock/adblockmanager.cpp - adblock/adblocknetworkreply.cpp - adblock/adblockrule.cpp - adblock/adblockrulefallbackimpl.cpp - adblock/adblockrulenullimpl.cpp - adblock/adblockruletextmatchimpl.cpp - adblock/adblockwidget.cpp - adblock/blockedelementswidget.cpp - #---------------------------------------- - urlbar/stackedurlbar.cpp - urlbar/urlbar.cpp - urlbar/completionwidget.cpp - urlbar/urlresolver.cpp - urlbar/listitem.cpp - urlbar/rsswidget.cpp - urlbar/sslwidget.cpp - urlbar/bookmarkwidget.cpp - urlbar/webshortcutwidget.cpp - urlbar/favoritewidget.cpp - #---------------------------------------- - analyzer/analyzerpanel.cpp - analyzer/networkanalyzer.cpp - #---------------------------------------- - opensearch/searchengine.cpp - opensearch/opensearchwriter.cpp - opensearch/opensearchreader.cpp - opensearch/opensearchmanager.cpp - opensearch/opensearchengine.cpp - opensearch/suggestionparser.cpp - #---------------------------------------- - useragent/useragentinfo.cpp - useragent/useragentmanager.cpp - useragent/useragentwidget.cpp - #---------------------------------------- - sync/ftpsynchandler.cpp - sync/googlesynchandler.cpp - sync/syncassistant.cpp - sync/synchandler.cpp - sync/syncmanager.cpp - # - sync/synccheckwidget.cpp - sync/syncdatawidget.cpp - sync/synchosttypewidget.cpp - sync/syncftpsettingswidget.cpp - sync/syncgooglesettingswidget.cpp - sync/syncoperasettingswidget.cpp - #---------------------------- - kspellplugin.cpp - ${wk_HEADERS_MOC} -) - -# Nepomuk OPTIONAL src files -IF(HAVE_NEPOMUK) - SET( rekonq_KDEINIT_SRCS - ${rekonq_KDEINIT_SRCS} - urlbar/resourcelinkdialog.cpp - urlbar/newresourcedialog.cpp - ) -ENDIF(HAVE_NEPOMUK) - - -# Opera sync optional src files -IF(HAVE_QCA2 AND HAVE_QTOAUTH) - SET( rekonq_KDEINIT_SRCS - ${rekonq_KDEINIT_SRCS} - sync/operasynchandler.cpp - ) -ENDIF(HAVE_QCA2 AND HAVE_QTOAUTH) - - -KDE4_ADD_UI_FILES( rekonq_KDEINIT_SRCS - settings/settings_general.ui - settings/settings_tabs.ui - settings/settings_appearance.ui - settings/settings_webkit.ui - settings/settings_advanced.ui - settings/settings_privacy.ui - settings/password_exceptions.ui - # ---------------------------------------- - adblock/settings_adblock.ui - adblock/blocked_elements.ui - # ---------------------------------------- - cleardata.ui - sslinfo.ui - webappcreation.ui - useragent/useragentsettings.ui - # ---------------------------------------- - sync/sync_check.ui - sync/sync_data.ui - sync/sync_ftp_settings.ui - sync/sync_google_settings.ui - sync/sync_opera_settings.ui - sync/sync_host_type.ui - ) - -KDE4_ADD_KCFG_FILES( rekonq_KDEINIT_SRCS rekonq.kcfgc ) - -IF(HAVE_NEPOMUK) - INCLUDE(SopranoAddOntology) -ENDIF(HAVE_NEPOMUK) - -### ------------- INCLUDING DIRECTORIES... - -INCLUDE_DIRECTORIES ( ${CMAKE_CURRENT_SOURCE_DIR} - ${CMAKE_CURRENT_SOURCE_DIR}/adblock - ${CMAKE_CURRENT_SOURCE_DIR}/analyzer - ${CMAKE_CURRENT_SOURCE_DIR}/bookmarks - ${CMAKE_CURRENT_SOURCE_DIR}/history - ${CMAKE_CURRENT_SOURCE_DIR}/opensearch - ${CMAKE_CURRENT_SOURCE_DIR}/settings - ${CMAKE_CURRENT_SOURCE_DIR}/sync - ${CMAKE_CURRENT_SOURCE_DIR}/urlbar - ${CMAKE_CURRENT_SOURCE_DIR}/useragent - ${CMAKE_CURRENT_BINARY_DIR} - ${KDE4_INCLUDES} - ${QT4_INCLUDES} -) - -# Nepomuk optional include directories -IF(HAVE_NEPOMUK) - INCLUDE_DIRECTORIES(${SOPRANO_INCLUDE_DIR} - ${NEPOMUK_INCLUDE_DIR} - ) -ENDIF(HAVE_NEPOMUK) - -# Opera sync optional include directories -IF(HAVE_QCA2 AND HAVE_QTOAUTH) - INCLUDE_DIRECTORIES(${QCA2_INCLUDE_DIR} - ${QTOAUTH_INCLUDE_DIR} - ) -ENDIF(HAVE_QCA2 AND HAVE_QTOAUTH) - - -### -------------- ADDING DEFINITIONS... - -ADD_DEFINITIONS ( ${KDE4_DEFINITIONS} ) - - -### -------------- ADDING APPLICATION ICON... - -KDE4_ADD_APP_ICON( rekonq_KDEINIT_SRCS ${CMAKE_CURRENT_SOURCE_DIR}/../icons/hi*-app-rekonq.png ) - - -### --------------- ADDING EXECUTABLE... - -KDE4_ADD_KDEINIT_EXECUTABLE( rekonq ${rekonq_KDEINIT_SRCS} main.cpp ) - - -### --------------- TARGETTING LINK LIBRARIES... - -TARGET_LINK_LIBRARIES ( kdeinit_rekonq - ${QT_LIBRARIES} - ${QT_QTSCRIPT_LIBRARY} - ${QT_QTWEBKIT_LIBRARY} - ${KDE4_KDEWEBKIT_LIBS} - ${KDE4_KUTILS_LIBS} - ${KDE4_KDEUI_LIBS} - ${KDE4_KIO_LIBS} - ${KDE4_KPARTS_LIBS} -) - - -# Nepomuk optional target link libraries -IF(HAVE_NEPOMUK) - TARGET_LINK_LIBRARIES( kdeinit_rekonq - ${NEPOMUK_LIBRARIES} - ${NEPOMUK_QUERY_LIBRARIES} - ${SOPRANO_LIBRARIES} - ) -ENDIF(HAVE_NEPOMUK) - -# KActivities optional target link libraries -IF(HAVE_KACTIVITIES) - TARGET_LINK_LIBRARIES( kdeinit_rekonq - ${KACTIVITIES_LIBRARY} - ) -ENDIF(HAVE_KACTIVITIES) - -# Opera sync optional link libraries -IF(HAVE_QCA2 AND HAVE_QTOAUTH) - TARGET_LINK_LIBRARIES( kdeinit_rekonq - ${QCA2_LIBRARY} - ${QTOAUTH_LIBRARY} - ) -ENDIF(HAVE_QCA2 AND HAVE_QTOAUTH) - - -### ------------ INSTALL FILES... - -INSTALL( TARGETS rekonq ${INSTALL_TARGETS_DEFAULT_ARGS} ) -INSTALL( TARGETS kdeinit_rekonq ${INSTALL_TARGETS_DEFAULT_ARGS} ) - -INSTALL( FILES rekonq.kcfg DESTINATION ${KCFG_INSTALL_DIR} ) -INSTALL( FILES rekonqui.rc DESTINATION ${DATA_INSTALL_DIR}/rekonq ) diff --git a/src/Messages.sh b/src/Messages.sh deleted file mode 100644 index ccad97fc..00000000 --- a/src/Messages.sh +++ /dev/null @@ -1,5 +0,0 @@ -#! /bin/sh -$EXTRACTRC *.ui */*ui *.rc >> rc.cpp || exit 1 -$XGETTEXT *.cpp */*.cpp -o $podir/rekonq.pot -rm -f rc.cpp - diff --git a/src/adblock/adblockhostmatcher.cpp b/src/adblock/adblockhostmatcher.cpp deleted file mode 100644 index 021fe12d..00000000 --- a/src/adblock/adblockhostmatcher.cpp +++ /dev/null @@ -1,56 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2010-2011 by Benjamin Poulain <ikipou 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 "adblockhostmatcher.h" - -// Rekonq Includes -#include "rekonq_defines.h" - -bool AdBlockHostMatcher::tryAddFilter(const QString &filter) -{ - if (filter.startsWith(QL1S("||"))) - { - - QString domain = filter.mid(2); - - if (!domain.endsWith(QL1C('^'))) - return false; - - if (domain.contains(QL1C('$'))) - return false; - - domain = domain.left(domain.size() - 1); - - if (domain.contains(QL1C('/')) || domain.contains(QL1C('*')) || domain.contains(QL1C('^'))) - return false; - - domain = domain.toLower(); - m_hostList.insert(domain); - m_hostList.insert(QL1S("www.") + domain); - return true; - } - return false; -} diff --git a/src/adblock/adblockhostmatcher.h b/src/adblock/adblockhostmatcher.h deleted file mode 100644 index bdad883c..00000000 --- a/src/adblock/adblockhostmatcher.h +++ /dev/null @@ -1,54 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2010-2011 by Benjamin Poulain <ikipou 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 ADBLOCKHOSTMATCHER_H -#define ADBLOCKHOSTMATCHER_H - -#include <QSet> -#include <QString> - -class AdBlockHostMatcher -{ -public: - // Try to add an adblock filter to this host matcher. - // If the filter is not an hostname, the filter is not added - // and the method return false; - bool tryAddFilter(const QString &filter); - - bool match(const QString &host) const - { - return m_hostList.contains(host.toLower()); - } - - void clear() - { - m_hostList.clear(); - } - -private: - QSet<QString> m_hostList; -}; - -#endif // ADBLOCKHOSTMATCHER_H diff --git a/src/adblock/adblockmanager.cpp b/src/adblock/adblockmanager.cpp deleted file mode 100644 index 73daef88..00000000 --- a/src/adblock/adblockmanager.cpp +++ /dev/null @@ -1,450 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2010-2012 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 "adblockmanager.h" -#include "adblockmanager.moc" - -// Auto Includes -#include "rekonq.h" - -// Local Includes -#include "adblocknetworkreply.h" -#include "adblockwidget.h" -#include "blockedelementswidget.h" - -#include "webpage.h" - -// KDE Includes -#include <KIO/FileCopyJob> -#include <KStandardDirs> - -// Qt Includes -#include <QUrl> -#include <QWebElement> -#include <QNetworkReply> -#include <QNetworkRequest> - - -AdBlockManager::AdBlockManager(QObject *parent) - : QObject(parent) - , _isAdblockEnabled(false) - , _isHideAdsEnabled(false) -{ - loadSettings(); -} - - -AdBlockManager::~AdBlockManager() -{ - _whiteList.clear(); - _blackList.clear(); - _hideList.clear(); -} - - -bool AdBlockManager::isEnabled() -{ - return _isAdblockEnabled; -} - - -bool AdBlockManager::isHidingElements() -{ - return _isHideAdsEnabled; -} - - -void AdBlockManager::loadSettings() -{ - // first, check this... - QString adblockFilePath = KStandardDirs::locateLocal("appdata" , QL1S("adblockrc")); - if (!QFile::exists(adblockFilePath)) - { - QString generalAdblockFilePath = KStandardDirs::locate("appdata" , QL1S("adblockrc")); - QFile adblockFile(generalAdblockFilePath); - bool copied = adblockFile.copy(adblockFilePath); - if (!copied) - { - kDebug() << "oh oh... Problems copying default adblock file"; - return; - } - } - _adblockConfig = KSharedConfig::openConfig("adblockrc", KConfig::SimpleConfig, "appdata"); - // ---------------- - - _hostWhiteList.clear(); - _hostBlackList.clear(); - - _whiteList.clear(); - _blackList.clear(); - _hideList.clear(); - - KConfigGroup settingsGroup(_adblockConfig, "Settings"); - _isAdblockEnabled = settingsGroup.readEntry("adBlockEnabled", false); - - // no need to load filters if adblock is not enabled :) - if (!_isAdblockEnabled) - return; - - // just to be sure.. - _isHideAdsEnabled = settingsGroup.readEntry("hideAdsEnabled", false); - - // ---------------------------------------------------------- - - QDateTime today = QDateTime::currentDateTime(); - QDateTime lastUpdate = QDateTime::fromString(settingsGroup.readEntry("lastUpdate", QString())); - int days = settingsGroup.readEntry("updateInterval", 7); - - bool allSubscriptionsNeedUpdate = (today > lastUpdate.addDays(days)); - if (allSubscriptionsNeedUpdate) - { - settingsGroup.writeEntry("lastUpdate", today.toString()); - } - - // (Eventually) update and load automatic rules - KConfigGroup filtersGroup(_adblockConfig, "FiltersList"); - for (int i = 0; i < 60; i++) - { - QString n = QString::number(i + 1); - if (!filtersGroup.hasKey("FilterEnabled-" + n)) - continue; - - bool isFilterEnabled = filtersGroup.readEntry("FilterEnabled-" + n, false); - if (!isFilterEnabled) - continue; - - bool fileExists = subscriptionFileExists(i); - if (allSubscriptionsNeedUpdate || !fileExists) - { - kDebug() << "FILE SHOULDN'T EXIST. updating subscription"; - updateSubscription(i); - } - else - { - QString rulesFilePath = KStandardDirs::locateLocal("appdata" , QL1S("adblockrules_") + n); - loadRules(rulesFilePath); - } - } - - // load local rules - QString localRulesFilePath = KStandardDirs::locateLocal("appdata" , QL1S("adblockrules_local")); - loadRules(localRulesFilePath); -} - - -void AdBlockManager::loadRules(const QString &rulesFilePath) -{ - QFile ruleFile(rulesFilePath); - if (!ruleFile.open(QFile::ReadOnly | QFile::Text)) - { - kDebug() << "Unable to open rule file" << rulesFilePath; - return; - } - - QTextStream in(&ruleFile); - while (!in.atEnd()) - { - QString stringRule = in.readLine(); - loadRuleString(stringRule); - } -} - - -void AdBlockManager::loadRuleString(const QString &stringRule) -{ - // ! rules are comments - if (stringRule.startsWith('!')) - return; - - // [ rules are ABP info - if (stringRule.startsWith('[')) - return; - - // empty rules are just dangerous.. - // (an empty rule in whitelist allows all, in blacklist blocks all..) - if (stringRule.isEmpty()) - return; - - // white rules - if (stringRule.startsWith(QL1S("@@"))) - { - const QString filter = stringRule.mid(2); - if (_hostWhiteList.tryAddFilter(filter)) - return; - - AdBlockRule rule(filter); - _whiteList << rule; - return; - } - - // hide (CSS) rules - if (stringRule.startsWith(QL1S("##"))) - { - _hideList << stringRule.mid(2); - return; - } - - // TODO implement domain-specific hiding - if (stringRule.contains(QL1S("##"))) - return; - - if (_hostBlackList.tryAddFilter(stringRule)) - return; - - AdBlockRule rule(stringRule); - _blackList << rule; -} - - -QNetworkReply *AdBlockManager::block(const QNetworkRequest &request, WebPage *page) -{ - if (!_isAdblockEnabled) - return 0; - - // we (ad)block just http traffic - if (request.url().scheme() != QL1S("http")) - return 0; - - QString urlString = request.url().toString(); - // We compute a lowercase version of the URL so each rule does not - // have to do it. - const QString urlStringLowerCase = urlString.toLower(); - const QString host = request.url().host(); - - // check white rules before :) - if (_hostWhiteList.match(host)) - { - kDebug() << "ADBLOCK: WHITE RULE (@@) Matched by string: " << urlString; - return 0; - } - - Q_FOREACH(const AdBlockRule & filter, _whiteList) - { - if (filter.match(request, urlString, urlStringLowerCase)) - { - kDebug() << "ADBLOCK: WHITE RULE (@@) Matched by string: " << urlString; - return 0; - } - } - - // then check the black ones :( - if (_hostBlackList.match(host)) - { - kDebug() << "ADBLOCK: BLACK RULE Matched by string: " << urlString; - AdBlockNetworkReply *reply = new AdBlockNetworkReply(request, urlString, this); - _blockedElements << request.url().toString(); - page->setHasAdBlockedElements(true); - return reply; - } - - // get sure page is extant to perform elements check. bug:282012 - if (!page) - return 0; - - Q_FOREACH(const AdBlockRule & filter, _blackList) - { - if (filter.match(request, urlString, urlStringLowerCase)) - { - kDebug() << "ADBLOCK: BLACK RULE Matched by string: " << urlString; - - QWebElement document = page->mainFrame()->documentElement(); - QWebElementCollection elements = document.findAll("[src]"); - Q_FOREACH(QWebElement el, elements) - { - QString srcAttribute = el.attribute("src"); - if (srcAttribute.isEmpty()) - continue; - - srcAttribute = page->mainFrame()->baseUrl().resolved(srcAttribute).toString(); - - if (filter.match(request, srcAttribute, srcAttribute.toLower())) - { - el.setStyleProperty(QL1S("visibility"), QL1S("hidden")); - el.setStyleProperty(QL1S("width"), QL1S("0")); - el.setStyleProperty(QL1S("height"), QL1S("0")); - } - } - - AdBlockNetworkReply *reply = new AdBlockNetworkReply(request, urlString, this); - _blockedElements << request.url().toString(); - page->setHasAdBlockedElements(true); - return reply; - } - } - - // no match - return 0; -} - - -void AdBlockManager::applyHidingRules(WebPage *page) -{ - if (!page) - return; - - if (!_isAdblockEnabled) - return; - - if (!_isHideAdsEnabled) - return; - - QWebElement document = page->mainFrame()->documentElement(); - - // HIDE RULES - Q_FOREACH(const QString & filter, _hideList) - { - QWebElementCollection elements = document.findAll(filter); - - Q_FOREACH(QWebElement el, elements) - { - if (el.isNull()) - continue; - kDebug() << "Hide element: " << el.localName(); - el.setStyleProperty(QL1S("visibility"), QL1S("hidden")); - el.removeFromDocument(); - _hidedElements++; - page->setHasAdBlockedElements(true); - } - } -} - - -void AdBlockManager::updateSubscription(int i) -{ - KConfigGroup filtersGroup(_adblockConfig, "FiltersList"); - QString n = QString::number(i + 1); - - QString fUrl = filtersGroup.readEntry("FilterURL-" + n, QString()); - KUrl subUrl = KUrl(fUrl); - - QString rulesFilePath = KStandardDirs::locateLocal("appdata" , QL1S("adblockrules_") + n); - KUrl destUrl = KUrl(rulesFilePath); - - KIO::FileCopyJob* job = KIO::file_copy(subUrl , destUrl, -1, KIO::HideProgressInfo); - job->metaData().insert("ssl_no_client_cert", "TRUE"); - job->metaData().insert("ssl_no_ui", "TRUE"); - job->metaData().insert("UseCache", "false"); - job->metaData().insert("cookies", "none"); - job->metaData().insert("no-auth", "true"); - - connect(job, SIGNAL(finished(KJob *)), this, SLOT(slotFinished(KJob *))); -} - - -void AdBlockManager::slotFinished(KJob *job) -{ - if (job->error()) - return; - - KIO::FileCopyJob *fJob = qobject_cast<KIO::FileCopyJob *>(job); - KUrl url = fJob->destUrl(); - url.setProtocol(QString()); // this is needed to load local url well :( - loadRules(url.url()); -} - - -bool AdBlockManager::subscriptionFileExists(int i) -{ - QString n = QString::number(i + 1); - - QString rulesFilePath = KStandardDirs::locateLocal("appdata" , QL1S("adblockrules_") + n); - return QFile::exists(rulesFilePath); -} - - -void AdBlockManager::showSettings() -{ - QPointer<KDialog> dialog = new KDialog(); - dialog->setCaption(i18nc("@title:window", "Ad Block Settings")); - dialog->setButtons(KDialog::Ok | KDialog::Cancel); - - AdBlockWidget widget(_adblockConfig); - dialog->setMainWidget(&widget); - connect(dialog, SIGNAL(okClicked()), &widget, SLOT(save())); - connect(dialog, SIGNAL(okClicked()), this, SLOT(loadSettings())); - dialog->exec(); - - dialog->deleteLater(); -} - - -void AdBlockManager::addCustomRule(const QString &stringRule, bool reloadPage) -{ - // save rule in local filters - QString localRulesFilePath = KStandardDirs::locateLocal("appdata" , QL1S("adblockrules_local")); - - QFile ruleFile(localRulesFilePath); - if (!ruleFile.open(QFile::WriteOnly | QFile::Append)) - { - kDebug() << "Unable to open rule file" << localRulesFilePath; - return; - } - - QTextStream out(&ruleFile); - out << stringRule << '\n'; - - ruleFile.close(); - - // load it - loadRuleString(stringRule); - - // eventually reload page - if (reloadPage) - emit reloadCurrentPage(); -} - - -void AdBlockManager::showBlockedItemDialog() -{ - QPointer<KDialog> dialog = new KDialog(); - dialog->setCaption(i18nc("@title:window", "Blocked elements")); - dialog->setButtons(KDialog::Ok); - - BlockedElementsWidget widget(this); - widget.setBlockedElements(_blockedElements); - widget.setHidedElements(_hidedElements); - - dialog->setMainWidget(&widget); - dialog->exec(); - - Q_FOREACH(const QString & r, widget.rulesToAdd()) - { - addCustomRule(r); - } - - if (widget.pageNeedsReload()) - emit reloadCurrentPage(); - - dialog->deleteLater(); -} - - -void AdBlockManager::clearElementsLists() -{ - _blockedElements.clear(); - _hidedElements = 0; -} diff --git a/src/adblock/adblockmanager.h b/src/adblock/adblockmanager.h deleted file mode 100644 index fe92cf11..00000000 --- a/src/adblock/adblockmanager.h +++ /dev/null @@ -1,202 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2010-2012 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 ADBLOCK_MANAGER_H -#define ADBLOCK_MANAGER_H - - -// NOTE: AdBlockPlus Filters (fast) summary -// -// ### Basic Filter rules -// -// RULE = http://example.com/ads/* -// this should block every link containing all things from that link -// -// ### Exception rules (@@) -// -// RULE = @@advice* -// -// this will save every site, also that matched by other rules, cointaining words -// that starts with "advice". Wildcards && regular expression allowed here. -// -// ### Beginning/end matching rules (||) -// -// RULE=||http://badsite.com -// -// will stop all links starting with http://badsite.com -// -// RULE=*swf|| -// -// will stop all links to direct flash contents -// -// ### Comments (!) -// -// RULE=!azz.. -// -// Every rule starting with a ! is commented out and should not be checked -// -// ### Filter Options -// -// There are 3 kind of filter options: -// -// --- ### TYPE OPTIONS -// -// You can also specify a number of options to modify the behavior of a filter. -// You list these options separated with commas after a dollar sign ($) at the end of the filter -// -// RULE=*/ads/*$element,match-case -// -// where $element can be one of the following: -// $script external scripts loaded via HTML script tag -// $image regular images, typically loaded via HTML img tag -// $background background images, often specified via CSS -// $stylesheet external CSS stylesheet files -// $object content handled by browser plugins, e.g. Flash or Java -// $xbl XBL bindings (typically loaded by -moz-binding CSS property) Firefox 3 or higher required -// $ping link pings Firefox 3 or higher required -// $xmlhttprequest requests started by the XMLHttpRequest object Firefox 3 or higher required -// $object-subrequest requests started plugins like Flash Firefox 3 or higher required -// $dtd DTD files loaded by XML documents Firefox 3 or higher required -// $subdocument embedded pages, usually included via HTML frames -// $document the page itself (only exception rules can be applied to the page) -// $other types of requests not covered in the list above -// -// -// --- ### INVERSE TYPE OPTIONS -// -// Inverse type options are allowed through the ~ sign, for example: -// -// RULE=*/ads/*~$script,match-case -// -// -// --- ### THIRD-PARTY OPTIONS -// -// If "third-party" option is specified, filter is applied just to requests coming from a different -// origin than the currently viewed page. -// In the same way, the "~third-party" option restricts the filter to the requests coming from the -// same origin as the currently viewed page. -// -// -// ### Regular expressions -// -// They usually allow to check for (a lot of) sites, using just one rule, but be careful: -// BASIC FILTERS ARE PROCESSED FASTER THAN REGULAR EXPRESSIONS -// (That's true at least in ABP! In rekonq, I don't know...) -// -// -// ### ELEMENT HIDING (##) -// -// This is quite different from usual adblock (but, for me, more powerful!). Sometimes you will find advertisements -// that can’t be blocked because they are embedded as text in the web page itself. -// All you can do there is HIDE the element :) -// -// RULE=##div.advise -// -// The previous rule will hide every div whose class is named "advise". Usual CSS selectors apply here :) -// -// END NOTE ---------------------------------------------------------------------------------------------------------- - - -// Rekonq Includes -#include "rekonq_defines.h" - -// Local Includes -#include "adblockhostmatcher.h" -#include "adblockrule.h" - -// KDE Includes -#include <KIO/Job> -#include <KSharedConfig> - -// Qt Includes -#include <QObject> -#include <QStringList> -#include <QByteArray> - -// Forward Includes -class QNetworkReply; -class QNetworkRequest; -class WebPage; - -// Definitions -typedef QList<AdBlockRule> AdBlockRuleList; - - -class REKONQ_TESTS_EXPORT AdBlockManager : public QObject -{ - Q_OBJECT - -public: - AdBlockManager(QObject *parent = 0); - ~AdBlockManager(); - - bool isEnabled(); - bool isHidingElements(); - - QNetworkReply *block(const QNetworkRequest &request, WebPage *page); - void applyHidingRules(WebPage *page); - - void addCustomRule(const QString &, bool reloadPage = true); - void clearElementsLists(); - -private: - void updateSubscription(int); - bool subscriptionFileExists(int); - - // load a file rule, given a path - void loadRules(const QString &rulesFilePath); - - // load a single rule - void loadRuleString(const QString &stringRule); - -private Q_SLOTS: - void loadSettings(); - void showSettings(); - void showBlockedItemDialog(); - - void slotFinished(KJob *); - -Q_SIGNALS: - void reloadCurrentPage(); - -private: - bool _isAdblockEnabled; - bool _isHideAdsEnabled; - - AdBlockHostMatcher _hostBlackList; - AdBlockHostMatcher _hostWhiteList; - AdBlockRuleList _blackList; - AdBlockRuleList _whiteList; - QStringList _hideList; - - QStringList _blockedElements; - int _hidedElements; - - KSharedConfig::Ptr _adblockConfig; -}; - -#endif diff --git a/src/adblock/adblocknetworkreply.cpp b/src/adblock/adblocknetworkreply.cpp deleted file mode 100644 index 5a5e9d8b..00000000 --- a/src/adblock/adblocknetworkreply.cpp +++ /dev/null @@ -1,70 +0,0 @@ -/* ============================================================ - * - * This file is a part of the rekonq project - * - * Copyright (c) 2009 by Benjamin C. Meyer <ben@meyerhome.net> - * 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 "adblocknetworkreply.h" -#include "adblocknetworkreply.moc" - -// KDE Includes -#include <klocalizedstring.h> - -// Qt Includes -#include <QtCore/QTimer> -#include <QtCore/QString> - -#include <QtNetwork/QNetworkRequest> - - -AdBlockNetworkReply::AdBlockNetworkReply(const QNetworkRequest &request, const QString &urlString, QObject *parent) - : QNetworkReply(parent) -{ - setOperation(QNetworkAccessManager::GetOperation); - setRequest(request); - setUrl(request.url()); - setError(QNetworkReply::ContentAccessDenied, i18n("Blocked by AdBlockRule: %1", urlString)); - QTimer::singleShot(0, this, SLOT(delayedFinished())); -} - - -void AdBlockNetworkReply::abort() -{ -} - - -qint64 AdBlockNetworkReply::readData(char *data, qint64 maxSize) -{ - Q_UNUSED(data); - Q_UNUSED(maxSize); - return -1; -} - - -void AdBlockNetworkReply::delayedFinished() -{ - emit error(QNetworkReply::ContentAccessDenied); - emit finished(); -} diff --git a/src/adblock/adblocknetworkreply.h b/src/adblock/adblocknetworkreply.h deleted file mode 100644 index f85868b8..00000000 --- a/src/adblock/adblocknetworkreply.h +++ /dev/null @@ -1,58 +0,0 @@ -/* ============================================================ - * - * This file is a part of the rekonq project - * - * Copyright (c) 2009 by Benjamin C. Meyer <ben@meyerhome.net> - * Copyright (C) 2010-2011 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 ADBLOCK_NETWORK_REPLY_H -#define ADBLOCK_NETWORK_REPLY_H - - -// Rekonq Includes -#include "rekonq_defines.h" - -// Qt Includes -#include <QNetworkReply> - -// Forward Declarations -class QString; - - -class REKONQ_TESTS_EXPORT AdBlockNetworkReply : public QNetworkReply -{ - Q_OBJECT - -public: - AdBlockNetworkReply(const QNetworkRequest &request, const QString &urlString, QObject *parent = 0); - void abort(); - -protected: - qint64 readData(char *data, qint64 maxSize); - -private Q_SLOTS: - void delayedFinished(); - -}; - -#endif // ADBLOCKBLOCKEDNETWORKREPLY_H diff --git a/src/adblock/adblockrule.cpp b/src/adblock/adblockrule.cpp deleted file mode 100644 index d65c340d..00000000 --- a/src/adblock/adblockrule.cpp +++ /dev/null @@ -1,67 +0,0 @@ -/* ============================================================ - * - * This file is a part of the rekonq project - * - * Copyright (c) 2009 by Zsombor Gegesy <gzsombor@gmail.com> - * Copyright (c) 2009 by Benjamin C. Meyer <ben@meyerhome.net> - * Copyright (C) 2010-2012 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 "adblockrule.h" - -// Local Includes -#include "adblockrulefallbackimpl.h" -#include "adblockrulenullimpl.h" -#include "adblockruletextmatchimpl.h" - - -AdBlockRule::AdBlockRule(const QString &filter) -{ - switch (AdBlockRule::ruleType(filter)) - { - case TextRule: - m_implementation = QSharedPointer<AdBlockRuleImpl>(new AdBlockRuleTextMatchImpl(filter)); - break; - - case FallbackRule: - m_implementation = QSharedPointer<AdBlockRuleImpl>(new AdBlockRuleFallbackImpl(filter)); - break; - - case NullRule: - default: - m_implementation = QSharedPointer<AdBlockRuleImpl>(new AdBlockRuleNullImpl(filter)); - break; - } -} - - -RuleTypes AdBlockRule::ruleType(const QString &filter) -{ - if (AdBlockRuleTextMatchImpl::isTextMatchFilter(filter)) - return TextRule; - - if (AdBlockRuleNullImpl::isNullFilter(filter)) - return NullRule; - - return FallbackRule; -} diff --git a/src/adblock/adblockrule.h b/src/adblock/adblockrule.h deleted file mode 100644 index 15dea344..00000000 --- a/src/adblock/adblockrule.h +++ /dev/null @@ -1,74 +0,0 @@ -/* - * This file is a part of the rekonq project - * - * Copyright (c) 2009 by Benjamin C. Meyer <ben@meyerhome.net> - * Copyright (C) 2010-2012 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 ADBLOCKRULE_H -#define ADBLOCKRULE_H - - -// Rekonq Includes -#include "rekonq_defines.h" - -#include "adblockruleimpl.h" - -#include <QSharedPointer> - -// Forward Includes -class QNetworkRequest; -class QString; - - -enum RuleTypes -{ - TextRule, - FallbackRule, - NullRule -}; - - -class AdBlockRule -{ -public: - AdBlockRule(const QString &filter); - - bool match(const QNetworkRequest &request, const QString &encodedUrl, const QString &encodedUrlLowerCase) const - { - Q_ASSERT(encodedUrl.toLower() == encodedUrlLowerCase); - bool b = m_implementation->match(request, encodedUrl, encodedUrlLowerCase); - if (b) - { - kDebug() << m_implementation->ruleType() << ": rule string = " << m_implementation->ruleString(); - } - return b; - } - - static RuleTypes ruleType(const QString &filter); - -private: - QSharedPointer<AdBlockRuleImpl> m_implementation; -}; - - -#endif // ADBLOCKRULE_H diff --git a/src/adblock/adblockrulefallbackimpl.cpp b/src/adblock/adblockrulefallbackimpl.cpp deleted file mode 100644 index b547beb0..00000000 --- a/src/adblock/adblockrulefallbackimpl.cpp +++ /dev/null @@ -1,180 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2010-2011 by Benjamin Poulain <ikipou at gmail dot com> -* Copyright (C) 2011-2012 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 "adblockrulefallbackimpl.h" - -// Rekonq Includes -#include "rekonq_defines.h" - -// Qt Includes -#include <QWebFrame> -#include <QNetworkReply> -#include <QStringList> - - - -static inline bool isRegExpFilter(const QString &filter) -{ - return filter.startsWith(QL1C('/')) && filter.endsWith(QL1C('/')); -} - - -AdBlockRuleFallbackImpl::AdBlockRuleFallbackImpl(const QString &filter) - : AdBlockRuleImpl(filter) - , m_thirdPartyOption(false) -{ - m_regExp.setCaseSensitivity(Qt::CaseInsensitive); - m_regExp.setPatternSyntax(QRegExp::RegExp2); - - QString parsedLine = filter; - - const int optionsNumber = parsedLine.lastIndexOf(QL1C('$')); - if (optionsNumber >= 0 && !isRegExpFilter(parsedLine)) - { - const QStringList options(parsedLine.mid(optionsNumber + 1).split(QL1C(','))); - parsedLine = parsedLine.left(optionsNumber); - - if (options.contains(QL1S("match-case"))) - m_regExp.setCaseSensitivity(Qt::CaseSensitive); - - if (options.contains(QL1S("third-party"))) - m_thirdPartyOption = true; - - Q_FOREACH(const QString & option, options) - { - // Domain restricted filter - const QString domainKeyword(QL1S("domain=")); - if (option.startsWith(domainKeyword)) - { - QStringList domainList = option.mid(domainKeyword.length()).split(QL1C('|')); - Q_FOREACH(const QString & domain, domainList) - { - if (domain.startsWith(QL1C('~'))) - m_whiteDomains.insert(domain.toLower()); - else - m_blackDomains.insert(domain.toLower()); - } - } - } - } - - if (isRegExpFilter(parsedLine)) - parsedLine = parsedLine.mid(1, parsedLine.length() - 2); - else - parsedLine = convertPatternToRegExp(parsedLine); - - m_regExp.setPattern(parsedLine); -} - - -bool AdBlockRuleFallbackImpl::match(const QNetworkRequest &request, const QString &encodedUrl, const QString &) const -{ - if (m_thirdPartyOption) - { - const QString referer = request.rawHeader("referer"); - const QString host = request.url().host(); - - if (referer.contains(host)) // is NOT third party - return false; - } - - const bool regexpMatch = m_regExp.indexIn(encodedUrl) != -1; - - if (regexpMatch && (!m_whiteDomains.isEmpty() || !m_blackDomains.isEmpty())) - { - Q_ASSERT(qobject_cast<QWebFrame*>(request.originatingObject())); - const QWebFrame *const origin = static_cast<QWebFrame * const>(request.originatingObject()); - - const QString originDomain = origin->url().host(); - - if (!m_whiteDomains.isEmpty()) - { - // In this context, white domains means we block anything but what is in the list. - if (m_whiteDomains.contains(originDomain)) - return false; - return true; - } - else if (m_blackDomains.contains(originDomain)) - { - return true; - } - return false; - } - return regexpMatch; -} - - -QString AdBlockRuleFallbackImpl::convertPatternToRegExp(const QString &wildcardPattern) -{ - QString pattern = wildcardPattern; - - // remove multiple wildcards - pattern.replace(QRegExp(QL1S("\\*+")), QL1S("*")); - - // remove anchors following separator placeholder - pattern.replace(QRegExp(QL1S("\\^\\|$")), QL1S("^")); - - // remove leading wildcards - pattern.replace(QRegExp(QL1S("^(\\*)")), QL1S("")); - - // remove trailing wildcards - pattern.replace(QRegExp(QL1S("(\\*)$")), QL1S("")); - - // escape special symbols - pattern.replace(QRegExp(QL1S("(\\W)")), QL1S("\\\\1")); - - // process extended anchor at expression start - pattern.replace(QRegExp(QL1S("^\\\\\\|\\\\\\|")), QL1S("^[\\w\\-]+:\\/+(?!\\/)(?:[^\\/]+\\.)?")); - - // process separator placeholders - pattern.replace(QRegExp(QL1S("\\\\\\^")), QL1S("(?:[^\\w\\d\\-.%]|$)")); - - // process anchor at expression start - pattern.replace(QRegExp(QL1S("^\\\\\\|")), QL1S("^")); - - // process anchor at expression end - pattern.replace(QRegExp(QL1S("\\\\\\|$")), QL1S("$")); - - // replace wildcards by .* - pattern.replace(QRegExp(QL1S("\\\\\\*")), QL1S(".*")); - - // Finally, return... - return pattern; -} - - -QString AdBlockRuleFallbackImpl::ruleString() const -{ - return m_regExp.pattern(); -} - - -QString AdBlockRuleFallbackImpl::ruleType() const -{ - return QL1S("AdBlockRuleFallbackImpl"); -} diff --git a/src/adblock/adblockrulefallbackimpl.h b/src/adblock/adblockrulefallbackimpl.h deleted file mode 100644 index 4b5716f8..00000000 --- a/src/adblock/adblockrulefallbackimpl.h +++ /dev/null @@ -1,56 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2010-2011 by Benjamin Poulain <ikipou at gmail dot com> -* Copyright (C) 2011-2012 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 ADBLOCKRULEFALLBACKIMPL_H -#define ADBLOCKRULEFALLBACKIMPL_H - -#include "adblockruleimpl.h" - -// Qt Includes -#include <QRegExp> -#include <QString> -#include <QSet> - -class AdBlockRuleFallbackImpl : public AdBlockRuleImpl -{ -public: - AdBlockRuleFallbackImpl(const QString &filter); - bool match(const QNetworkRequest &request, const QString &encodedUrl, const QString &encodedUrlLowerCase) const; - - QString ruleString() const; - QString ruleType() const; - -private: - QString convertPatternToRegExp(const QString &wildcardPattern); - - QRegExp m_regExp; - QSet<QString> m_whiteDomains; - QSet<QString> m_blackDomains; - - bool m_thirdPartyOption; -}; - -#endif // ADBLOCKRULEFALLBACKIMPL_H diff --git a/src/adblock/adblockruleimpl.h b/src/adblock/adblockruleimpl.h deleted file mode 100644 index f1d428d5..00000000 --- a/src/adblock/adblockruleimpl.h +++ /dev/null @@ -1,44 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2010-2011 by Benjamin Poulain <ikipou 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 ADBLOCKRULEIMPL_H -#define ADBLOCKRULEIMPL_H - -class QString; -class QNetworkRequest; - -class AdBlockRuleImpl -{ -public: - AdBlockRuleImpl(const QString &) {} - virtual ~AdBlockRuleImpl() {} - virtual bool match(const QNetworkRequest &request, const QString &encodedUrl, const QString &encodedUrlLowerCase) const = 0; - - // This are added just for debugging purposes - virtual QString ruleString() const = 0; - virtual QString ruleType() const = 0; -}; - -#endif // ADBLOCKRULEIMPL_H diff --git a/src/adblock/adblockrulenullimpl.cpp b/src/adblock/adblockrulenullimpl.cpp deleted file mode 100644 index e16b56db..00000000 --- a/src/adblock/adblockrulenullimpl.cpp +++ /dev/null @@ -1,139 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2011-2012 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 "adblockrulenullimpl.h" - -// Rekonq Includes -#include "rekonq_defines.h" - -// Qt Includes -#include <QStringList> - - -AdBlockRuleNullImpl::AdBlockRuleNullImpl(const QString &filter) - : AdBlockRuleImpl(filter) -{ -} - - -bool AdBlockRuleNullImpl::match(const QNetworkRequest &, const QString &, const QString &) const -{ - return false; -} - - -bool AdBlockRuleNullImpl::isNullFilter(const QString &filter) -{ - QString parsedLine = filter; - - const int optionsNumber = parsedLine.lastIndexOf(QL1C('$')); - if (optionsNumber == 0) - return false; - - const QStringList options(parsedLine.mid(optionsNumber + 1).split(QL1C(','))); - - Q_FOREACH(const QString & option, options) - { - // NOTE: - // I moved the check from option == QL1S to option.endsWith() - // to check option && ~option. Hope it will NOT be a problem... - - // third_party: managed inside adblockrulefallbackimpl - if (option.endsWith(QL1S("third-party"))) - return false; - - // script - if (option.endsWith(QL1S("script"))) - return true; - - // image - if (option.endsWith(QL1S("image"))) - return true; - - // background - if (option.endsWith(QL1S("background"))) - return true; - - // stylesheet - if (option.endsWith(QL1S("stylesheet"))) - return true; - - // object - if (option.endsWith(QL1S("object"))) - return true; - - // xbl - if (option.endsWith(QL1S("xbl"))) - return true; - - // ping - if (option.endsWith(QL1S("ping"))) - return true; - - // xmlhttprequest - if (option.endsWith(QL1S("xmlhttprequest"))) - return true; - - // object_subrequest - if (option.endsWith(QL1S("object-subrequest"))) - return true; - - // dtd - if (option.endsWith(QL1S("dtd"))) - return true; - - // subdocument - if (option.endsWith(QL1S("subdocument"))) - return true; - - // document - if (option.endsWith(QL1S("document"))) - return true; - - // other - if (option.endsWith(QL1S("other"))) - return true; - - // collapse - if (option.endsWith(QL1S("collapse"))) - return true; - } - - return false; -} - - -QString AdBlockRuleNullImpl::ruleString() const -{ - return QString(); -} - - -QString AdBlockRuleNullImpl::ruleType() const -{ - return QL1S("AdBlockRuleNullImpl"); -} diff --git a/src/adblock/adblockrulenullimpl.h b/src/adblock/adblockrulenullimpl.h deleted file mode 100644 index a8f69652..00000000 --- a/src/adblock/adblockrulenullimpl.h +++ /dev/null @@ -1,51 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2011-2012 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 ADBLOCKRULE_NULL_IMPL_H -#define ADBLOCKRULE_NULL_IMPL_H - - -// Local Includes -#include "adblockruleimpl.h" - -// Qt Includes -#include <QString> - - -class AdBlockRuleNullImpl : public AdBlockRuleImpl -{ - -public: - AdBlockRuleNullImpl(const QString &filter); - bool match(const QNetworkRequest &, const QString &, const QString &) const; - - static bool isNullFilter(const QString &filter); - - QString ruleString() const; - QString ruleType() const; -}; - -#endif // ADBLOCKRULE_NULL_IMPL_H diff --git a/src/adblock/adblockruletextmatchimpl.cpp b/src/adblock/adblockruletextmatchimpl.cpp deleted file mode 100644 index fd901e9c..00000000 --- a/src/adblock/adblockruletextmatchimpl.cpp +++ /dev/null @@ -1,94 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2010-2011 by Benjamin Poulain <ikipou 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 "adblockruletextmatchimpl.h" - -// Rekonq Includes -#include "rekonq_defines.h" - -// Qt Includes -#include <QNetworkRequest> - - -AdBlockRuleTextMatchImpl::AdBlockRuleTextMatchImpl(const QString &filter) - : AdBlockRuleImpl(filter) -{ - Q_ASSERT(AdBlockRuleTextMatchImpl::isTextMatchFilter(filter)); - - m_textToMatch = filter.toLower(); - m_textToMatch.remove(QL1C('*')); -} - - -bool AdBlockRuleTextMatchImpl::match(const QNetworkRequest &request, const QString &encodedUrl, const QString &encodedUrlLowerCase) const -{ - Q_UNUSED(request); - Q_UNUSED(encodedUrl); - // Case sensitive compare is faster, but would be incorrect with encodedUrl since - // we do want case insensitive. - // What we do is work on a lowercase version of m_textToMatch, and compare to the lowercase - // version of encodedUrl. - return encodedUrlLowerCase.contains(m_textToMatch, Qt::CaseSensitive); -} - - -bool AdBlockRuleTextMatchImpl::isTextMatchFilter(const QString &filter) -{ - // We don't deal with options just yet - if (filter.contains(QL1C('$'))) - return false; - - // We don't deal with element matching - if (filter.contains(QL1S("##"))) - return false; - - // We don't deal with the begin-end matching - if (filter.startsWith(QL1C('|')) || filter.endsWith(QL1C('|'))) - return false; - - // We only handle * at the beginning or the end - int starPosition = filter.indexOf(QL1C('*')); - while (starPosition >= 0) - { - if (starPosition != 0 && starPosition != (filter.length() - 1)) - return false; - starPosition = filter.indexOf(QL1C('*'), starPosition + 1); - } - return true; -} - - -QString AdBlockRuleTextMatchImpl::ruleString() const -{ - return m_textToMatch; -} - - -QString AdBlockRuleTextMatchImpl::ruleType() const -{ - return QL1S("AdBlockRuleTextMatchImpl"); -} diff --git a/src/adblock/adblockruletextmatchimpl.h b/src/adblock/adblockruletextmatchimpl.h deleted file mode 100644 index 8600543d..00000000 --- a/src/adblock/adblockruletextmatchimpl.h +++ /dev/null @@ -1,52 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2010-2011 by Benjamin Poulain <ikipou 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 ADBLOCKRULETEXTMATCHIMPL_H -#define ADBLOCKRULETEXTMATCHIMPL_H - -#include "adblockruleimpl.h" - -// Qt Includes -#include <QString> - - -// Simple rule to find a string in the URL -class AdBlockRuleTextMatchImpl : public AdBlockRuleImpl -{ -public: - AdBlockRuleTextMatchImpl(const QString &filter); - bool match(const QNetworkRequest &request, const QString &encodedUrl, const QString &encodedUrlLowerCase) const; - - static bool isTextMatchFilter(const QString &filter); - - QString ruleString() const; - QString ruleType() const; - -private: - QString m_textToMatch; -}; - -#endif // ADBLOCKRULETEXTMATCHIMPL_H diff --git a/src/adblock/adblockwidget.cpp b/src/adblock/adblockwidget.cpp deleted file mode 100644 index 5ada506e..00000000 --- a/src/adblock/adblockwidget.cpp +++ /dev/null @@ -1,242 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2010-2012 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 "adblockwidget.h" -#include "adblockwidget.moc" - -// Auto Includes -#include "rekonq.h" - -// KDE Includes -#include <KSharedConfig> -#include <KStandardDirs> -#include <KIcon> - -// Qt Includes -#include <QString> -#include <QWhatsThis> -#include <QListWidgetItem> - - -AdBlockWidget::AdBlockWidget(KSharedConfig::Ptr config, QWidget *parent) - : QWidget(parent) - , _changed(false) - , _adblockConfig(config) -{ - setupUi(this); - - hintLabel->setText(i18n("<qt>Filter expression (e.g. <tt>http://www.example.com/ad/*</tt>, <a href=\"filterhelp\">more information</a>):")); - connect(hintLabel, SIGNAL(linkActivated(QString)), this, SLOT(slotInfoLinkActivated(QString))); - - manualFiltersListWidget->setSortingEnabled(true); - manualFiltersListWidget->setSelectionMode(QAbstractItemView::SingleSelection); - - searchLine->setListWidget(manualFiltersListWidget); - - insertButton->setIcon(KIcon("list-add")); - connect(insertButton, SIGNAL(clicked()), this, SLOT(insertRule())); - - removeButton->setIcon(KIcon("list-remove")); - connect(removeButton, SIGNAL(clicked()), this, SLOT(removeRule())); - - load(); - - spinBox->setSuffix(ki18np(" day", " days")); - - // emit changed signal - connect(insertButton, SIGNAL(clicked()), this, SLOT(hasChanged())); - connect(removeButton, SIGNAL(clicked()), this, SLOT(hasChanged())); - connect(checkEnableAdblock, SIGNAL(stateChanged(int)), this, SLOT(hasChanged())); - connect(checkHideAds, SIGNAL(stateChanged(int)), this, SLOT(hasChanged())); - connect(spinBox, SIGNAL(valueChanged(int)), this, SLOT(hasChanged())); - - connect(automaticFiltersListWidget, SIGNAL(itemChanged(QListWidgetItem *)), this, SLOT(hasChanged())); -} - - -void AdBlockWidget::slotInfoLinkActivated(const QString &url) -{ - Q_UNUSED(url) - - QString hintHelpString = i18n("<qt><p>Enter an expression to filter. Filters can be defined as either:" - "<ul><li>a shell-style wildcard, e.g. <tt>http://www.example.com/ads*</tt>, " - "the wildcards <tt>*?[]</tt> may be used</li>" - "<li>a full regular expression by surrounding the string with '<tt>/</tt>', " - "e.g. <tt>/\\/(ad|banner)\\./</tt></li></ul>" - "<p>Any filter string can be preceded by '<tt>@@</tt>' to whitelist (allow) any matching URL, " - "which takes priority over any blacklist (blocking) filter."); - - QWhatsThis::showText(QCursor::pos(), hintHelpString); -} - - -void AdBlockWidget::insertRule() -{ - QString rule = addFilterLineEdit->text(); - if (rule.isEmpty()) - return; - - manualFiltersListWidget->addItem(rule); - addFilterLineEdit->clear(); -} - - -void AdBlockWidget::removeRule() -{ - manualFiltersListWidget->takeItem(manualFiltersListWidget->currentRow()); -} - - -void AdBlockWidget::load() -{ - // General settings - KConfigGroup settingsGroup(_adblockConfig, "Settings"); - - const bool isAdBlockEnabled = settingsGroup.readEntry("adBlockEnabled", false); - checkEnableAdblock->setChecked(isAdBlockEnabled); - - // update enabled status - checkHideAds->setEnabled(isAdBlockEnabled); - tabWidget->setEnabled(isAdBlockEnabled); - - const bool areImageFiltered = settingsGroup.readEntry("hideAdsEnabled", false); - checkHideAds->setChecked(areImageFiltered); - - const int days = settingsGroup.readEntry("updateInterval", 7); - spinBox->setValue(days); - - // ------------------------------------------------------------------------------ - - // automatic filters - KConfigGroup autoFiltersGroup(_adblockConfig, "FiltersList"); - - int i = 1; - QString n = QString::number(i); - - while (autoFiltersGroup.hasKey("FilterName-" + n)) - { - bool filterEnabled = autoFiltersGroup.readEntry("FilterEnabled-" + n, false); - QString filterName = autoFiltersGroup.readEntry("FilterName-" + n, QString()); - - QListWidgetItem *subItem = new QListWidgetItem(automaticFiltersListWidget); - subItem->setFlags(Qt::ItemIsEnabled | Qt::ItemIsUserCheckable); - if (filterEnabled) - subItem->setCheckState(Qt::Checked); - else - subItem->setCheckState(Qt::Unchecked); - - subItem->setText(filterName); - - i++; - n = QString::number(i); - } - - // ------------------------------------------------------------------------------ - - // local filters - QString localRulesFilePath = KStandardDirs::locateLocal("appdata" , QL1S("adblockrules_local")); - - QFile ruleFile(localRulesFilePath); - if (!ruleFile.open(QFile::ReadOnly | QFile::Text)) - { - kDebug() << "Unable to open rule file" << localRulesFilePath; - return; - } - - QTextStream in(&ruleFile); - while (!in.atEnd()) - { - QString stringRule = in.readLine(); - QListWidgetItem *subItem = new QListWidgetItem(manualFiltersListWidget); - subItem->setText(stringRule); - } -} - - -void AdBlockWidget::save() -{ - if (!_changed) - return; - - // General settings - KConfigGroup settingsGroup(_adblockConfig, "Settings"); - - settingsGroup.writeEntry("adBlockEnabled", checkEnableAdblock->isChecked()); - settingsGroup.writeEntry("hideAdsEnabled", checkHideAds->isChecked()); - settingsGroup.writeEntry("updateInterval", spinBox->value()); - - // automatic filters - KConfigGroup autoFiltersGroup(_adblockConfig, "FiltersList"); - for (int i = 0; i < automaticFiltersListWidget->count(); i++) - { - QListWidgetItem *subItem = automaticFiltersListWidget->item(i); - bool active = true; - if (subItem->checkState() == Qt::Unchecked) - active = false; - - QString n = QString::number(i + 1); - autoFiltersGroup.writeEntry("FilterEnabled-" + n, active); - } - - // local filters - QString localRulesFilePath = KStandardDirs::locateLocal("appdata" , QL1S("adblockrules_local")); - - QFile ruleFile(localRulesFilePath); - if (!ruleFile.open(QFile::WriteOnly | QFile::Text)) - { - kDebug() << "Unable to open rule file" << localRulesFilePath; - return; - } - - QTextStream out(&ruleFile); - for (int i = 0; i < manualFiltersListWidget->count(); i++) - { - QListWidgetItem *subItem = manualFiltersListWidget->item(i); - QString stringRule = subItem->text(); - out << stringRule << '\n'; - } - - // ------------------------------------------------------------------------------- - _changed = false; - emit changed(false); -} - - -void AdBlockWidget::hasChanged() -{ - // update enabled status - checkHideAds->setEnabled(checkEnableAdblock->isChecked()); - tabWidget->setEnabled(checkEnableAdblock->isChecked()); - _changed = true; - emit changed(true); -} - - -bool AdBlockWidget::changed() -{ - return _changed; -} diff --git a/src/adblock/adblockwidget.h b/src/adblock/adblockwidget.h deleted file mode 100644 index 37f29f93..00000000 --- a/src/adblock/adblockwidget.h +++ /dev/null @@ -1,73 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2010-2012 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 ADBLOCK_WIDGET_H -#define ADBLOCK_WIDGET_H - - -// Rekonq Includes -#include "rekonq_defines.h" - -// Ui Includes -#include "ui_settings_adblock.h" - -// KDE Includes -#include <KSharedConfig> - -// Qt Includes -#include <QWidget> - - -class AdBlockWidget : public QWidget, private Ui::adblock -{ - Q_OBJECT - -public: - explicit AdBlockWidget(KSharedConfig::Ptr config, QWidget *parent = 0); - - bool changed(); - -Q_SIGNALS: - void changed(bool); - -public Q_SLOTS: - void save(); - -private Q_SLOTS: - void hasChanged(); - - void slotInfoLinkActivated(const QString &); - void insertRule(); - void removeRule(); - -private: - void load(); - - bool _changed; - KSharedConfig::Ptr _adblockConfig; -}; - -#endif // ADBLOCK_WIDGET_H diff --git a/src/adblock/blocked_elements.ui b/src/adblock/blocked_elements.ui deleted file mode 100644 index 204bf81f..00000000 --- a/src/adblock/blocked_elements.ui +++ /dev/null @@ -1,116 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<ui version="4.0"> - <class>BlockedElements</class> - <widget class="QWidget" name="BlockedElements"> - <property name="geometry"> - <rect> - <x>0</x> - <y>0</y> - <width>527</width> - <height>407</height> - </rect> - </property> - <layout class="QVBoxLayout" name="verticalLayout"> - <item> - <widget class="QLabel" name="BlockedLabel"> - <property name="text"> - <string><html><head/><body><p><span style=" font-weight:600;">Blocked elements</span></p></body></html></string> - </property> - </widget> - </item> - <item> - <widget class="QFrame" name="frame"> - <property name="palette"> - <palette> - <active> - <colorrole role="Base"> - <brush brushstyle="SolidPattern"> - <color alpha="255"> - <red>255</red> - <green>255</green> - <blue>255</blue> - </color> - </brush> - </colorrole> - <colorrole role="Window"> - <brush brushstyle="SolidPattern"> - <color alpha="255"> - <red>255</red> - <green>255</green> - <blue>255</blue> - </color> - </brush> - </colorrole> - </active> - <inactive> - <colorrole role="Base"> - <brush brushstyle="SolidPattern"> - <color alpha="255"> - <red>255</red> - <green>255</green> - <blue>255</blue> - </color> - </brush> - </colorrole> - <colorrole role="Window"> - <brush brushstyle="SolidPattern"> - <color alpha="255"> - <red>255</red> - <green>255</green> - <blue>255</blue> - </color> - </brush> - </colorrole> - </inactive> - <disabled> - <colorrole role="Base"> - <brush brushstyle="SolidPattern"> - <color alpha="255"> - <red>255</red> - <green>255</green> - <blue>255</blue> - </color> - </brush> - </colorrole> - <colorrole role="Window"> - <brush brushstyle="SolidPattern"> - <color alpha="255"> - <red>255</red> - <green>255</green> - <blue>255</blue> - </color> - </brush> - </colorrole> - </disabled> - </palette> - </property> - <property name="autoFillBackground"> - <bool>true</bool> - </property> - <property name="frameShape"> - <enum>QFrame::StyledPanel</enum> - </property> - <property name="frameShadow"> - <enum>QFrame::Raised</enum> - </property> - </widget> - </item> - <item> - <widget class="QLabel" name="HidedLabel"> - <property name="text"> - <string><b>Hidden elements</b></string> - </property> - </widget> - </item> - <item> - <widget class="QLabel" name="label"> - <property name="text"> - <string>TextLabel</string> - </property> - </widget> - </item> - </layout> - </widget> - <resources/> - <connections/> -</ui> diff --git a/src/adblock/blockedelementswidget.cpp b/src/adblock/blockedelementswidget.cpp deleted file mode 100644 index 141dd203..00000000 --- a/src/adblock/blockedelementswidget.cpp +++ /dev/null @@ -1,116 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2012 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 "blockedelementswidget.h" -#include "blockedelementswidget.moc" - -// Local Includes -#include "adblockmanager.h" - -// Qt Includes -#include <QHBoxLayout> -#include <QVBoxLayout> -#include <QPushButton> - - -BlockedElementsWidget::BlockedElementsWidget(QObject *manager, QWidget *parent) - : QWidget(parent) - , _manager(manager) - , _reloadPage(false) -{ - setupUi(this); -} - - -void BlockedElementsWidget::setBlockedElements(const QStringList &list) -{ - QVBoxLayout *frameLayout = new QVBoxLayout(frame); - - Q_FOREACH(const QString & block, list) - { - QString truncatedUrl = block; - const int maxTextSize = 73; - if (truncatedUrl.length() > maxTextSize) - { - const int truncateSize = 70; - truncatedUrl.truncate(truncateSize); - truncatedUrl += QL1S("..."); - } - QWidget *w = new QWidget(this); - QHBoxLayout *l = new QHBoxLayout(w); - l->addWidget(new QLabel(truncatedUrl, this)); - - QPushButton *button = new QPushButton(KIcon("dialog-ok-apply"), i18n("Unblock"), this); - button->setProperty("URLTOUNBLOCK", block); - button->setFixedWidth(100); - connect(button, SIGNAL(clicked()), this, SLOT(unblockElement())); - l->addWidget(button); - - w->setMinimumWidth(500); - frameLayout->addWidget(w); - } -} - - -void BlockedElementsWidget::setHidedElements(int n) -{ - AdBlockManager *m = qobject_cast<AdBlockManager *>(_manager); - if (m->isHidingElements()) - label->setText(i18np("There is %1 hidden element in this page.", "There are %1 hidden elements in this page.", QString::number(n))); - else - label->setText(i18n("Hiding elements is disabled.")); -} - - -void BlockedElementsWidget::unblockElement() -{ - QPushButton *buttonClicked = qobject_cast<QPushButton *>(sender()); - if (!buttonClicked) - return; - - QString urlString = QL1S("@@") + buttonClicked->property("URLTOUNBLOCK").toString(); - kDebug() << "urlString: " << urlString; - - QString newText = i18n("Unblocked"); - QString buttonText = buttonClicked->text().remove('&'); - if (buttonText == newText) - { - buttonClicked->setText(i18n("Unblock")); - buttonClicked->setIcon(KIcon("dialog-ok-apply")); - - _rulesToAdd.removeOne(urlString); - } - else - { - buttonClicked->setText(newText); - buttonClicked->setIcon(KIcon("dialog-ok")); - - _rulesToAdd << urlString; - } - - _reloadPage = true; -} diff --git a/src/adblock/blockedelementswidget.h b/src/adblock/blockedelementswidget.h deleted file mode 100644 index d26ee849..00000000 --- a/src/adblock/blockedelementswidget.h +++ /dev/null @@ -1,71 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2012 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 BLOCKED_ELEMENTS_WIDGET_H -#define BLOCKED_ELEMENTS_WIDGET_H - - -// Rekonq Includes -#include "rekonq_defines.h" - -// Ui Includes -#include "ui_blocked_elements.h" - -// Qt Includes -#include <QWidget> - - -class BlockedElementsWidget : public QWidget, private Ui::BlockedElements -{ - Q_OBJECT - -public: - explicit BlockedElementsWidget(QObject *manager, QWidget *parent = 0); - - void setBlockedElements(const QStringList &); - void setHidedElements(int); - - bool pageNeedsReload() - { - return _reloadPage; - }; - - QStringList rulesToAdd() - { - return _rulesToAdd; - }; - -private Q_SLOTS: - void unblockElement(); - -private: - QObject *_manager; - - bool _reloadPage; - QStringList _rulesToAdd; -}; - -#endif // BLOCKED_ELEMENTS_WIDGET_H diff --git a/src/adblock/settings_adblock.ui b/src/adblock/settings_adblock.ui deleted file mode 100644 index e4f06339..00000000 --- a/src/adblock/settings_adblock.ui +++ /dev/null @@ -1,178 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<ui version="4.0"> - <class>adblock</class> - <widget class="QWidget" name="adblock"> - <property name="geometry"> - <rect> - <x>0</x> - <y>0</y> - <width>601</width> - <height>507</height> - </rect> - </property> - <layout class="QVBoxLayout" name="verticalLayout"> - <item> - <widget class="QCheckBox" name="checkEnableAdblock"> - <property name="text"> - <string>&Enable Ad Block</string> - </property> - </widget> - </item> - <item> - <widget class="QCheckBox" name="checkHideAds"> - <property name="text"> - <string>&Hide filtered elements</string> - </property> - </widget> - </item> - <item> - <widget class="KTabWidget" name="tabWidget"> - <property name="toolTip"> - <string/> - </property> - <property name="currentIndex"> - <number>0</number> - </property> - <widget class="QWidget" name="tab_3"> - <attribute name="title"> - <string>Automatic Filters</string> - </attribute> - <layout class="QVBoxLayout" name="verticalLayout_3"> - <item> - <widget class="QListWidget" name="automaticFiltersListWidget"/> - </item> - <item> - <layout class="QHBoxLayout" name="horizontalLayout_3"> - <item> - <widget class="QLabel" name="label_3"> - <property name="text"> - <string>Update enabled automatic filters every:</string> - </property> - </widget> - </item> - <item> - <widget class="KIntSpinBox" name="spinBox"> - <property name="minimumSize"> - <size> - <width>120</width> - <height>0</height> - </size> - </property> - <property name="suffix"> - <string/> - </property> - <property name="value"> - <number>7</number> - </property> - </widget> - </item> - <item> - <spacer name="horizontalSpacer"> - <property name="orientation"> - <enum>Qt::Horizontal</enum> - </property> - <property name="sizeHint" stdset="0"> - <size> - <width>40</width> - <height>20</height> - </size> - </property> - </spacer> - </item> - </layout> - </item> - </layout> - </widget> - <widget class="QWidget" name="tab"> - <attribute name="title"> - <string>Manual Filters</string> - </attribute> - <layout class="QVBoxLayout" name="verticalLayout_2"> - <item> - <layout class="QHBoxLayout" name="horizontalLayout"> - <item> - <widget class="QLabel" name="label"> - <property name="text"> - <string>Search:</string> - </property> - </widget> - </item> - <item> - <widget class="KListWidgetSearchLine" name="searchLine"/> - </item> - </layout> - </item> - <item> - <widget class="KListWidget" name="manualFiltersListWidget"/> - </item> - <item> - <widget class="QLabel" name="hintLabel"> - <property name="text"> - <string comment="KDE::DoNotExtract">TextLabel</string> - </property> - </widget> - </item> - <item> - <layout class="QHBoxLayout" name="horizontalLayout_2"> - <item> - <widget class="KLineEdit" name="addFilterLineEdit"/> - </item> - <item> - <widget class="QToolButton" name="insertButton"> - <property name="toolTip"> - <string>Add filter expression</string> - </property> - <property name="text"> - <string>...</string> - </property> - </widget> - </item> - <item> - <widget class="QToolButton" name="removeButton"> - <property name="toolTip"> - <string>Remove filter expression</string> - </property> - <property name="text"> - <string>...</string> - </property> - </widget> - </item> - </layout> - </item> - </layout> - </widget> - </widget> - </item> - </layout> - </widget> - <customwidgets> - <customwidget> - <class>KListWidgetSearchLine</class> - <extends>KLineEdit</extends> - <header>klistwidgetsearchline.h</header> - </customwidget> - <customwidget> - <class>KLineEdit</class> - <extends>QLineEdit</extends> - <header>klineedit.h</header> - </customwidget> - <customwidget> - <class>KIntSpinBox</class> - <extends>QSpinBox</extends> - <header>knuminput.h</header> - </customwidget> - <customwidget> - <class>KListWidget</class> - <extends>QListWidget</extends> - <header>klistwidget.h</header> - </customwidget> - <customwidget> - <class>KTabWidget</class> - <extends>QTabWidget</extends> - <header>ktabwidget.h</header> - <container>1</container> - </customwidget> - </customwidgets> - <resources/> - <connections/> -</ui> diff --git a/src/adblock/tests/RULES b/src/adblock/tests/RULES deleted file mode 100644 index 8dfdf8fa..00000000 --- a/src/adblock/tests/RULES +++ /dev/null @@ -1,19 +0,0 @@ -! cancel ALL your rules in the adblock, -! load these and test rekonq against -! the proposed sites -! Good Luck! -! -! This rule will block EVERY site containing adv -adv -! -! This one will wildcard EVERY site containing the word "advice" -@@advice -! -! Block every google site :) -||http://google* -! -! Block every pdf file! -*pdf|| -! -! Block every div of the class "advise" -##div.advise
\ No newline at end of file diff --git a/src/adblock/tests/divhidingtest.html b/src/adblock/tests/divhidingtest.html deleted file mode 100644 index a38e9ea1..00000000 --- a/src/adblock/tests/divhidingtest.html +++ /dev/null @@ -1,15 +0,0 @@ -<html> - -<head> -</head> - -<body> - -<div class="advise"> -<h1>Oh oh.. an advise!!</h1> -</div> -<h2>no advises here :)</h2> -At least, I hope so... -</body> - -</html>
\ No newline at end of file diff --git a/src/analyzer/analyzerpanel.cpp b/src/analyzer/analyzerpanel.cpp deleted file mode 100644 index 5f9fc00d..00000000 --- a/src/analyzer/analyzerpanel.cpp +++ /dev/null @@ -1,95 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2010-2011 by Matthieu Gicquel <matgic78 at gmail dot com> -* Copyright (C) 2010-2012 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 "analyzerpanel.h" -#include "analyzerpanel.moc" - -// Local Includes -#include "mainwindow.h" -#include "networkanalyzer.h" -#include "networkaccessmanager.h" -#include "webtab.h" -#include "webview.h" -#include "webpage.h" - -// KDE Includes -#include "KAction" - - -NetworkAnalyzerPanel::NetworkAnalyzerPanel(const QString &title, QWidget *parent) - : QDockWidget(title, parent) - , _viewer(new NetworkAnalyzer(this)) -{ - setObjectName("networkAnalyzerDock"); - setWidget(_viewer); -} - - -void NetworkAnalyzerPanel::closeEvent(QCloseEvent *event) -{ - Q_UNUSED(event); - toggle(false); -} - - -MainWindow* NetworkAnalyzerPanel::mainWindow() -{ - return qobject_cast<MainWindow *>(parentWidget()); -} - - -void NetworkAnalyzerPanel::toggle(bool enable) -{ - mainWindow()->actionByName("net_analyzer")->setChecked(enable); - WebPage *page = mainWindow()->currentTab()->page(); - NetworkAccessManager *manager = qobject_cast<NetworkAccessManager *>(page->networkAccessManager()); - - page->enableNetworkAnalyzer(enable); - - if (enable) - { - connect(page, SIGNAL(loadStarted()), _viewer, SLOT(clear())); - connect(manager, SIGNAL(networkData(QNetworkAccessManager::Operation, QNetworkRequest, QNetworkReply*)), - _viewer, SLOT(addRequest(QNetworkAccessManager::Operation, QNetworkRequest, QNetworkReply*))); - } - else - { - disconnect(page, SIGNAL(loadStarted()), _viewer, SLOT(clear())); - disconnect(manager, SIGNAL(networkData(QNetworkAccessManager::Operation, QNetworkRequest, QNetworkReply*)), - _viewer, SLOT(addRequest(QNetworkAccessManager::Operation, QNetworkRequest, QNetworkReply*))); - } - - setVisible(enable); -} - - -void NetworkAnalyzerPanel::changeCurrentPage() -{ - bool enable = mainWindow()->currentTab()->page()->hasNetworkAnalyzerEnabled(); - toggle(enable); -} diff --git a/src/analyzer/analyzerpanel.h b/src/analyzer/analyzerpanel.h deleted file mode 100644 index 591e5947..00000000 --- a/src/analyzer/analyzerpanel.h +++ /dev/null @@ -1,66 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2010-2012 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 ANALYZER_PANEL_H -#define ANALYZER_PANEL_H - - -// Rekonq Includes -#include "rekonq_defines.h" - -// Qt Includes -#include <QDockWidget> - -// Forward Declarations -class MainWindow; -class NetworkAnalyzer; - - -/** - Docked network analyzer - behaviour : hide/show by tab, not globally -*/ -class REKONQ_TESTS_EXPORT NetworkAnalyzerPanel : public QDockWidget -{ - Q_OBJECT - -public: - NetworkAnalyzerPanel(const QString &title, QWidget *parent); - -public Q_SLOTS: - void toggle(bool enable); - void changeCurrentPage(); - -protected: - virtual void closeEvent(QCloseEvent *event); - - MainWindow *mainWindow(); - -private: - NetworkAnalyzer *_viewer; -}; - -#endif // NET_ANALYZER_PANEL_H diff --git a/src/analyzer/networkanalyzer.cpp b/src/analyzer/networkanalyzer.cpp deleted file mode 100644 index 61ab69a5..00000000 --- a/src/analyzer/networkanalyzer.cpp +++ /dev/null @@ -1,237 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2009-2010 by Richard J. Moore <rich@kde.org> -* Copyright (C) 2010-2012 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 "networkanalyzer.h" -#include "networkanalyzer.moc" - -// KDE Includes -#include <KAction> -#include <klocalizedstring.h> -#include <KMenu> -#include <KIcon> -#include <KPassivePopup> - -// Qt Includes -#include <QTreeWidget> -#include <QVBoxLayout> -#include <QHeaderView> -#include <QLabel> -#include <QApplication> -#include <QSignalMapper> -#include <QClipboard> - -#include <QNetworkReply> -#include <QNetworkRequest> - - -NetworkAnalyzer::NetworkAnalyzer(QWidget *parent) - : QWidget(parent) - , _mapper(new QSignalMapper(this)) - , _requestList(new QTreeWidget(this)) -{ - QStringList headers; - headers << i18n("Method") << i18n("URL") << i18n("Response") << i18n("Length") << i18n("Content Type") << i18n("Info"); - _requestList->setHeaderLabels(headers); - - _requestList->header()->setResizeMode(0, QHeaderView::Interactive); - _requestList->header()->setResizeMode(1, QHeaderView::Interactive); - _requestList->header()->setResizeMode(2, QHeaderView::Interactive); - _requestList->header()->setResizeMode(3, QHeaderView::Interactive); - _requestList->header()->setResizeMode(4, QHeaderView::Interactive); - - _requestList->setAlternatingRowColors(true); - - QVBoxLayout *lay = new QVBoxLayout(this); - lay->addWidget(_requestList); - - _requestList->setContextMenuPolicy(Qt::CustomContextMenu); - connect(_mapper, SIGNAL(mapped(QObject*)), this, SLOT(requestFinished(QObject*))); - connect(_requestList, SIGNAL(itemDoubleClicked(QTreeWidgetItem*, int)), this, SLOT(showItemDetails(QTreeWidgetItem*))); - connect(_requestList, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(popupContextMenu(QPoint))); -} - - -void NetworkAnalyzer::popupContextMenu(const QPoint& pos) -{ - if (_requestList->topLevelItemCount() >= 1) - { - KMenu menu(_requestList); - KAction *copy; - copy = new KAction(KIcon("edit-copy"), i18n("Copy URL"), this); - connect(copy, SIGNAL(triggered(bool)), this, SLOT(copyURL())); - menu.addAction(copy); - menu.exec(mapToGlobal(pos)); - } -} - -void NetworkAnalyzer::copyURL() -{ - QClipboard *clipboard = QApplication::clipboard(); - clipboard->setText(_requestList->currentItem()->text(1)); -} - -void NetworkAnalyzer::addRequest(QNetworkAccessManager::Operation op, const QNetworkRequest &req, QNetworkReply *reply) -{ - // Add to list of requests - QStringList cols; - switch (op) - { - case QNetworkAccessManager::HeadOperation: - cols << QL1S("HEAD"); - break; - case QNetworkAccessManager::GetOperation: - cols << QL1S("GET"); - break; - case QNetworkAccessManager::PutOperation: - cols << QL1S("PUT"); - break; - case QNetworkAccessManager::PostOperation: - cols << QL1S("POST"); - break; - case QNetworkAccessManager::DeleteOperation: - cols << QL1S("DELETE"); - break; - case QNetworkAccessManager::CustomOperation: - cols << QL1S("CUSTOM"); - break; - - default: - kDebug() << "Unknown network operation"; - } - cols << req.url().toString(); - cols << i18n("Pending"); - - QTreeWidgetItem *item = new QTreeWidgetItem(cols); - _requestList->addTopLevelItem(item); - - // Add to maps - _requestMap.insert(reply, req); - _itemMap.insert(reply, item); - _itemRequestMap.insert(item, req); - - _mapper->setMapping(reply, reply); - connect(reply, SIGNAL(finished()), _mapper, SLOT(map())); - - _requestList->header()->resizeSections(QHeaderView::ResizeToContents); -} - - -void NetworkAnalyzer::clear() -{ - _requestMap.clear(); - _itemMap.clear(); - _itemReplyMap.clear(); - _itemRequestMap.clear(); - _requestList->clear(); -} - - -void NetworkAnalyzer::requestFinished(QObject *replyObject) -{ - QNetworkReply *reply = qobject_cast<QNetworkReply *>(replyObject); - if (!reply) - { - kDebug() << "Failed to downcast reply"; - return; - } - - QTreeWidgetItem *item = _itemMap[reply]; - if (!item) - { - kDebug() << "No Item mapped. Returning..."; - return; - } - - // Record the reply headers - QList<QByteArray> headerValues; - Q_FOREACH(const QByteArray & header, reply->rawHeaderList()) - { - headerValues += reply->rawHeader(header); - } - - QPair< QList<QByteArray>, QList<QByteArray> > replyHeaders; - replyHeaders.first = reply->rawHeaderList(); - replyHeaders.second = headerValues; - _itemReplyMap[item] = replyHeaders; - - // Display the request - int status = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(); - QString reason = reply->attribute(QNetworkRequest::HttpReasonPhraseAttribute).toString(); - item->setText(2, i18n("%1 %2", status, reason)); - - QString length = reply->header(QNetworkRequest::ContentLengthHeader).toString(); - item->setText(3, length); - - QString contentType = reply->header(QNetworkRequest::ContentTypeHeader).toString(); - item->setText(4, contentType); - - if (status == 302) - { - QUrl target = reply->attribute(QNetworkRequest::RedirectionTargetAttribute).toUrl(); - item->setText(5, i18n("Redirect: %1", target.toString())); - } -} - - -void NetworkAnalyzer::showItemDetails(QTreeWidgetItem *item) -{ - // Show request details - QString details; - - QNetworkRequest req = _itemRequestMap[item]; - details += i18n("<h3>Request Details</h3>"); - details += QL1S("<ul>"); - Q_FOREACH(const QByteArray & header, req.rawHeaderList()) - { - details += QL1S("<li>"); - details += QL1S(header); - details += QL1S(": "); - details += QL1S(req.rawHeader(header)); - details += QL1S("</li>"); - } - details += QL1S("</ul>"); - - QPair< QList<QByteArray>, QList<QByteArray> > replyHeaders = _itemReplyMap[item]; - details += i18n("<h3>Response Details</h3>"); - details += QL1S("<ul>"); - for (int i = 0; i < replyHeaders.first.count(); i++) - { - details += QL1S("<li>"); - details += QL1S(replyHeaders.first[i]); - details += QL1S(": "); - details += QL1S(replyHeaders.second[i]); - details += QL1S("</li>"); - } - details += QL1S("</ul>"); - -// QLabel *label = new QLabel(details, this); -// KPassivePopup *popup = new KPassivePopup(this); -// popup->setView(label); -// popup->show(_requestList->mapToGlobal(_requestList->pos())); - KPassivePopup::message(details, this); -} diff --git a/src/analyzer/networkanalyzer.h b/src/analyzer/networkanalyzer.h deleted file mode 100644 index af1e1145..00000000 --- a/src/analyzer/networkanalyzer.h +++ /dev/null @@ -1,79 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2009-2010 by Richard J. Moore <rich@kde.org> -* Copyright (C) 2010-2012 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 NETWORK_ANALYZER_H -#define NETWORK_ANALYZER_H - - -// Rekonq Includes -#include "rekonq_defines.h" - -// Qt Includes -#include <QWidget> - -#include <QMap> -#include <QList> - -#include <QNetworkAccessManager> - -// Forward Declarations -class QTreeWidgetItem; -class QSignalMapper; -class QTreeWidget; - -class QNetworkReply; -class QNetworkRequest; - - -class NetworkAnalyzer : public QWidget -{ - Q_OBJECT - -public: - NetworkAnalyzer(QWidget *parent = 0); - -private Q_SLOTS: - void addRequest(QNetworkAccessManager::Operation op, const QNetworkRequest &req, QNetworkReply *reply); - - void clear(); - void requestFinished(QObject *replyObject); - void showItemDetails(QTreeWidgetItem *item); - void copyURL(); - void popupContextMenu(const QPoint &pos); - -private: - QMap<QNetworkReply *, QNetworkRequest> _requestMap; - QMap<QTreeWidgetItem *, QNetworkRequest> _itemRequestMap; - QMap<QNetworkReply *, QTreeWidgetItem *> _itemMap; - QMap<QTreeWidgetItem *, QPair< QList<QByteArray>, QList<QByteArray> > > _itemReplyMap; - - QSignalMapper *_mapper; - QTreeWidget *_requestList; -}; - -#endif // NETWORK_ANALYZER_H diff --git a/src/application.cpp b/src/application.cpp deleted file mode 100644 index 18e3cad7..00000000 --- a/src/application.cpp +++ /dev/null @@ -1,883 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2008-2012 by Andrea Diamantini <adjam7 at gmail dot com> -* Copyright (C) 2009 by PaweÅ‚ Prażak <pawelprazak at gmail dot com> -* Copyright (C) 2009-2011 by Lionel Chauvin <megabigbug@yahoo.fr> -* -* -* 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 "application.h" -#include "application.moc" - -// Auto Includes -#include "rekonq.h" - -// Ui Includes -#include "ui_webappcreation.h" - -// Local Includes -#include "adblockmanager.h" -#include "bookmarkmanager.h" -#include "downloadmanager.h" -#include "historymanager.h" -#include "iconmanager.h" -#include "mainview.h" -#include "mainwindow.h" -#include "opensearchmanager.h" -#include "searchengine.h" -#include "sessionmanager.h" -#include "syncmanager.h" -#include "stackedurlbar.h" -#include "tabbar.h" -#include "urlbar.h" -#include "urlresolver.h" -#include "useragentmanager.h" -#include "webtab.h" - -// KDE Includes -#include <KCmdLineArgs> -#include <KIcon> -#include <KMessageBox> -#include <KStandardDirs> -#include <KStartupInfo> -#include <ThreadWeaver/Weaver> -#include <KAction> -#include <KWindowSystem> -#include <KWindowInfo> -#include <KGlobal> -#include <KCharsets> -#include <KPushButton> -#include <KMimeType> - -// Qt Includes -#include <QVBoxLayout> -#include <QTimer> - - -using namespace ThreadWeaver; - - -Application::Application() - : KUniqueApplication() - , _privateBrowsingAction(0) -{ - _privateBrowsingAction = new KAction(KIcon("view-media-artist"), i18n("Private &Browsing"), this); - _privateBrowsingAction->setCheckable(true); - connect(_privateBrowsingAction, SIGNAL(triggered(bool)), this, SLOT(setPrivateBrowsingMode(bool))); -} - - -Application::~Application() -{ - // ok, we are closing well. - // Don't recover on next load.. - ReKonfig::setRecoverOnCrash(0); - saveConfiguration(); - - Q_FOREACH(QWeakPointer<MainWindow> window, m_mainWindows) - { - kDebug() << "deleting windows..."; - delete window.data(); - window.clear(); - } - - if (!m_historyManager.isNull()) - { - kDebug() << "deleting history manager"; - delete m_historyManager.data(); - m_historyManager.clear(); - } - - if (!m_bookmarkManager.isNull()) - { - kDebug() << "deleting bookmark Manager"; - delete m_bookmarkManager.data(); - m_bookmarkManager.clear(); - } - - if (!m_sessionManager.isNull()) - { - kDebug() << "deleting session manager"; - delete m_sessionManager.data(); - m_sessionManager.clear(); - } - - if (!m_opensearchManager.isNull()) - { - kDebug() << "deleting opensearch manager"; - delete m_opensearchManager.data(); - m_opensearchManager.clear(); - } - - if (!m_iconManager.isNull()) - { - kDebug() << "deleting icon manager"; - delete m_iconManager.data(); - m_iconManager.clear(); - } - - if (!m_adblockManager.isNull()) - { - kDebug() << "deleting adblock manager"; - delete m_adblockManager.data(); - m_adblockManager.clear(); - } - - if (!m_userAgentManager.isNull()) - { - kDebug() << "deleting user agent manager"; - delete m_userAgentManager.data(); - m_userAgentManager.clear(); - } - - if (!m_syncManager.isNull()) - { - kDebug() << "deleting sync manager"; - delete m_syncManager.data(); - m_syncManager.clear(); - } - - // TODO: - // add a check to NOT close rekonq - // until last download is finished - if (!m_downloadManager.isNull()) - { - kDebug() << "deleting download manager"; - delete m_downloadManager.data(); - m_downloadManager.clear(); - } - - kDebug() << "Bye bye..."; -} - - -int Application::newInstance() -{ - KCmdLineArgs* args = KCmdLineArgs::parsedArgs(); - - // not that easy, indeed - // We have to consider 3 variables here: - // 1) Is first load? - // 2) Are there arguments? - // 3) Is rekonq recovering from crash? - // so, we have 8 possible cases... - static bool isFirstLoad = true; - bool areThereArguments = (args->count() > 0); - bool hasToBeRecoveredFromCrash = (ReKonfig::recoverOnCrash() > 0); - // note that hasToBeRecoveredFromCrash is always true if it is not the first load - // !isFirstLoad -> hasToBeRecovered - - kDebug() << "is first load? " << isFirstLoad; - kDebug() << "are there arguments? " << areThereArguments; - kDebug() << "is rekonq crashed? " << hasToBeRecoveredFromCrash; - - if (areThereArguments) - { - // prepare URLS to load - KUrl::List urlList; - for (int i = 0; i < args->count(); ++i) - { - const KUrl u = args->url(i); - - if (u.isLocalFile() && QFile::exists(u.toLocalFile())) // "rekonq somefile.html" case - urlList += u; - else - { - // "rekonq kde.org" || "rekonq kde:kdialog" case - UrlResolver res(args->arg(i)); - UrlSearchList list = res.orderedSearchItems(); - if (list.isEmpty()) - { - urlList += u; - } - else - { - urlList += list.first().url; - } - } - } - - if (isFirstLoad && (ReKonfig::startupBehaviour() == 2) && sessionManager()->restoreSessionFromScratch()) - { - isFirstLoad = false; - } - - // first argument: 99% of the time we have just that... - if (isFirstLoad) - { - // No windows in the current desktop? No windows at all? - // Create a new one and load there sites... - loadUrl(urlList.at(0), Rekonq::NewWindow); - } - else - { - if (!ReKonfig::openExternalLinksInNewWindow()) - { - loadUrl(urlList.at(0), Rekonq::NewFocusedTab); - } - else - { - loadUrl(urlList.at(0), Rekonq::NewWindow); - } - - if (!mainWindow()->isActiveWindow()) - KWindowSystem::demandAttention(mainWindow()->winId(), true); - } - - // following arguments: what's best behavior here? - // I'm pretty sure no one has real opinion about... - if (!ReKonfig::openExternalLinksInNewWindow()) - { - for (int i = 1; i < urlList.count(); ++i) - loadUrl(urlList.at(i), Rekonq::NewFocusedTab); - } - else - { - for (int i = 1; i < urlList.count(); ++i) - loadUrl(urlList.at(i), Rekonq::NewWindow); - } - } - else - { - if (isFirstLoad) - { - if (hasToBeRecoveredFromCrash) - { - loadUrl(KUrl("about:closedTabs"), Rekonq::NewWindow); - } - else - { - // NOTE: just load new tabs/windows without arguments - // if NOT is Session restored... - if (!isSessionRestored()) - { - switch (ReKonfig::startupBehaviour()) - { - case 0: // open home page - newMainWindow()->homePage(); - break; - case 1: // open new tab page - loadUrl(KUrl("about:home"), Rekonq::NewWindow); - break; - case 2: // restore session - if (sessionManager()->restoreSessionFromScratch()) - { - break; - } - default: - newMainWindow()->homePage(); - break; - } - } - } - } - else - { - switch (ReKonfig::newTabsBehaviour()) - { - case 0: // new tab page - loadUrl(KUrl("about:home") , Rekonq::NewWindow); - break; - case 2: // homepage - loadUrl(KUrl(ReKonfig::homePage()) , Rekonq::NewWindow); - break; - case 1: // blank page - default: - loadUrl(KUrl("about:blank") , Rekonq::NewWindow); - break; - } - } - } - - if (isFirstLoad) - { - if (hasToBeRecoveredFromCrash) - { - QTimer::singleShot(1000, mainWindow()->currentTab(), SLOT(showMessageBar())); - } - else - { - sessionManager()->setSessionManagementEnabled(true); - } - - if (ReKonfig::checkDefaultSearchEngine() - && !hasToBeRecoveredFromCrash - && SearchEngine::defaultEngine().isNull()) - QTimer::singleShot(2000, mainWindow()->currentTab(), SLOT(showSearchEngineBar())); - - // updating rekonq configuration - updateConfiguration(); - - setWindowIcon(KIcon("rekonq")); - - historyManager(); - - ReKonfig::setRecoverOnCrash(ReKonfig::recoverOnCrash() + 1); - saveConfiguration(); - } - - KStartupInfo::appStarted(); - isFirstLoad = false; - - return 0; -} - - -Application *Application::instance() -{ - return (qobject_cast<Application *>(QCoreApplication::instance())); -} - - -void Application::saveConfiguration() const -{ - ReKonfig::self()->writeConfig(); -} - - -MainWindow *Application::mainWindow() -{ - MainWindow *active = qobject_cast<MainWindow*>(QApplication::activeWindow()); - - if (!active) - { - if (m_mainWindows.isEmpty()) - return 0; - - Q_FOREACH(const QWeakPointer<MainWindow> &pointer, m_mainWindows) - { - if (KWindowInfo(pointer.data()->effectiveWinId(), NET::WMDesktop, 0).isOnCurrentDesktop()) - return pointer.data(); - } - return m_mainWindows.at(0).data(); - } - return active; -} - - -HistoryManager *Application::historyManager() -{ - if (m_historyManager.isNull()) - { - m_historyManager = new HistoryManager; - } - return m_historyManager.data(); -} - - -BookmarkManager *Application::bookmarkManager() -{ - if (m_bookmarkManager.isNull()) - { - m_bookmarkManager = new BookmarkManager; - } - return m_bookmarkManager.data(); -} - - -SessionManager *Application::sessionManager() -{ - if (m_sessionManager.isNull()) - { - m_sessionManager = new SessionManager; - } - return m_sessionManager.data(); -} - - -OpenSearchManager *Application::opensearchManager() -{ - if (m_opensearchManager.isNull()) - { - m_opensearchManager = new OpenSearchManager; - } - return m_opensearchManager.data(); -} - - -IconManager *Application::iconManager() -{ - if (m_iconManager.isNull()) - { - m_iconManager = new IconManager; - } - return m_iconManager.data(); -} - - -DownloadManager *Application::downloadManager() -{ - if (m_downloadManager.isNull()) - { - m_downloadManager = new DownloadManager(instance()); - } - return m_downloadManager.data(); -} - - -UserAgentManager *Application::userAgentManager() -{ - if (m_userAgentManager.isNull()) - { - m_userAgentManager = new UserAgentManager(instance()); - } - return m_userAgentManager.data(); -} - - -SyncManager *Application::syncManager() -{ - if (m_syncManager.isNull()) - { - m_syncManager = new SyncManager(instance()); - } - return m_syncManager.data(); -} - - -void Application::loadUrl(const KUrl& url, const Rekonq::OpenType& type) -{ - if (url.isEmpty()) - return; - - if (!url.isValid()) - { - KMessageBox::error(0, i18n("Malformed URL:\n%1", url.url(KUrl::RemoveTrailingSlash))); - return; - } - - Rekonq::OpenType newType = type; - // Don't open useless tabs or windows for actions in about: pages - if (url.url().contains("about:") && url.url().contains("/")) - newType = Rekonq::CurrentTab; - - MainWindow *w = 0; - if (newType == Rekonq::NewWindow - || (newType == Rekonq::NewTab && ReKonfig::openLinksInNewWindow())) - { - w = newMainWindow(); - newType = Rekonq::CurrentTab; - } - else - { - w = mainWindow(); - } - - // be SURE window exists - if (!w) - w = newMainWindow(); - - w->loadCheckedUrl(url, newType); -} - - -MainWindow *Application::newMainWindow(bool withTab) -{ - MainWindow *w = new MainWindow(); - // This is used to track which window was activated most recently - w->installEventFilter(this); - - m_mainWindows.prepend(w); - - if (withTab) - w->mainView()->newWebTab(); // remember using newWebTab and NOT newTab here!! - - w->show(); - - return w; -} - - -void Application::removeMainWindow(MainWindow *window) -{ - m_mainWindows.removeOne(window); - kDebug() << "Removing Window from app window list..."; - - // bye bye... - if (m_mainWindows.count() == 0) - quit(); -} - - -MainWindowList Application::mainWindowList() -{ - return m_mainWindows; -} - - -AdBlockManager *Application::adblockManager() -{ - if (m_adblockManager.isNull()) - { - m_adblockManager = new AdBlockManager; - } - return m_adblockManager.data(); -} - - -void Application::newWindow() -{ - loadUrl(KUrl("about:home"), Rekonq::NewWindow); - mainWindow()->mainView()->currentUrlBar()->setFocus(); -} - - -bool Application::eventFilter(QObject* watched, QEvent* event) -{ - // Track which window was activated most recently to prefer it on window choosing - // (e.g. when another application opens a link) - if (event->type() == QEvent::WindowActivate) - { - MainWindow *window = qobject_cast<MainWindow*>(watched); - if (window) - { - if (m_mainWindows.at(0).data() != window) - { - int index = m_mainWindows.indexOf(QWeakPointer<MainWindow>(window)); - Q_ASSERT(index != -1); - m_mainWindows.prepend(m_mainWindows.takeAt(index)); - } - } - } - - return QObject::eventFilter(watched, event); -} - - -void Application::updateConfiguration() -{ - // ============== Tabs ================== - bool b = ReKonfig::closeTabSelectPrevious(); - Q_FOREACH(const QWeakPointer<MainWindow> &w, m_mainWindows) - { - MainView *mv = w.data()->mainView(); - mv->updateTabBarVisibility(); - - mv->tabBar()->setAnimatedTabHighlighting(ReKonfig::animatedTabHighlighting()); - - if (b) - mv->tabBar()->setSelectionBehaviorOnRemove(QTabBar::SelectPreviousTab); - else - mv->tabBar()->setSelectionBehaviorOnRemove(QTabBar::SelectRightTab); - } - - QWebSettings *defaultSettings = QWebSettings::globalSettings(); - - // =========== Fonts ============== - defaultSettings->setFontFamily(QWebSettings::StandardFont, ReKonfig::standardFontFamily()); - defaultSettings->setFontFamily(QWebSettings::FixedFont, ReKonfig::fixedFontFamily()); - defaultSettings->setFontFamily(QWebSettings::SerifFont, ReKonfig::serifFontFamily()); - defaultSettings->setFontFamily(QWebSettings::SansSerifFont, ReKonfig::sansSerifFontFamily()); - defaultSettings->setFontFamily(QWebSettings::CursiveFont, ReKonfig::cursiveFontFamily()); - defaultSettings->setFontFamily(QWebSettings::FantasyFont, ReKonfig::fantasyFontFamily()); - - // compute font size - // (I have to admit I know nothing about these DPI questions..: copied from kwebkitpart, as someone suggested) - // font size in pixels = font size in inches × screen dpi - if (mainWindow() && mainWindow()->currentTab()) - { - int logDpiY = mainWindow()->currentTab()->view()->logicalDpiY(); - float toPix = (logDpiY < 96.0) - ? 96.0 / 72.0 - : logDpiY / 72.0 ; - - int defaultFontSize = ReKonfig::defaultFontSize(); - int minimumFontSize = ReKonfig::minFontSize(); - - defaultSettings->setFontSize(QWebSettings::DefaultFontSize, qRound(defaultFontSize * toPix)); - defaultSettings->setFontSize(QWebSettings::MinimumFontSize, qRound(minimumFontSize * toPix)); - } - - // encodings - QString enc = ReKonfig::defaultEncoding(); - defaultSettings->setDefaultTextEncoding(enc); - - // ================ WebKit ============================ - defaultSettings->setAttribute(QWebSettings::DnsPrefetchEnabled, ReKonfig::dnsPrefetch()); - defaultSettings->setAttribute(QWebSettings::PrintElementBackgrounds, ReKonfig::printElementBackgrounds()); - - defaultSettings->setAttribute(QWebSettings::JavascriptEnabled, ReKonfig::javascriptEnabled()); - defaultSettings->setAttribute(QWebSettings::JavascriptCanOpenWindows, ReKonfig::javascriptCanOpenWindows()); - defaultSettings->setAttribute(QWebSettings::JavascriptCanAccessClipboard, ReKonfig::javascriptCanAccessClipboard()); - - defaultSettings->setAttribute(QWebSettings::JavaEnabled, ReKonfig::javaEnabled()); - - if (ReKonfig::pluginsEnabled() == 2) - defaultSettings->setAttribute(QWebSettings::PluginsEnabled, false); - else - defaultSettings->setAttribute(QWebSettings::PluginsEnabled, true); - - // Enabling WebKit "Page Cache" feature: http://webkit.org/blog/427/webkit-page-cache-i-the-basics/ - defaultSettings->setMaximumPagesInCache(3); - - // ===== HTML 5 features WebKit support ====== - defaultSettings->setAttribute(QWebSettings::OfflineStorageDatabaseEnabled, ReKonfig::offlineStorageDatabaseEnabled()); - defaultSettings->setAttribute(QWebSettings::OfflineWebApplicationCacheEnabled, ReKonfig::offlineWebApplicationCacheEnabled()); - defaultSettings->setAttribute(QWebSettings::LocalStorageEnabled, ReKonfig::localStorageEnabled()); - if (ReKonfig::localStorageEnabled()) - { - QString path = KStandardDirs::locateLocal("cache", QString("WebkitLocalStorage/rekonq"), true); - path.remove("rekonq"); - QWebSettings::setOfflineStoragePath(path); - QWebSettings::setOfflineStorageDefaultQuota(50000); - } - - // ================= WebGl =================== - defaultSettings->setAttribute(QWebSettings::WebGLEnabled, ReKonfig::webGL()); - defaultSettings->setAttribute(QWebSettings::AcceleratedCompositingEnabled, ReKonfig::webGL()); - - // Applies user defined CSS to all open webpages. - defaultSettings->setUserStyleSheetUrl(ReKonfig::userCSS()); - - // ====== load Settings on main classes - historyManager()->loadSettings(); - - defaultSettings = 0; - - if (!mainWindow()) - return; - - ReKonfig::useFavicon() - ? mainWindow()->changeWindowIcon(mainWindow()->mainView()->currentIndex()) - : mainWindow()->setWindowIcon(KIcon("rekonq")) - ; - - // hovering unfocused tabs options - switch (ReKonfig::hoveringTabOption()) - { - case 0: // tab previews - case 3: // nothing - for (int i = 0; i < mainWindow()->mainView()->tabBar()->count(); i++) - { - mainWindow()->mainView()->tabBar()->setTabToolTip(i, QL1S("")); - } - break; - - case 1: // title previews - for (int i = 0; i < mainWindow()->mainView()->tabBar()->count(); i++) - { - mainWindow()->mainView()->tabBar()->setTabToolTip(i, mainWindow()->mainView()->tabText(i).remove('&')); - } - break; - - case 2: // url previews - for (int i = 0; i < mainWindow()->mainView()->tabBar()->count(); i++) - { - mainWindow()->mainView()->tabBar()->setTabToolTip(i, mainWindow()->mainView()->webTab(i)->url().toMimeDataString()); - } - break; - - default: // non extant case - ASSERT_NOT_REACHED(unknown hoveringTabOption); - break; - } - -} - - -void Application::setPrivateBrowsingMode(bool b) -{ -// NOTE -// to let work nicely Private Browsing, we need the following: -// - enable WebKit Private Browsing mode :) -// - treat all cookies as session cookies -// (so that they do not get saved to a persistent storage). Available from KDE SC 4.5.72, see BUG: 250122 -// - favicons (fixed in rekonq 0.5.87) -// - save actual session (to restore it when Private Mode is closed) and stop storing it -// - disable history saving - - QWebSettings *settings = QWebSettings::globalSettings(); - bool isJustEnabled = settings->testAttribute(QWebSettings::PrivateBrowsingEnabled); - if (isJustEnabled == b) - return; // uhm... something goes wrong... - - if (b) - { - QString caption = i18n("Are you sure you want to turn on private browsing?"); - QString text = i18n("<b>%1</b>" - "<p>rekonq will save your current tabs for when you'll stop private browsing the net.</p>", caption); - - int button = KMessageBox::warningContinueCancel(mainWindow(), - text, caption, KStandardGuiItem::cont(), KStandardGuiItem::cancel(), - i18n("don't ask again")); - if (button != KMessageBox::Continue) - { - // The user canceled so we should uncheck the box - _privateBrowsingAction->setChecked(false); - return; - } - - sessionManager()->setSessionManagementEnabled(false); - settings->setAttribute(QWebSettings::PrivateBrowsingEnabled, true); - _privateBrowsingAction->setChecked(true); - - loadUrl(KUrl("about:home"), Rekonq::NewWindow); - - MainWindow *activeOne = m_mainWindows.at(0).data(); - - Q_FOREACH(const QWeakPointer<MainWindow> &w, m_mainWindows) - { - if (w.data() != activeOne) - w.data()->close(); - } - } - else - { - settings->setAttribute(QWebSettings::PrivateBrowsingEnabled, false); - _privateBrowsingAction->setChecked(false); - - int newWindows = sessionManager()->restoreSavedSession(); - if (newWindows == 0) - { - loadUrl(KUrl("about:home"), Rekonq::NewWindow); - newWindows++; - } - - for (int i = newWindows; i < m_mainWindows.count(); ++i) - { - m_mainWindows.at(i).data()->close(); - } - - sessionManager()->setSessionManagementEnabled(true); - } -} - - -void Application::queryQuit() -{ - if (mainWindowList().count() > 1) - { - int answer = KMessageBox::questionYesNoCancel( - mainWindow(), - i18n("Do you want to close the window or the whole application?"), - i18n("Application/Window closing..."), - KGuiItem(i18n("C&lose Current Window"), - KIcon("window-close")), - KStandardGuiItem::quit(), - KStandardGuiItem::cancel(), - "confirmClosingMultipleWindows" - ); - - switch (answer) - { - case KMessageBox::Yes: - mainWindow()->close(); - return; - - case KMessageBox::No: - break; - - default: - return; - } - } - - // in case of just one window... - quit(); -} - - -void Application::createWebAppShortcut() -{ - KUrl u = mainWindow()->currentTab()->url(); - QString h = u.host(); - - QPointer<KDialog> dialog = new KDialog(mainWindow()); - dialog->setCaption(i18nc("@title:window", "Create Application Shortcut")); - dialog->setButtons(KDialog::Ok | KDialog::Cancel); - dialog->button(KDialog::Ok)->setText(i18n("Create")); - dialog->setMinimumSize(400, 50); - dialog->setWindowIcon(QIcon(iconManager()->iconForUrl(u).pixmap(16))); - - Ui::webAppCreation wAppWidget; - QWidget widget; - wAppWidget.setupUi(&widget); - - const QString title = mainWindow()->currentTab()->view()->title().remove('&'); - wAppWidget.nameLineEdit->setText(title); - wAppWidget.kcfg_createDesktopAppShortcut->setChecked(ReKonfig::createDesktopAppShortcut()); - wAppWidget.kcfg_createMenuAppShortcut->setChecked(ReKonfig::createMenuAppShortcut()); - - dialog->setMainWidget(&widget); - dialog->exec(); - - if (dialog->result() == QDialog::Accepted) - { - ReKonfig::setCreateDesktopAppShortcut(wAppWidget.kcfg_createDesktopAppShortcut->isChecked()); - ReKonfig::setCreateMenuAppShortcut(wAppWidget.kcfg_createMenuAppShortcut->isChecked()); - - iconManager()->saveDesktopIconForUrl(u); - QString iconPath = KStandardDirs::locateLocal("cache" , "favicons/" , true) + h + QL1S("_WEBAPPICON.png"); - - QString shortcutString = QL1S("#!/usr/bin/env xdg-open\n") - + QL1S("[Desktop Entry]\n") - + QL1S("Name=") + (wAppWidget.nameLineEdit->text().isEmpty() ? QL1S("kwebapp") : wAppWidget.nameLineEdit->text()) + QL1S("\n") - + QL1S("GenericName=") + (wAppWidget.descriptionLineEdit->text().isEmpty() ? QL1S("") : wAppWidget.descriptionLineEdit->text()) + QL1S("\n") - + QL1S("Icon=") + iconPath + QL1S("\n") - + QL1S("Exec=kwebapp ") + u.url() + QL1S("\n") - + QL1S("Type=Application\n") - + QL1S("Categories=Application;Network\n") - ; - - if (ReKonfig::createDesktopAppShortcut()) - { - QString desktop = KGlobalSettings::desktopPath(); - QFile wAppFile(desktop + QL1C('/') + title); - - if (!wAppFile.open(QIODevice::WriteOnly | QIODevice::Text)) - { - kDebug() << "Unable to open file: " << wAppFile.errorString(); - return; - } - - QTextStream out(&wAppFile); - out.setCodec("UTF-8"); - out << shortcutString; - - wAppFile.setPermissions(QFile::ReadUser | QFile::WriteUser | QFile::ExeUser | QFile::ReadGroup | QFile::ReadOther); - wAppFile.close(); - } - - if (ReKonfig::createMenuAppShortcut()) - { - QString appMenuDir = KStandardDirs::locateLocal("xdgdata-apps", QString()); - QFile wAppFile(appMenuDir + QL1C('/') + title + QL1S(".desktop")); - - if (!wAppFile.open(QIODevice::WriteOnly | QIODevice::Text)) - { - kDebug() << "Unable to open file: " << wAppFile.errorString(); - return; - } - - QTextStream out(&wAppFile); - out.setCodec("UTF-8"); - out << shortcutString; - - wAppFile.close(); - } - - } - - dialog->deleteLater(); -} diff --git a/src/application.h b/src/application.h deleted file mode 100644 index 168a9dcd..00000000 --- a/src/application.h +++ /dev/null @@ -1,155 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2008-2012 by Andrea Diamantini <adjam7 at gmail dot com> -* Copyright (C) 2009 by PaweÅ‚ Prażak <pawelprazak at gmail dot com> -* Copyright (C) 2009-2011 by Lionel Chauvin <megabigbug@yahoo.fr> -* -* -* 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 APPLICATION_H -#define APPLICATION_H - - -// Rekonq Includes -#include "rekonq_defines.h" - -// Local Includes -#include "downloaditem.h" - -// KDE Includes -#include <KUniqueApplication> - -// Qt Includes -#include <QWeakPointer> - -// Forward Declarations -class KAction; - -class QWebHistory; - -class AdBlockManager; -class BookmarkManager; -class DownloadManager; -class HistoryManager; -class IconManager; -class MainWindow; -class OpenSearchManager; -class SessionManager; -class UserAgentManager; -class SyncManager; -class WebTab; - - -typedef QList< QWeakPointer<MainWindow> > MainWindowList; - - -// --------------------------------------------------------------------------------------------------------------- - - -#define rApp Application::instance() - -/** - * Rekonq Application class - */ -class REKONQ_TESTS_EXPORT Application : public KUniqueApplication -{ - Q_OBJECT - -public: - Application(); - ~Application(); - - int newInstance(); - static Application *instance(); - - MainWindow *mainWindow(); - MainWindow *newMainWindow(bool withTab = true); - MainWindowList mainWindowList(); - - HistoryManager *historyManager(); - BookmarkManager *bookmarkManager(); - SessionManager *sessionManager(); - AdBlockManager *adblockManager(); - OpenSearchManager *opensearchManager(); - IconManager *iconManager(); - DownloadManager *downloadManager(); - UserAgentManager *userAgentManager(); - SyncManager *syncManager(); - - KAction *privateBrowsingAction() - { - return _privateBrowsingAction; - }; - -public Q_SLOTS: - /** - * Save application's configuration - * - * @see ReKonfig::self()->writeConfig(); - */ - void saveConfiguration() const; - - /** - * @short load url - * - * @param url The url to load - * @param type the type where loading the url. @see Rekonq::OpenType - */ - void loadUrl(const KUrl& url, - const Rekonq::OpenType& type = Rekonq::CurrentTab - ); - - void newWindow(); - void removeMainWindow(MainWindow *window); - -protected: - // This is used to track which window was activated most recently - bool eventFilter(QObject *watched, QEvent *event); - -private Q_SLOTS: - void updateConfiguration(); - - // the general place to set private browsing - void setPrivateBrowsingMode(bool); - - void queryQuit(); - - void createWebAppShortcut(); - -private: - QWeakPointer<HistoryManager> m_historyManager; - QWeakPointer<BookmarkManager> m_bookmarkManager; - QWeakPointer<SessionManager> m_sessionManager; - QWeakPointer<AdBlockManager> m_adblockManager; - QWeakPointer<OpenSearchManager> m_opensearchManager; - QWeakPointer<IconManager> m_iconManager; - QWeakPointer<DownloadManager> m_downloadManager; - QWeakPointer<UserAgentManager> m_userAgentManager; - QWeakPointer<SyncManager> m_syncManager; - - MainWindowList m_mainWindows; - - KAction *_privateBrowsingAction; -}; - -#endif // APPLICATION_H diff --git a/src/bookmarks/bookmarkmanager.cpp b/src/bookmarks/bookmarkmanager.cpp deleted file mode 100644 index 33f3c662..00000000 --- a/src/bookmarks/bookmarkmanager.cpp +++ /dev/null @@ -1,353 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2008-2012 by Andrea Diamantini <adjam7 at gmail dot com> -* Copyright (C) 2009 by PaweÅ‚ Prażak <pawelprazak at gmail dot com> -* Copyright (C) 2009-2010 by Lionel Chauvin <megabigbug@yahoo.fr> -* 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/>. -* -* ============================================================ */ - - -// Self Includes -#include "bookmarkmanager.h" -#include "bookmarkmanager.moc" - -// Local Includes -#include "application.h" -#include "bookmarkspanel.h" -#include "bookmarkstoolbar.h" -#include "bookmarkowner.h" -#include "iconmanager.h" -#include "mainwindow.h" -#include "webtab.h" - -// KDE Includes -#include <KActionCollection> -#include <KStandardDirs> - -// Qt Includes -#include <QtCore/QFile> - - -BookmarkManager::BookmarkManager(QObject *parent) - : QObject(parent) - , m_manager(0) - , m_owner(0) - , m_actionCollection(new KActionCollection(this)) -{ - m_manager = KBookmarkManager::userBookmarksManager(); - const QString bookmarksFile = KStandardDirs::locateLocal("data", QString::fromLatin1("konqueror/bookmarks.xml")); - - if (!QFile::exists(bookmarksFile)) - { - kDebug() << "copying of defaultbookmarks.xbel ..."; - - QString bookmarksDefaultPath = KStandardDirs::locate("appdata" , "defaultbookmarks.xbel"); - KBookmarkManager *tempManager = KBookmarkManager::managerForExternalFile(bookmarksDefaultPath); - - copyBookmarkGroup(tempManager->root(), rootGroup()); - m_manager->emitChanged(); - delete tempManager; - } - - connect(m_manager, SIGNAL(changed(QString, QString)), this, SLOT(slotBookmarksChanged())); - - // setup menu - m_owner = new BookmarkOwner(m_manager, this); - connect(m_owner, SIGNAL(openUrl(KUrl, Rekonq::OpenType)), - this, SIGNAL(openUrl(KUrl, Rekonq::OpenType))); - - // bookmarks loading - connect(this, SIGNAL(openUrl(KUrl, Rekonq::OpenType)), rApp, SLOT(loadUrl(KUrl, Rekonq::OpenType))); -} - - -BookmarkManager::~BookmarkManager() -{ - delete m_manager; -} - - -KActionMenu* BookmarkManager::bookmarkActionMenu(QWidget *parent) -{ - KMenu *menu = new KMenu(parent); - KActionMenu *bookmarkActionMenu = new KActionMenu(menu); - bookmarkActionMenu->setMenu(menu); - bookmarkActionMenu->setText(i18n("&Bookmarks")); - BookmarkMenu *bMenu = new BookmarkMenu(m_manager, m_owner, menu, m_actionCollection); - bMenu->setParent(menu); - - return bookmarkActionMenu; -} - - -void BookmarkManager::registerBookmarkBar(BookmarkToolBar *toolbar) -{ - if (m_bookmarkToolBars.contains(toolbar)) - return; - - m_bookmarkToolBars.append(toolbar); -} - - -void BookmarkManager::removeBookmarkBar(BookmarkToolBar *toolbar) -{ - m_bookmarkToolBars.removeOne(toolbar); -} - - -void BookmarkManager::registerBookmarkPanel(BookmarksPanel *panel) -{ - if (panel && !m_bookmarkPanels.contains(panel)) - { - m_bookmarkPanels.append(panel); - connect(panel, SIGNAL(expansionChanged()), this, SLOT(slotPanelChanged())); - } -} - - -void BookmarkManager::removeBookmarkPanel(BookmarksPanel *panel) -{ - if (!panel) - return; - - m_bookmarkPanels.removeOne(panel); - panel->disconnect(this); - - if (m_bookmarkPanels.isEmpty()) - emitChanged(); -} - - -QAction* BookmarkManager::actionByName(const QString &name) -{ - QAction *action = m_actionCollection->action(name); - if (action) - return action; - return new QAction(this); -} - - -KBookmarkGroup BookmarkManager::rootGroup() -{ - return m_manager->root(); -} - - -QList<KBookmark> BookmarkManager::find(const QString &text) -{ - QList<KBookmark> list; - - KBookmarkGroup root = rootGroup(); - if (!root.isNull()) - for (KBookmark bookmark = root.first(); !bookmark.isNull(); bookmark = root.next(bookmark)) - find(&list, bookmark, text); - - return list; -} - - -KBookmark BookmarkManager::bookmarkForUrl(const KUrl &url) -{ - KBookmarkGroup root = rootGroup(); - if (root.isNull()) - return KBookmark(); - - return bookmarkForUrl(root, url); -} - - -void BookmarkManager::slotBookmarksChanged() -{ - Q_FOREACH(BookmarkToolBar * bookmarkToolBar, m_bookmarkToolBars) - { - if (bookmarkToolBar) - { - bookmarkToolBar->toolBar()->clear(); - fillBookmarkBar(bookmarkToolBar); - } - } - - // this update about:bookmarks page... - if (rApp->mainWindow() - && rApp->mainWindow()->currentTab() - && rApp->mainWindow()->currentTab()->url().toMimeDataString().contains("about:bookmarks") - ) - rApp->loadUrl(KUrl("about:bookmarks"), Rekonq::CurrentTab); - - emit bookmarksUpdated(); -} - - -void BookmarkManager::fillBookmarkBar(BookmarkToolBar *toolBar) -{ - KBookmarkGroup root = m_manager->toolbar(); - if (root.isNull()) - return; - - for (KBookmark bookmark = root.first(); !bookmark.isNull(); bookmark = root.next(bookmark)) - { - if (bookmark.isGroup()) - { - KBookmarkActionMenu *menuAction = new KBookmarkActionMenu(bookmark.toGroup(), this); - menuAction->setDelayed(false); - BookmarkMenu *bMenu = new BookmarkMenu(m_manager, m_owner, menuAction->menu(), bookmark.address()); - bMenu->setParent(menuAction->menu()); - - connect(menuAction->menu(), SIGNAL(aboutToShow()), toolBar, SLOT(menuDisplayed())); - connect(menuAction->menu(), SIGNAL(aboutToHide()), toolBar, SLOT(menuHidden())); - - toolBar->toolBar()->addAction(menuAction); - toolBar->toolBar()->widgetForAction(menuAction)->installEventFilter(toolBar); - } - else if (bookmark.isSeparator()) - { - toolBar->toolBar()->addSeparator(); - } - else - { - KBookmarkAction *action = new KBookmarkAction(bookmark, m_owner, this); - action->setIcon(rApp->iconManager()->iconForUrl(KUrl(bookmark.url()))); - connect(action, SIGNAL(hovered()), toolBar, SLOT(actionHovered())); - toolBar->toolBar()->addAction(action); - toolBar->toolBar()->widgetForAction(action)->installEventFilter(toolBar); - } - } -} - - -void BookmarkManager::slotPanelChanged() -{ - Q_FOREACH(BookmarksPanel * panel, m_bookmarkPanels) - { - if (panel && panel != sender()) - panel->loadFoldedState(); - } - if (rApp->mainWindow() - && rApp->mainWindow()->currentTab() - && rApp->mainWindow()->currentTab()->url().toMimeDataString().contains("about:bookmarks") - ) - rApp->loadUrl(KUrl("about:bookmarks"), Rekonq::CurrentTab); -} - - -void BookmarkManager::find(QList<KBookmark> *list, const KBookmark &bookmark, const QString &text) -{ - if (bookmark.isGroup()) - { - KBookmarkGroup group = bookmark.toGroup(); - for (KBookmark bm = group.first(); !bm.isNull(); bm = group.next(bm)) - find(list, bm, text); - } - else - { - QStringList words = text.split(' '); - bool matches = true; - Q_FOREACH(const QString & word, words) - { - if (!bookmark.url().url().contains(word, Qt::CaseInsensitive) - && !bookmark.fullText().contains(word, Qt::CaseInsensitive)) - { - matches = false; - break; - } - } - if (matches) - *list << bookmark; - } -} - - -KBookmark BookmarkManager::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; -} - - -void BookmarkManager::copyBookmarkGroup(const KBookmarkGroup &groupToCopy, KBookmarkGroup destGroup) -{ - KBookmark bookmark = groupToCopy.first(); - while (!bookmark.isNull()) - { - if (bookmark.isGroup()) - { - KBookmarkGroup newDestGroup = destGroup.createNewFolder(bookmark.text()); - if (bookmark.toGroup().isToolbarGroup()) - { - newDestGroup.internalElement().setAttribute("toolbar", "yes"); - newDestGroup.setIcon("bookmark-toolbar"); - } - copyBookmarkGroup(bookmark.toGroup(), newDestGroup); - } - else if (bookmark.isSeparator()) - { - destGroup.createNewSeparator(); - } - else - { - destGroup.addBookmark(bookmark.text(), bookmark.url()); - } - bookmark = groupToCopy.next(bookmark); - } -} - - -void BookmarkManager::slotEditBookmarks() -{ - m_manager->slotEditBookmarks(); -} - - -KBookmark BookmarkManager::findByAddress(const QString &address) -{ - return m_manager->findByAddress(address); -} - - -void BookmarkManager::openFolderinTabs(const KBookmarkGroup &bm) -{ - m_owner->openFolderinTabs(bm); -} - - -void BookmarkManager::emitChanged() -{ - m_manager->emitChanged(); -} diff --git a/src/bookmarks/bookmarkmanager.h b/src/bookmarks/bookmarkmanager.h deleted file mode 100644 index e5528a8a..00000000 --- a/src/bookmarks/bookmarkmanager.h +++ /dev/null @@ -1,172 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2008-2012 by Andrea Diamantini <adjam7 at gmail dot com> -* Copyright (C) 2009 by PaweÅ‚ Prażak <pawelprazak at gmail dot com> -* Copyright (C) 2009-2010 by Lionel Chauvin <megabigbug@yahoo.fr> -* 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 BOOKMARK_MANAGER_H -#define BOOKMARK_MANAGER_H - - -// Rekonq Includes -#include "rekonq_defines.h" - -// KDE Includes -#include <KBookmark> - -// Qt Includes -#include <QObject> - -// Forward Declarations -class BookmarksPanel; -class BookmarkToolBar; -class BookmarkOwner; -class BookmarkMenu; - -class KAction; -class KActionCollection; -class KActionMenu; -class KBookmarkGroup; -class KBookmarkManager; -class KUrl; - -class QAction; - - -/** - * This class represent the interface to rekonq bookmarks system. - * All rekonq needs (Bookmarks Menu, Bookmarks Toolbar) is provided - * from this class. - * So it implements code to have each one. - */ -class BookmarkManager : public QObject -{ - Q_OBJECT - -public: - /** - * @short Class constructor. - * Connect BookmarksProvider with bookmarks source - * (actually konqueror's bookmarks). - * @param parent The MainWindow to provide bookmarks objects. - */ - BookmarkManager(QObject *parent = 0); - ~BookmarkManager(); - - /** - * @short Get the Bookmarks Menu Action - * @param the parent widget - * @return the Bookmarks Menu - */ - KActionMenu* bookmarkActionMenu(QWidget *parent); - - /** - * @short set the Bookmarks Toolbar Action - */ - void registerBookmarkBar(BookmarkToolBar *toolbar); - void removeBookmarkBar(BookmarkToolBar *toolbar); - - void registerBookmarkPanel(BookmarksPanel *panel); - void removeBookmarkPanel(BookmarksPanel *panel); - - /** - * @short Get action by name - * This method returns poiner bookmark action of given name. - * @pre m_actionCollection != NULL - * @param name Name of action you want to get - * @return It returns actions if one exists or empty object - */ - QAction* actionByName(const QString &name); - - /** - * returns Bookmark Manager root group - * - * @return the root bookmark group - */ - KBookmarkGroup rootGroup(); - - inline KBookmarkManager* manager() - { - return m_manager; - } - - inline BookmarkOwner* owner() - { - return m_owner; - } - - QList<KBookmark> find(const QString &text); - - KBookmark bookmarkForUrl(const KUrl &url); - - KBookmark findByAddress(const QString &); - void openFolderinTabs(const KBookmarkGroup &bm); - void emitChanged(); - - static inline QString bookmark_mime_type() - { - return QL1S("application/x-rekonq-bookmark"); - } - -public Q_SLOTS: - /** - * @short Waits for signal that the group with the address has been modified by the caller. - * Waits for signal that the group (or any of its children) with the address - * @p groupAddress (e.g. "/4/5") has been modified by the caller @p caller. - * @param groupAddress bookmark group address - * @param caller caller that modified the bookmarks - * @see KBookmarkManager::changed - */ - void slotBookmarksChanged(); - void fillBookmarkBar(BookmarkToolBar *toolBar); - - void slotEditBookmarks(); - -private Q_SLOTS: - void slotPanelChanged(); - -Q_SIGNALS: - /** - * @short This signal is emitted when an url has to be loaded - */ - void openUrl(const KUrl &, const Rekonq::OpenType &); - - void bookmarksUpdated(); - -private: - void find(QList<KBookmark> *list, const KBookmark &bookmark, const QString &text); - KBookmark bookmarkForUrl(const KBookmark &bookmark, const KUrl &url); - void copyBookmarkGroup(const KBookmarkGroup &groupToCopy, KBookmarkGroup destGroup); - - KBookmarkManager *m_manager; - BookmarkOwner *m_owner; - KActionCollection *m_actionCollection; - QList<BookmarkToolBar *> m_bookmarkToolBars; - QList<BookmarksPanel *> m_bookmarkPanels; -}; - - -#endif // BOOKMARK_MANAGER_H diff --git a/src/bookmarks/bookmarkowner.cpp b/src/bookmarks/bookmarkowner.cpp deleted file mode 100644 index 430ec5c3..00000000 --- a/src/bookmarks/bookmarkowner.cpp +++ /dev/null @@ -1,428 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2008-2012 by Andrea Diamantini <adjam7 at gmail dot com> -* Copyright (C) 2009 by PaweÅ‚ Prażak <pawelprazak at gmail dot com> -* Copyright (C) 2009-2010 by Lionel Chauvin <megabigbug@yahoo.fr> -* 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/>. -* -* ============================================================ */ - - -// Self Includes -#include "bookmarkowner.h" -#include "bookmarkowner.moc" - -// Local Includes -#include "application.h" -#include "bookmarkmanager.h" -#include "mainview.h" -#include "mainwindow.h" -#include "webtab.h" - -// KDE Includes -#include <KBookmarkDialog> -#include <KLocalizedString> -#include <KMessageBox> - -// Qt Includes -#include <QClipboard> - -// Nepomuk config include -#include "config-nepomuk.h" - -#ifdef HAVE_NEPOMUK -// Local Nepomuk Includes -#include "resourcelinkdialog.h" - -// Nepomuk Includes -#include <Nepomuk/Resource> -#include <Nepomuk/Vocabulary/NFO> -#endif - - -BookmarkOwner::BookmarkOwner(KBookmarkManager *manager, QObject *parent) - : QObject(parent) - , KBookmarkOwner() - , m_manager(manager) -{ -} - - -KAction* BookmarkOwner::createAction(const KBookmark &bookmark, const BookmarkAction &bmAction) -{ - switch (bmAction) - { - case OPEN: - return createAction(i18n("Open"), "tab-new", - i18n("Open bookmark in current tab"), SLOT(openBookmark(KBookmark)), bookmark); - case OPEN_IN_TAB: - return createAction(i18n("Open in New Tab"), "tab-new", - i18n("Open bookmark in new tab"), SLOT(openBookmarkInNewTab(KBookmark)), bookmark); - case OPEN_IN_WINDOW: - return createAction(i18n("Open in New Window"), "window-new", - i18n("Open bookmark in new window"), SLOT(openBookmarkInNewWindow(KBookmark)), bookmark); - case OPEN_FOLDER: - return createAction(i18n("Open Folder in Tabs"), "tab-new", - i18n("Open all the bookmarks in folder in tabs"), SLOT(openBookmarkFolder(KBookmark)), bookmark); - case BOOKMARK_PAGE: - return createAction(i18n("Add Bookmark"), "bookmark-new", - i18n("Bookmark current page"), SLOT(bookmarkCurrentPage(KBookmark)), bookmark); - case NEW_FOLDER: - return createAction(i18n("New Folder"), "folder-new", - i18n("Create a new bookmark folder"), SLOT(newBookmarkFolder(KBookmark)), bookmark); - case NEW_SEPARATOR: - return createAction(i18n("New Separator"), "edit-clear", - i18n("Create a new bookmark separator"), SLOT(newSeparator(KBookmark)), bookmark); - case COPY: - return createAction(i18n("Copy Link"), "edit-copy", - i18n("Copy the bookmark's link address"), SLOT(copyLink(KBookmark)), bookmark); - case EDIT: - return createAction(i18n("Edit"), "configure", - i18n("Edit the bookmark"), SLOT(editBookmark(KBookmark)), bookmark); -#ifdef HAVE_NEPOMUK - case FANCYBOOKMARK: - return createAction(i18n("Fancy Bookmark"), "nepomuk", - i18n("Link Nepomuk resources"), SLOT(fancyBookmark(KBookmark)), bookmark); -#endif - case DELETE: - return createAction(i18n("Delete"), "edit-delete", - i18n("Delete the bookmark"), SLOT(deleteBookmark(KBookmark)), bookmark); - case SET_TOOLBAR_FOLDER: - return createAction(i18n("Set as toolbar folder"), "bookmark-toolbar", - "", SLOT(setToolBarFolder(KBookmark)), bookmark); - case UNSET_TOOLBAR_FOLDER: - return createAction(i18n("Unset this folder as the toolbar folder"), "bookmark-toolbar", - "", SLOT(unsetToolBarFolder()), bookmark); - default: - ASSERT_NOT_REACHED(unknown BookmarkAction); - return 0; - } -} - - -QString BookmarkOwner::currentTitle() const -{ - return rApp->mainWindow()->currentTab()->view()->title(); -} - - -QString BookmarkOwner::currentUrl() const -{ - return rApp->mainWindow()->currentTab()->url().url(); -} - - -QList< QPair<QString, QString> > BookmarkOwner::currentBookmarkList() const -{ - QList< QPair<QString, QString> > bkList; - MainView *view = rApp->mainWindow()->mainView(); - int tabNumber = view->count(); - - for (int i = 0; i < tabNumber; ++i) - { - QPair<QString, QString> item; - item.first = view->webTab(i)->view()->title(); - item.second = view->webTab(i)->url().url(); - bkList << item; - } - - return bkList; -} - - -void BookmarkOwner::openBookmark(const KBookmark &bookmark, - Qt::MouseButtons mouseButtons, - Qt::KeyboardModifiers keyboardModifiers) -{ - if (keyboardModifiers & Qt::ControlModifier || mouseButtons & Qt::MidButton) - openBookmarkInNewTab(bookmark); - else - openBookmark(bookmark); -} - - -void BookmarkOwner::openFolderinTabs(const KBookmarkGroup &bkGoup) -{ - QList<KUrl> urlList = bkGoup.groupUrlList(); - - if (urlList.length() > 8) - { - if (KMessageBox::warningContinueCancel( - rApp->mainWindow(), - i18ncp("%1=Number of tabs. Value is always >=8", - "You are about to open %1 tabs.\nAre you sure?", - "You are about to open %1 tabs.\nAre you sure?", urlList.length())) - != KMessageBox::Continue - ) - return; - } - - Q_FOREACH(const KUrl & url, urlList) - { - emit openUrl(url, Rekonq::NewFocusedTab); - } -} - - -void BookmarkOwner::openBookmark(const KBookmark &bookmark) -{ - emit openUrl(bookmark.url(), Rekonq::CurrentTab); -} - - -void BookmarkOwner::openBookmarkInNewTab(const KBookmark &bookmark) -{ - emit openUrl(bookmark.url(), Rekonq::NewTab); -} - - -void BookmarkOwner::openBookmarkInNewWindow(const KBookmark &bookmark) -{ - emit openUrl(bookmark.url(), Rekonq::NewWindow); -} - - -void BookmarkOwner::openBookmarkFolder(const KBookmark &bookmark) -{ - Q_ASSERT(bookmark.isGroup()); - openFolderinTabs(bookmark.toGroup()); -} - - -KBookmark BookmarkOwner::bookmarkCurrentPage(const KBookmark &bookmark) -{ - KBookmarkGroup parent; - - if (!bookmark.isNull()) - { - if (bookmark.isGroup()) - parent = bookmark.toGroup(); - else - parent = bookmark.parentGroup(); - } - else - { - parent = rApp->bookmarkManager()->rootGroup(); -#ifdef HAVE_NEPOMUK - Nepomuk::Resource nfoResource; - nfoResource = ((QUrl)currentUrl()); - nfoResource.addType(Nepomuk::Vocabulary::NFO::Website()); - nfoResource.setLabel(currentTitle()); -#endif - } - - KBookmark newBk = parent.addBookmark(currentTitle(), KUrl(currentUrl())); - if (!bookmark.isNull()) - parent.moveBookmark(newBk, bookmark); - - m_manager->emitChanged(parent); - return newBk; -} - - -KBookmarkGroup BookmarkOwner::newBookmarkFolder(const KBookmark &bookmark) -{ - KBookmarkGroup newBk; - KBookmarkDialog *dialog = bookmarkDialog(m_manager, 0); - QString folderName = i18n("New folder"); - - if (!bookmark.isNull()) - { - if (bookmark.isGroup()) - { - newBk = dialog->createNewFolder(folderName, bookmark); - } - else - { - newBk = dialog->createNewFolder(folderName, bookmark.parentGroup()); - if (!newBk.isNull()) - { - KBookmarkGroup parent = newBk.parentGroup(); - parent.moveBookmark(newBk, bookmark); - m_manager->emitChanged(parent); - } - } - } - else - { - newBk = dialog->createNewFolder(folderName); - } - - delete dialog; - return newBk; -} - - -KBookmark BookmarkOwner::newSeparator(const KBookmark &bookmark) -{ - KBookmark newBk; - - if (!bookmark.isNull()) - { - if (bookmark.isGroup()) - { - newBk = bookmark.toGroup().createNewSeparator(); - } - else - { - newBk = bookmark.parentGroup().createNewSeparator(); - newBk.parentGroup().moveBookmark(newBk, bookmark); - } - } - else - { - newBk = rApp->bookmarkManager()->rootGroup().createNewSeparator(); - } - - newBk.setIcon("edit-clear"); - - m_manager->emitChanged(newBk.parentGroup()); - return newBk; -} - - -void BookmarkOwner::copyLink(const KBookmark &bookmark) -{ - if (bookmark.isNull()) - return; - - QApplication::clipboard()->setText(bookmark.url().url()); -} - - -void BookmarkOwner::editBookmark(KBookmark bookmark) -{ - if (bookmark.isNull()) - return; - - KBookmarkDialog *dialog = bookmarkDialog(m_manager, 0); - dialog->editBookmark(bookmark); - - delete dialog; -} - - -#ifdef HAVE_NEPOMUK -void BookmarkOwner::fancyBookmark(KBookmark bookmark) -{ - Nepomuk::Resource nfoResource = (KUrl)bookmark.url(); - Nepomuk::ResourceLinkDialog r(nfoResource); - r.exec(); - -} -#endif - -bool BookmarkOwner::deleteBookmark(const KBookmark &bookmark) -{ - if (bookmark.isNull()) - return false; - - KBookmarkGroup bmg = bookmark.parentGroup(); - QString dialogCaption, dialogText; - - if (bookmark.isGroup()) - { - dialogCaption = i18n("Bookmark Folder Deletion"); - dialogText = i18n("Are you sure you wish to remove the bookmark folder\n\"%1\"?", bookmark.fullText()); - } - else if (bookmark.isSeparator()) - { - dialogCaption = i18n("Separator Deletion"); - dialogText = i18n("Are you sure you wish to remove this separator?"); - } - else - { - dialogCaption = i18n("Bookmark Deletion"); - dialogText = i18n("Are you sure you wish to remove the bookmark\n\"%1\"?", bookmark.fullText()); - } - - if (KMessageBox::warningContinueCancel( - 0, - dialogText, - dialogCaption, - KStandardGuiItem::del(), - KStandardGuiItem::cancel(), - "bookmarkDeletition_askAgain") - != KMessageBox::Continue - ) - return false; - - bmg.deleteBookmark(bookmark); -#ifdef HAVE_NEPOMUK - Nepomuk::Resource nfoResource(bookmark.url()); - nfoResource.remove(); -#endif - m_manager->emitChanged(bmg); - return true; -} - - -void BookmarkOwner::setToolBarFolder(KBookmark bookmark) -{ - if (!bookmark.isGroup()) - return; - - unsetToolBarFolder(); - bookmark.internalElement().setAttribute("toolbar", "yes"); - bookmark.setIcon("bookmark-toolbar"); - - m_manager->emitChanged(); -} - - -void BookmarkOwner::unsetToolBarFolder() -{ - KBookmarkGroup toolbar = m_manager->toolbar(); - if (!toolbar.isNull()) - { - toolbar.internalElement().setAttribute("toolbar", "no"); - toolbar.setIcon(""); - } - m_manager->emitChanged(); -} - - -KAction* BookmarkOwner::createAction(const QString &text, const QString &icon, - const QString &help, const char *slot, - const KBookmark &bookmark) -{ - CustomBookmarkAction *act = new CustomBookmarkAction(bookmark, KIcon(icon), text, this); - act->setHelpText(help); - connect(act, SIGNAL(triggered(KBookmark)), this, slot); - return act; -} - - -// ------------------------------------------------------------------------------------------------- - - -CustomBookmarkAction::CustomBookmarkAction(const KBookmark &bookmark, const KIcon &icon, const QString &text, QObject *parent) - : KAction(icon, text, parent) - , m_bookmark(bookmark) -{ - connect(this, SIGNAL(triggered()), this, SLOT(onActionTriggered())); -} - -void CustomBookmarkAction::onActionTriggered() -{ - emit triggered(m_bookmark); -} diff --git a/src/bookmarks/bookmarkowner.h b/src/bookmarks/bookmarkowner.h deleted file mode 100644 index f0b238b9..00000000 --- a/src/bookmarks/bookmarkowner.h +++ /dev/null @@ -1,159 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2008-2012 by Andrea Diamantini <adjam7 at gmail dot com> -* Copyright (C) 2009 by PaweÅ‚ Prażak <pawelprazak at gmail dot com> -* Copyright (C) 2009-2010 by Lionel Chauvin <megabigbug@yahoo.fr> -* 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 BOOKMARKOWNER_H -#define BOOKMARKOWNER_H - - -// Rekonq Includes -#include "rekonq_defines.h" - -// Nepomuk config include -#include "config-nepomuk.h" - -// KDE Includes -#include <KAction> -#include <KBookmarkOwner> - - -/** - * This class allows to manage bookmarks as actions. - */ -class REKONQ_TESTS_EXPORT BookmarkOwner : public QObject, public KBookmarkOwner -{ - Q_OBJECT - -public: - explicit BookmarkOwner(KBookmarkManager *manager, QObject *parent = 0); - - enum BookmarkAction - { - OPEN = 0, - OPEN_IN_TAB, - OPEN_IN_WINDOW, - OPEN_FOLDER, - BOOKMARK_PAGE, - NEW_FOLDER, - NEW_SEPARATOR, - COPY, - EDIT, -#ifdef HAVE_NEPOMUK - FANCYBOOKMARK, -#endif - DELETE, - NUM_ACTIONS, - SET_TOOLBAR_FOLDER, - UNSET_TOOLBAR_FOLDER - }; - - /** - * @return A new action for the given bookmark. - */ - KAction* createAction(const KBookmark &bookmark, const BookmarkAction &bmAction); - - // @{ - /** - * Functions to get current information. - */ - virtual QString currentTitle() const; - virtual QString currentUrl() const; - virtual QList< QPair<QString, QString> > currentBookmarkList() const; - // @} - - virtual bool supportsTabs() const - { - return true; - } - - // @{ - /** - * This functions emit signals that open the selected URLs - */ - virtual void openBookmark(const KBookmark &bookmark, - Qt::MouseButtons mouseButtons, - Qt::KeyboardModifiers keyboardModifiers); - virtual void openFolderinTabs(const KBookmarkGroup &bkGoup); - // @} - -public Q_SLOTS: - void openBookmark(const KBookmark &bookmark); - void openBookmarkInNewTab(const KBookmark &bookmark); - void openBookmarkInNewWindow(const KBookmark &bookmark); - void openBookmarkFolder(const KBookmark &bookmark); - - KBookmark bookmarkCurrentPage(const KBookmark &bookmark = KBookmark()); - KBookmarkGroup newBookmarkFolder(const KBookmark &bookmark = KBookmark()); - KBookmark newSeparator(const KBookmark &bookmark = KBookmark()); - - void copyLink(const KBookmark &bookmark); - void editBookmark(KBookmark bookmark); -#ifdef HAVE_NEPOMUK - void fancyBookmark(KBookmark bookmark); -#endif - bool deleteBookmark(const KBookmark &bookmark); - void setToolBarFolder(KBookmark bookmark = KBookmark()); - void unsetToolBarFolder(); - -Q_SIGNALS: - /** - * This signal is emitted when an url has to be loaded - * @param url the URL to load - */ - void openUrl(const KUrl &, const Rekonq::OpenType &); - -private: - KAction* createAction(const QString &text, const QString &icon, - const QString &help, const char *slot, - const KBookmark &bookmark); - - KBookmarkManager *m_manager; -}; - - -// ----------------------------------------------------------------------------------------------- - - -class CustomBookmarkAction : public KAction -{ - Q_OBJECT - -public: - CustomBookmarkAction(const KBookmark &bookmark, const KIcon &icon, const QString &text, QObject *parent); - -Q_SIGNALS: - void triggered(const KBookmark &); - -private Q_SLOTS: - void onActionTriggered(); - -private: - KBookmark m_bookmark; -}; - -#endif // BOOKMARKOWNER_H diff --git a/src/bookmarks/bookmarkscontextmenu.cpp b/src/bookmarks/bookmarkscontextmenu.cpp deleted file mode 100644 index 65f7994f..00000000 --- a/src/bookmarks/bookmarkscontextmenu.cpp +++ /dev/null @@ -1,164 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2010 by Yoann Laissus <yoann dot laissus at gmail dot com> -* Copyright (c) 2011-2012 by Phaneendra Hegde <pnh.pes@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) 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 "bookmarkscontextmenu.h" - -// Nepomuk config include -#include "config-nepomuk.h" - -// Local Includes -#include "bookmarkowner.h" -#include "bookmarkmanager.h" -#include "application.h" - -// KDE Includes -#include <KBookmarkManager> - - -BookmarksContextMenu::BookmarksContextMenu(const KBookmark &bookmark, - KBookmarkManager *manager, - BookmarkOwner *owner, - bool nullForced, - QWidget *parent - ) - : KBookmarkContextMenu(bookmark, manager, owner, parent) - , m_bmOwner(owner) - , m_nullForced(nullForced) -{ -} - - -void BookmarksContextMenu::addBookmarkActions() -{ - addAction(m_bmOwner->createAction(bookmark(), BookmarkOwner::OPEN_IN_TAB)); - addAction(m_bmOwner->createAction(bookmark(), BookmarkOwner::OPEN_IN_WINDOW)); - - addSeparator(); - - addAction(m_bmOwner->createAction(bookmark(), BookmarkOwner::BOOKMARK_PAGE)); - addAction(m_bmOwner->createAction(bookmark(), BookmarkOwner::NEW_FOLDER)); - addAction(m_bmOwner->createAction(bookmark(), BookmarkOwner::NEW_SEPARATOR)); - - addSeparator(); - - addAction(m_bmOwner->createAction(bookmark(), BookmarkOwner::COPY)); - - addSeparator(); - - addAction(m_bmOwner->createAction(bookmark(), BookmarkOwner::EDIT)); -#ifdef HAVE_NEPOMUK - addAction(m_bmOwner->createAction(bookmark(), BookmarkOwner::FANCYBOOKMARK)); -#endif - addAction(m_bmOwner->createAction(bookmark(), BookmarkOwner::DELETE)); -} - - -void BookmarksContextMenu::addFolderActions() -{ - KBookmarkGroup group = bookmark().toGroup(); - - if (bookmark().internalElement().attributeNode("toolbar").value() == "yes") - { - addAction(m_bmOwner->createAction(bookmark(), BookmarkOwner::UNSET_TOOLBAR_FOLDER)); - } - else - { - addAction(m_bmOwner->createAction(bookmark(), BookmarkOwner::SET_TOOLBAR_FOLDER)); - } - - if (!group.first().isNull()) - { - KBookmark child = group.first(); - - while (child.isGroup() || child.isSeparator()) - { - child = group.next(child); - } - - if (!child.isNull()) - { - addAction(m_bmOwner->createAction(bookmark(), BookmarkOwner::OPEN_FOLDER)); - addSeparator(); - } - } - - addAction(m_bmOwner->createAction(bookmark(), BookmarkOwner::BOOKMARK_PAGE)); - addAction(m_bmOwner->createAction(bookmark(), BookmarkOwner::NEW_FOLDER)); - addAction(m_bmOwner->createAction(bookmark(), BookmarkOwner::NEW_SEPARATOR)); - - addSeparator(); - - addAction(m_bmOwner->createAction(bookmark(), BookmarkOwner::EDIT)); - addAction(m_bmOwner->createAction(bookmark(), BookmarkOwner::DELETE)); -} - - -void BookmarksContextMenu::addSeparatorActions() -{ - addAction(m_bmOwner->createAction(bookmark(), BookmarkOwner::BOOKMARK_PAGE)); - addAction(m_bmOwner->createAction(bookmark(), BookmarkOwner::NEW_FOLDER)); - addAction(m_bmOwner->createAction(bookmark(), BookmarkOwner::NEW_SEPARATOR)); - - addSeparator(); - - addAction(m_bmOwner->createAction(bookmark(), BookmarkOwner::DELETE)); -} - - -void BookmarksContextMenu::addNullActions() -{ - KBookmarkManager *mngr = rApp->bookmarkManager()->manager(); - if (mngr->toolbar().hasParent()) - { - addAction(m_bmOwner->createAction(bookmark(), BookmarkOwner::UNSET_TOOLBAR_FOLDER)); - } - addAction(m_bmOwner->createAction(bookmark(), BookmarkOwner::BOOKMARK_PAGE)); - addAction(m_bmOwner->createAction(bookmark(), BookmarkOwner::NEW_FOLDER)); - addAction(m_bmOwner->createAction(bookmark(), BookmarkOwner::NEW_SEPARATOR)); -} - - -void BookmarksContextMenu::addActions() -{ - if (bookmark().isNull() || m_nullForced) - { - addNullActions(); - } - else if (bookmark().isSeparator()) - { - addSeparatorActions(); - } - else if (bookmark().isGroup()) - { - addFolderActions(); - } - else - { - addBookmarkActions(); - } -} diff --git a/src/bookmarks/bookmarkscontextmenu.h b/src/bookmarks/bookmarkscontextmenu.h deleted file mode 100644 index c927f3a6..00000000 --- a/src/bookmarks/bookmarkscontextmenu.h +++ /dev/null @@ -1,57 +0,0 @@ -/* ============================================================ -* -* 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 BOOKMARKS_CONTEXT_MENU_H -#define BOOKMARKS_CONTEXT_MENU_H - -// KDE Includes -#include <KBookmarkMenu> - -// Forward Declarations -class BookmarkOwner; - - -class BookmarksContextMenu : public KBookmarkContextMenu -{ -public: - BookmarksContextMenu(const KBookmark &bookmark, - KBookmarkManager *manager, - BookmarkOwner *owner, - bool nullForced = false, - QWidget *parent = 0); - virtual void addActions(); - -private: - void addFolderActions(); - void addBookmarkActions(); - void addSeparatorActions(); - void addNullActions(); - - BookmarkOwner *m_bmOwner; - bool m_nullForced; -}; - -#endif // BOOKMARKS_CONTEXT_MENU_H diff --git a/src/bookmarks/bookmarkspanel.cpp b/src/bookmarks/bookmarkspanel.cpp deleted file mode 100644 index 2b2a7ea9..00000000 --- a/src/bookmarks/bookmarkspanel.cpp +++ /dev/null @@ -1,169 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2009 by Nils Weigel <nehlsen at gmail dot com> -* Copyright (C) 2010-2012 by Andrea Diamantini <adjam7 at gmail dot com> -* 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/>. -* -* ============================================================ */ - - -// Self Includes -#include "bookmarkspanel.h" -#include "bookmarkspanel.moc" - -// Auto Includes -#include "rekonq.h" - -// Local Includes -#include "application.h" -#include "bookmarkmanager.h" -#include "bookmarkstreemodel.h" -#include "bookmarkscontextmenu.h" -#include "bookmarkowner.h" -#include "paneltreeview.h" -#include "urlfilterproxymodel.h" - - -BookmarksPanel::BookmarksPanel(const QString &title, QWidget *parent, Qt::WindowFlags flags) - : UrlPanel(title, parent, flags) - , _bkTreeModel(new BookmarksTreeModel(this)) - , _loadingState(false) -{ - setObjectName("bookmarksPanel"); - setVisible(ReKonfig::showBookmarksPanel()); - panelTreeView()->setDragEnabled(true); - panelTreeView()->setAcceptDrops(true); - connect(_bkTreeModel, SIGNAL(bookmarksUpdated()), this, SLOT(loadFoldedState())); -} - - -BookmarksPanel::~BookmarksPanel() -{ - ReKonfig::setShowBookmarksPanel(!isHidden()); -} - - -void BookmarksPanel::loadFoldedState() -{ - _loadingState = true; - loadFoldedState(QModelIndex()); - _loadingState = false; -} - - -void BookmarksPanel::contextMenu(const QPoint &pos) -{ - if (_loadingState) - return; - - BookmarksContextMenu menu(bookmarkForIndex(panelTreeView()->indexAt(pos)), - rApp->bookmarkManager()->manager(), - rApp->bookmarkManager()->owner() - ); - - menu.exec(panelTreeView()->mapToGlobal(pos)); -} - - -void BookmarksPanel::deleteBookmark() -{ - QModelIndex index = panelTreeView()->currentIndex(); - if (_loadingState || !index.isValid()) - return; - - rApp->bookmarkManager()->owner()->deleteBookmark(bookmarkForIndex(index)); -} - - -void BookmarksPanel::onCollapse(const QModelIndex &index) -{ - if (_loadingState) - return; - - bookmarkForIndex(index).internalElement().setAttribute("folded", "yes"); - emit expansionChanged(); -} - - -void BookmarksPanel::onExpand(const QModelIndex &index) -{ - if (_loadingState) - return; - - bookmarkForIndex(index).internalElement().setAttribute("folded", "no"); - emit expansionChanged(); -} - - -void BookmarksPanel::setup() -{ - UrlPanel::setup(); - - connect(panelTreeView(), SIGNAL(delKeyPressed()), this, SLOT(deleteBookmark())); - connect(panelTreeView(), SIGNAL(collapsed(QModelIndex)), this, SLOT(onCollapse(QModelIndex))); - connect(panelTreeView(), SIGNAL(expanded(QModelIndex)), this, SLOT(onExpand(QModelIndex))); - - loadFoldedState(); -} - - -void BookmarksPanel::loadFoldedState(const QModelIndex &root) -{ - QAbstractItemModel *model = panelTreeView()->model(); - if (!model) - return; - - int count = model->rowCount(root); - QModelIndex index; - - for (int i = 0; i < count; ++i) - { - index = model->index(i, 0, root); - if (index.isValid()) - { - KBookmark bm = bookmarkForIndex(index); - if (bm.isGroup()) - { - panelTreeView()->setExpanded(index, bm.toGroup().isOpen()); - loadFoldedState(index); - } - } - } -} - - -KBookmark BookmarksPanel::bookmarkForIndex(const QModelIndex &index) -{ - if (!index.isValid()) - return KBookmark(); - - const UrlFilterProxyModel *proxyModel = static_cast<const UrlFilterProxyModel*>(index.model()); - QModelIndex originalIndex = proxyModel->mapToSource(index); - - BtmItem *node = static_cast<BtmItem*>(originalIndex.internalPointer()); - return node->getBkm(); -} - - -QAbstractItemModel* BookmarksPanel::model() -{ - return _bkTreeModel; -} diff --git a/src/bookmarks/bookmarkspanel.h b/src/bookmarks/bookmarkspanel.h deleted file mode 100644 index 796b8315..00000000 --- a/src/bookmarks/bookmarkspanel.h +++ /dev/null @@ -1,93 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2009 by Nils Weigel <nehlsen at gmail dot com> -* Copyright (C) 2010-2012 by Andrea Diamantini <adjam7 at gmail dot com> -* 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 BOOKMARKSPANEL_H -#define BOOKMARKSPANEL_H - - -// Rekonq Includes -#include "rekonq_defines.h" - -// Local Includes -#include "urlpanel.h" - -// Forward Declarations -class BookmarksTreeModel; - -class KBookmark; -class QModelIndex; - - -class REKONQ_TESTS_EXPORT BookmarksPanel : public UrlPanel -{ - Q_OBJECT - -public: - explicit BookmarksPanel(const QString &title, QWidget *parent = 0, Qt::WindowFlags flags = 0); - ~BookmarksPanel(); - -public Q_SLOTS: - void loadFoldedState(); - -Q_SIGNALS: - void expansionChanged(); - -private Q_SLOTS: - void contextMenu(const QPoint &pos); - - virtual void contextMenuItem(const QPoint &pos) - { - contextMenu(pos); - } - virtual void contextMenuGroup(const QPoint &pos) - { - contextMenu(pos); - } - virtual void contextMenuEmpty(const QPoint &pos) - { - contextMenu(pos); - } - - void deleteBookmark(); - void onCollapse(const QModelIndex &index); - void onExpand(const QModelIndex &index); - -private: - virtual void setup(); - - void loadFoldedState(const QModelIndex &root); - - KBookmark bookmarkForIndex(const QModelIndex &index); - - virtual QAbstractItemModel* model(); - - BookmarksTreeModel *_bkTreeModel; - bool _loadingState; -}; - -#endif // BOOKMARKSPANEL_H diff --git a/src/bookmarks/bookmarkstoolbar.cpp b/src/bookmarks/bookmarkstoolbar.cpp deleted file mode 100644 index ad8af326..00000000 --- a/src/bookmarks/bookmarkstoolbar.cpp +++ /dev/null @@ -1,624 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2008-2012 by Andrea Diamantini <adjam7 at gmail dot com> -* 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/>. -* -* ============================================================ */ - - -// Self Includes -#include "bookmarkstoolbar.h" -#include "bookmarkstoolbar.moc" - -// Local Includes -#include "iconmanager.h" -#include "bookmarkscontextmenu.h" -#include "mainwindow.h" -#include "application.h" -#include "bookmarkmanager.h" -#include "bookmarkowner.h" -#include "webtab.h" - -// Qt Includes -#include <QtGui/QFrame> -#include <QtGui/QActionEvent> - - -BookmarkMenu::BookmarkMenu(KBookmarkManager *manager, - KBookmarkOwner *owner, - KMenu *menu, - KActionCollection* actionCollection) - : KBookmarkMenu(manager, owner, menu, actionCollection) -{ -} - - -BookmarkMenu::BookmarkMenu(KBookmarkManager *manager, - KBookmarkOwner *owner, - KMenu *parentMenu, - const QString &parentAddress) - : KBookmarkMenu(manager, owner, parentMenu, parentAddress) -{ -} - - -BookmarkMenu::~BookmarkMenu() -{ - kDebug() << "Deleting BookmarkMenu.. See http://svn.reviewboard.kde.org/r/5606/ about."; -} - - -KMenu * BookmarkMenu::contextMenu(QAction *act) -{ - KBookmarkActionInterface* action = dynamic_cast<KBookmarkActionInterface *>(act); - if (!action) - return 0; - return new BookmarksContextMenu(action->bookmark(), manager(), static_cast<BookmarkOwner*>(owner())); -} - - -QAction * BookmarkMenu::actionForBookmark(const KBookmark &bookmark) -{ - if (bookmark.isGroup()) - { - KBookmarkActionMenu *actionMenu = new KBookmarkActionMenu(bookmark, this); - BookmarkMenu *menu = new BookmarkMenu(manager(), owner(), actionMenu->menu(), bookmark.address()); - // An hack to get rid of bug 219274 - connect(actionMenu, SIGNAL(hovered()), menu, SLOT(slotAboutToShow())); - return actionMenu; - } - else if (bookmark.isSeparator()) - { - return KBookmarkMenu::actionForBookmark(bookmark); - } - else - { - KBookmarkAction *action = new KBookmarkAction(bookmark, owner(), this); - action->setIcon(rApp->iconManager()->iconForUrl(KUrl(bookmark.url()))); - connect(action, SIGNAL(hovered()), this, SLOT(actionHovered())); - return action; - } -} - - -void BookmarkMenu::refill() -{ - clear(); - fillBookmarks(); - - if (parentMenu()->actions().count() > 0) - parentMenu()->addSeparator(); - - if (isRoot()) - { - addAddBookmarksList(); - addEditBookmarks(); - } - else - { - addOpenFolderInTabs(); - addAddBookmarksList(); - } -} - - -void BookmarkMenu::addOpenFolderInTabs() -{ - KBookmarkGroup group = manager()->findByAddress(parentAddress()).toGroup(); - - if (!group.first().isNull()) - { - KBookmark bookmark = group.first(); - - while (bookmark.isGroup() || bookmark.isSeparator()) - { - bookmark = group.next(bookmark); - } - - if (!bookmark.isNull()) - { - parentMenu()->addAction(rApp->bookmarkManager()->owner()->createAction(group, BookmarkOwner::OPEN_FOLDER)); - } - } -} - - -void BookmarkMenu::actionHovered() -{ - KBookmarkActionInterface* action = dynamic_cast<KBookmarkActionInterface *>(sender()); - if (action) - rApp->mainWindow()->notifyMessage(action->bookmark().url().url()); -} - - -// ------------------------------------------------------------------------------------------------------ - - -BookmarkToolBar::BookmarkToolBar(KToolBar *toolBar, QObject *parent) - : QObject(parent) - , m_toolBar(toolBar) - , m_currentMenu(0) - , m_dragAction(0) - , m_dropAction(0) - , m_checkedAction(0) - , m_filled(false) -{ - toolBar->setContextMenuPolicy(Qt::CustomContextMenu); - connect(toolBar, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(contextMenu(QPoint))); - connect(rApp->bookmarkManager()->manager(), SIGNAL(changed(QString, QString)), this, SLOT(hideMenu())); - toolBar->setAcceptDrops(true); - toolBar->installEventFilter(this); - toolBar->setShortcutEnabled(false); - - if (toolBar->isVisible()) - { - rApp->bookmarkManager()->fillBookmarkBar(this); - m_filled = true; - } -} - - -KToolBar* BookmarkToolBar::toolBar() -{ - return m_toolBar; -} - - -void BookmarkToolBar::contextMenu(const QPoint &point) -{ - KBookmarkActionInterface *action = dynamic_cast<KBookmarkActionInterface*>(toolBar()->actionAt(point)); - KBookmark bookmark = rApp->bookmarkManager()->manager()->toolbar(); - bool nullAction = true; - if (action) - { - bookmark = action->bookmark(); - nullAction = false; - } - - BookmarksContextMenu menu(bookmark, - rApp->bookmarkManager()->manager(), - rApp->bookmarkManager()->owner(), - nullAction); - menu.exec(toolBar()->mapToGlobal(point)); -} - - -void BookmarkToolBar::menuDisplayed() -{ - qApp->installEventFilter(this); - m_currentMenu = qobject_cast<KMenu*>(sender()); -} - - -void BookmarkToolBar::menuHidden() -{ - qApp->removeEventFilter(this); - m_currentMenu = 0; -} - - -void BookmarkToolBar::hideMenu() -{ - if (m_currentMenu) - m_currentMenu->hide(); -} - - -bool BookmarkToolBar::eventFilter(QObject *watched, QEvent *event) -{ - if (m_currentMenu && m_currentMenu->isVisible() - && !m_currentMenu->rect().contains(m_currentMenu->mapFromGlobal(QCursor::pos()))) - { - // To switch root folders as in a menubar - - KBookmarkActionMenu* act = dynamic_cast<KBookmarkActionMenu *>(toolBar()->actionAt(toolBar()->mapFromGlobal(QCursor::pos()))); - - if (event->type() == QEvent::MouseMove && act && act->menu() != m_currentMenu) - { - m_currentMenu->hide(); - QPoint pos = toolBar()->mapToGlobal(toolBar()->widgetForAction(act)->pos()); - act->menu()->popup(QPoint(pos.x(), pos.y() + toolBar()->widgetForAction(act)->height())); - } - else if (event->type() == QEvent::MouseButtonPress && act) - { - m_currentMenu->hide(); - } - - return QObject::eventFilter(watched, event); - } - - switch (event->type()) - { - case QEvent::Show: - { - if (!m_filled) - { - rApp->bookmarkManager()->fillBookmarkBar(this); - m_filled = true; - } - } - break; - - case QEvent::ActionRemoved: - { - QActionEvent *actionEvent = static_cast<QActionEvent*>(event); - if (actionEvent && actionEvent->action() != m_dropAction) - { - QWidget *widget = toolBar()->widgetForAction(actionEvent->action()); - if (widget) - { - widget->removeEventFilter(this); - } - } - } - break; - - case QEvent::ParentChange: - { - QActionEvent *actionEvent = static_cast<QActionEvent*>(event); - if (actionEvent && actionEvent->action() != m_dropAction) - { - QWidget *widget = toolBar()->widgetForAction(actionEvent->action()); - if (widget) - { - widget->removeEventFilter(this); - } - } - } - break; - - case QEvent::DragEnter: - { - QDragEnterEvent *dragEvent = static_cast<QDragEnterEvent*>(event); - if (dragEvent->mimeData()->hasFormat(BookmarkManager::bookmark_mime_type()) - || dragEvent->mimeData()->hasFormat("text/uri-list") - || dragEvent->mimeData()->hasFormat("text/plain")) - { - QFrame* dropIndicatorWidget = new QFrame(toolBar()); - dropIndicatorWidget->setFrameShape(QFrame::VLine); - m_dropAction = toolBar()->insertWidget(toolBar()->actionAt(dragEvent->pos()), dropIndicatorWidget); - - dragEvent->accept(); - } - } - break; - - case QEvent::DragLeave: - { - QDragLeaveEvent *dragEvent = static_cast<QDragLeaveEvent*>(event); - - if (m_checkedAction) - { - m_checkedAction->setCheckable(false); - m_checkedAction->setChecked(false); - } - - delete m_dropAction; - m_dropAction = 0; - dragEvent->accept(); - } - break; - - case QEvent::DragMove: - { - QDragMoveEvent *dragEvent = static_cast<QDragMoveEvent*>(event); - if (dragEvent->mimeData()->hasFormat(BookmarkManager::bookmark_mime_type()) - || dragEvent->mimeData()->hasFormat("text/uri-list") - || dragEvent->mimeData()->hasFormat("text/plain")) - { - QAction *overAction = toolBar()->actionAt(dragEvent->pos()); - KBookmarkActionInterface *overActionBK = dynamic_cast<KBookmarkActionInterface*>(overAction); - QWidget *widgetAction = toolBar()->widgetForAction(overAction); - - if (overAction != m_dropAction && overActionBK && widgetAction && m_dropAction) - { - toolBar()->removeAction(m_dropAction); - if (m_checkedAction) - { - m_checkedAction->setCheckable(false); - m_checkedAction->setChecked(false); - } - - if (!overActionBK->bookmark().isGroup()) - { - if ((dragEvent->pos().x() - widgetAction->pos().x()) > (widgetAction->width() / 2)) - { - if (toolBar()->actions().count() > toolBar()->actions().indexOf(overAction) + 1) - { - toolBar()->insertAction(toolBar()->actions().at(toolBar()->actions().indexOf(overAction) + 1), m_dropAction); - } - else - { - toolBar()->addAction(m_dropAction); - } - } - else - { - toolBar()->insertAction(overAction, m_dropAction); - } - } - else - { - if ((dragEvent->pos().x() - widgetAction->pos().x()) >= (widgetAction->width() * 0.75)) - { - if (toolBar()->actions().count() > toolBar()->actions().indexOf(overAction) + 1) - { - toolBar()->insertAction(toolBar()->actions().at(toolBar()->actions().indexOf(overAction) + 1), m_dropAction); - } - else - { - toolBar()->addAction(m_dropAction); - } - } - else if ((dragEvent->pos().x() - widgetAction->pos().x()) <= (widgetAction->width() * 0.25)) - { - toolBar()->insertAction(overAction, m_dropAction); - } - else - { - overAction->setCheckable(true); - overAction->setChecked(true); - m_checkedAction = overAction; - } - } - - dragEvent->accept(); - } - } - } - break; - - - case QEvent::Drop: - { - QDropEvent *dropEvent = static_cast<QDropEvent*>(event); - KBookmark bookmark; - KBookmarkGroup root = rApp->bookmarkManager()->manager()->toolbar(); - - if (m_checkedAction) - { - m_checkedAction->setCheckable(false); - m_checkedAction->setChecked(false); - } - - if (dropEvent->mimeData()->hasFormat(BookmarkManager::bookmark_mime_type())) - { - QByteArray addresses = dropEvent->mimeData()->data(BookmarkManager::bookmark_mime_type()); - bookmark = rApp->bookmarkManager()->findByAddress(QString::fromLatin1(addresses.data())); - if (bookmark.isNull()) - return false; - } - else if (dropEvent->mimeData()->hasFormat("text/uri-list")) - { - // DROP is URL - QString url = dropEvent->mimeData()->urls().at(0).toString(); - QString title = url.contains(rApp->mainWindow()->currentTab()->url().url()) - ? rApp->mainWindow()->currentTab()->view()->title() - : url; - bookmark = root.addBookmark(title, url); - } - else if (dropEvent->mimeData()->hasFormat("text/plain")) - { - // DROP is TEXT - QString url = dropEvent->mimeData()->text(); - KUrl u(url); - if (u.isValid()) - { - QString title = url.contains(rApp->mainWindow()->currentTab()->url().url()) - ? rApp->mainWindow()->currentTab()->view()->title() - : url; - bookmark = root.addBookmark(title, url); - } - } - else - { - return false; - } - - QAction *destAction = toolBar()->actionAt(dropEvent->pos()); - if (destAction && destAction == m_dropAction) - { - if (toolBar()->actions().indexOf(m_dropAction) > 0) - { - destAction = toolBar()->actions().at(toolBar()->actions().indexOf(m_dropAction) - 1); - } - else - { - destAction = toolBar()->actions().at(1); - } - } - - if (destAction) - { - KBookmarkActionInterface *destBookmarkAction = dynamic_cast<KBookmarkActionInterface *>(destAction); - QWidget *widgetAction = toolBar()->widgetForAction(destAction); - - if (destBookmarkAction && !destBookmarkAction->bookmark().isNull() && widgetAction - && bookmark.address() != destBookmarkAction->bookmark().address()) - { - KBookmark destBookmark = destBookmarkAction->bookmark(); - - if (!destBookmark.isGroup()) - { - if ((dropEvent->pos().x() - widgetAction->pos().x()) >= (widgetAction->width() / 2)) - { - root.moveBookmark(bookmark, destBookmark); - } - else - { - root.moveBookmark(bookmark, destBookmark.parentGroup().previous(destBookmark)); - } - } - else - { - if ((dropEvent->pos().x() - widgetAction->pos().x()) >= (widgetAction->width() * 0.75)) - { - root.moveBookmark(bookmark, destBookmark); - } - else if ((dropEvent->pos().x() - widgetAction->pos().x()) <= (widgetAction->width() * 0.25)) - { - root.moveBookmark(bookmark, destBookmark.parentGroup().previous(destBookmark)); - } - else - { - destBookmark.toGroup().addBookmark(bookmark); - } - } - - - rApp->bookmarkManager()->emitChanged(); - } - } - else - { - root.deleteBookmark(bookmark); - bookmark = root.addBookmark(bookmark); - if (dropEvent->pos().x() < toolBar()->widgetForAction(toolBar()->actions().first())->pos().x()) - { - root.moveBookmark(bookmark, KBookmark()); - } - - rApp->bookmarkManager()->emitChanged(); - } - dropEvent->accept(); - } - break; - - default: - break; - } - - QMouseEvent *mouseEvent = static_cast<QMouseEvent *>(event); - - // These events need to be handled only for Bookmark actions and not the bar - if (watched != toolBar() && mouseEvent) - { - switch (event->type()) - { - case QEvent::MouseButtonPress: // drag handling - { - QPoint pos = toolBar()->mapFromGlobal(QCursor::pos()); - KBookmarkActionInterface *action = dynamic_cast<KBookmarkActionInterface *>(toolBar()->actionAt(pos)); - - if (action && mouseEvent->button() != Qt::MidButton) - { - m_dragAction = toolBar()->actionAt(pos); - m_startDragPos = pos; - - // The menu is displayed only when the mouse button is released - if (action->bookmark().isGroup()) - return true; - } - } - break; - - case QEvent::MouseMove: - { - int distance = (toolBar()->mapFromGlobal(QCursor::pos()) - m_startDragPos).manhattanLength(); - if (!m_currentMenu && distance >= QApplication::startDragDistance()) - { - startDrag(); - } - } - break; - - case QEvent::MouseButtonRelease: - { - QPoint destPos = toolBar()->mapFromGlobal(QCursor::pos()); - int distance = (destPos - m_startDragPos).manhattanLength(); - KBookmarkActionInterface *action = dynamic_cast<KBookmarkActionInterface *>(toolBar()->actionAt(destPos)); - - if (action && action->bookmark().isGroup()) - { - if (mouseEvent->button() == Qt::MidButton) - { - rApp->bookmarkManager()->owner()->openBookmarkFolder(action->bookmark()); - } - else if (distance < QApplication::startDragDistance()) - { - KBookmarkActionMenu *menu = dynamic_cast<KBookmarkActionMenu *>(toolBar()->actionAt(m_startDragPos)); - QPoint actionPos = toolBar()->mapToGlobal(toolBar()->widgetForAction(menu)->pos()); - menu->menu()->popup(QPoint(actionPos.x(), actionPos.y() + toolBar()->widgetForAction(menu)->height())); - } - } - } - break; - - default: - break; - } - } - - return QObject::eventFilter(watched, event); -} - - -void BookmarkToolBar::actionHovered() -{ - KBookmarkActionInterface* action = dynamic_cast<KBookmarkActionInterface *>(sender()); - if (action) - rApp->mainWindow()->notifyMessage(action->bookmark().url().url()); -} - - -void BookmarkToolBar::startDrag() -{ - KBookmarkActionInterface *action = dynamic_cast<KBookmarkActionInterface *>(m_dragAction); - if (action) - { - QMimeData *mimeData = new QMimeData; - KBookmark bookmark = action->bookmark(); - - QByteArray address = bookmark.address().toLatin1(); - mimeData->setData(BookmarkManager::bookmark_mime_type(), address); - bookmark.populateMimeData(mimeData); - - QDrag *drag = new QDrag(toolBar()); - drag->setMimeData(mimeData); - - if (bookmark.isGroup()) - { - drag->setPixmap(KIcon(bookmark.icon()).pixmap(24, 24)); - } - else - { - drag->setPixmap(rApp->iconManager()->iconForUrl(action->bookmark().url()).pixmap(24, 24)); - } - - drag->start(Qt::MoveAction); - connect(drag, SIGNAL(destroyed()), this, SLOT(dragDestroyed())); - } -} - - -void BookmarkToolBar::dragDestroyed() -{ - // A workaround to get rid of the checked state of the dragged action - if (m_dragAction) - { - m_dragAction->setVisible(false); - m_dragAction->setVisible(true); - m_dragAction = 0; - } - delete m_dropAction; - m_dropAction = 0; -} diff --git a/src/bookmarks/bookmarkstoolbar.h b/src/bookmarks/bookmarkstoolbar.h deleted file mode 100644 index b96085ee..00000000 --- a/src/bookmarks/bookmarkstoolbar.h +++ /dev/null @@ -1,115 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2008-2012 by Andrea Diamantini <adjam7 at gmail dot com> -* 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 BOOKMARKSTOOLBAR_H -#define BOOKMARKSTOOLBAR_H - - -// Rekonq Includes -#include "rekonq_defines.h" - -// KDE Includes -#include <KBookmarkMenu> - -/** - * This class represent the rekonq bookmarks menu. - * It's just a simple class inherited from KBookmarkMenu - * - */ -class BookmarkMenu : public KBookmarkMenu -{ - Q_OBJECT - -public: - BookmarkMenu(KBookmarkManager* manager, - KBookmarkOwner* owner, - KMenu* menu, - KActionCollection* actionCollection); - BookmarkMenu(KBookmarkManager *manager, - KBookmarkOwner *owner, - KMenu *parentMenu, - const QString &parentAddress); - ~BookmarkMenu(); - -protected: - virtual KMenu * contextMenu(QAction * act); - virtual void refill(); - virtual QAction* actionForBookmark(const KBookmark &bookmark); - -private Q_SLOTS: - void actionHovered(); - -private: - void addOpenFolderInTabs(); - -}; - - -// ------------------------------------------------------------------------------ - - -// KDE Includes -#include <KToolBar> - - -/** - * This class manage the bookmark toolbar. - * Some events from the toolbar are handled to allow the drag and drop - */ - -class BookmarkToolBar : public QObject -{ - Q_OBJECT - -public: - BookmarkToolBar(KToolBar *toolBar, QObject *parent); - - KToolBar* toolBar(); - -protected: - bool eventFilter(QObject *watched, QEvent *event); - -private Q_SLOTS: - void contextMenu(const QPoint &); - void actionHovered(); - void menuDisplayed(); - void menuHidden(); - void hideMenu(); - void dragDestroyed(); - -private: - void startDrag(); - - KToolBar *m_toolBar; - KMenu *m_currentMenu; - QPoint m_startDragPos; - QAction *m_dragAction; - QAction *m_dropAction; - QAction *m_checkedAction; - bool m_filled; -}; - -#endif // BOOKMARKSTOOLBAR_H diff --git a/src/bookmarks/bookmarkstreemodel.cpp b/src/bookmarks/bookmarkstreemodel.cpp deleted file mode 100644 index 9e54f010..00000000 --- a/src/bookmarks/bookmarkstreemodel.cpp +++ /dev/null @@ -1,407 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2009 by Nils Weigel <nehlsen at gmail dot com> -* Copyright (C) 2010-2012 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 "bookmarkstreemodel.h" -#include "bookmarkstreemodel.moc" - -// Local Includes -#include "application.h" -#include "bookmarkmanager.h" -#include "iconmanager.h" - -// KDE Includes -#include <KBookmarkManager> -#include <KLocalizedString> -#include <KIcon> - -// Qt Includes -#include <QtCore/QMimeData> - - -BtmItem::BtmItem(const KBookmark &bm) - : m_parent(0) - , m_kbm(bm) -{ -} - - -BtmItem::~BtmItem() -{ - qDeleteAll(m_children); -} - - -QVariant BtmItem::data(int role) const -{ - if (m_kbm.isNull()) - return QVariant(); // should only happen for root item - - if (role == Qt::DisplayRole) - return m_kbm.text(); - - if (role == Qt::DecorationRole) - { - // NOTE - // this should be: - // return KIcon(m_kbm.icon()); - // but I cannot let it work :( - // I really cannot understand how let this work properly... - if (m_kbm.isGroup() || m_kbm.isSeparator()) - return KIcon(m_kbm.icon()); - else - return rApp->iconManager()->iconForUrl(KUrl(m_kbm.url())); - } - - if (role == Qt::UserRole) - return m_kbm.url(); - - if (role == Qt::ToolTipRole) - { - QString tooltip = m_kbm.fullText(); - if (m_kbm.isGroup()) - tooltip += i18ncp("%1=Number of items in bookmark folder", " (1 item)", " (%1 items)", childCount()); - - QString url = m_kbm.url().url(); - if (!url.isEmpty()) - { - if (!tooltip.isEmpty()) - tooltip += '\n'; - tooltip += url; - } - - if (!m_kbm.description().isEmpty()) - { - if (!tooltip.isEmpty()) - tooltip += '\n'; - tooltip += m_kbm.description(); - } - - return tooltip; - } - - return QVariant(); -} - - -int BtmItem::row() const -{ - if (m_parent) - return m_parent->m_children.indexOf(const_cast< BtmItem* >(this)); - return 0; -} - - -int BtmItem::childCount() const -{ - return m_children.count(); -} - - -BtmItem* BtmItem::child(int n) -{ - Q_ASSERT(n >= 0); - Q_ASSERT(n < childCount()); - - return m_children.at(n); -} - - -BtmItem* BtmItem::parent() const -{ - return m_parent; -} - - -void BtmItem::appendChild(BtmItem *child) -{ - if (!child) - return; - - child->m_parent = this; - m_children << child; -} - - -void BtmItem::clear() -{ - qDeleteAll(m_children); - m_children.clear(); -} - -KBookmark BtmItem::getBkm() const -{ - return m_kbm; -} - - -// ------------------------------------------------------------------------------------- - - -BookmarksTreeModel::BookmarksTreeModel(QObject *parent) - : QAbstractItemModel(parent) - , m_root(0) -{ - resetModel(); - connect(rApp->bookmarkManager()->manager(), SIGNAL(changed(QString, QString)), - this, SLOT(bookmarksChanged(QString))); -} - - -BookmarksTreeModel::~BookmarksTreeModel() -{ - delete m_root; -} - - -int BookmarksTreeModel::rowCount(const QModelIndex &parent) const -{ - BtmItem *parentItem = 0; - if (!parent.isValid()) - { - parentItem = m_root; - } - else - { - parentItem = static_cast<BtmItem*>(parent.internalPointer()); - } - - return parentItem->childCount(); -} - - -int BookmarksTreeModel::columnCount(const QModelIndex& /*parent*/) const -{ - return 1; -} - - -Qt::ItemFlags BookmarksTreeModel::flags(const QModelIndex &index) const -{ - Qt::ItemFlags flags = QAbstractItemModel::flags(index); - - if (!index.isValid()) - return flags | Qt::ItemIsDropEnabled; - - flags = Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsDragEnabled; - - if (bookmarkForIndex(index).isGroup()) - flags |= Qt::ItemIsDropEnabled; - - return flags; -} - - -QModelIndex BookmarksTreeModel::index(int row, int column, const QModelIndex &parent) const -{ - if (!hasIndex(row, column, parent)) - return QModelIndex(); - - BtmItem *parentItem; - - if (!parent.isValid()) - parentItem = m_root; - else - parentItem = static_cast<BtmItem*>(parent.internalPointer()); - - BtmItem *childItem = parentItem->child(row); - if (childItem) - return createIndex(row, column, childItem); - - return QModelIndex(); -} - - -QModelIndex BookmarksTreeModel::parent(const QModelIndex &index) const -{ - if (!index.isValid()) - return QModelIndex(); - - BtmItem *childItem = static_cast<BtmItem*>(index.internalPointer()); - BtmItem *parentItem = childItem->parent(); - - if (parentItem == m_root) - return QModelIndex(); - - return createIndex(parentItem->row(), 0, parentItem); -} - - -QVariant BookmarksTreeModel::data(const QModelIndex &index, int role) const -{ - if (!index.isValid()) - return QVariant(); - - BtmItem *node = static_cast<BtmItem*>(index.internalPointer()); - if (node && node == m_root) - { - if (role == Qt::DisplayRole) - return i18n("Bookmarks"); - if (role == Qt::DecorationRole) - return KIcon("bookmarks"); - } - else - { - if (node) - return node->data(role); - } - - return QVariant(); -} - - -QStringList BookmarksTreeModel::mimeTypes() const -{ - return QStringList(BookmarkManager::bookmark_mime_type()); -} - - -bool BookmarksTreeModel::dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent) -{ - if (action != Qt::MoveAction || !data->hasFormat(BookmarkManager::bookmark_mime_type())) - return false; - - QByteArray addresses = data->data(BookmarkManager::bookmark_mime_type()); - KBookmark bookmark = rApp->bookmarkManager()->findByAddress(QString::fromLatin1(addresses.data())); - - KBookmarkGroup root; - if (parent.isValid()) - root = bookmarkForIndex(parent).toGroup(); - else - root = rApp->bookmarkManager()->rootGroup(); - - QModelIndex destIndex = index(row, column, parent); - - if (destIndex.isValid() && row != -1) - { - root.moveBookmark(bookmark, root.previous(bookmarkForIndex(destIndex))); - } - else - { - root.deleteBookmark(bookmark); - root.addBookmark(bookmark); - } - - rApp->bookmarkManager()->emitChanged(); - - return true; -} - - -Qt::DropActions BookmarksTreeModel::supportedDropActions() const -{ - return Qt::MoveAction; -} - - -QMimeData* BookmarksTreeModel::mimeData(const QModelIndexList &indexes) const -{ - QMimeData *mimeData = new QMimeData; - - QByteArray address = bookmarkForIndex(indexes.first()).address().toLatin1(); - mimeData->setData(BookmarkManager::bookmark_mime_type(), address); - bookmarkForIndex(indexes.first()).populateMimeData(mimeData); - - return mimeData; -} - - -void BookmarksTreeModel::bookmarksChanged(const QString &groupAddress) -{ - if (groupAddress.isEmpty()) - { - resetModel(); - } - else - { - beginResetModel(); - BtmItem *node = m_root; - QModelIndex nodeIndex; - - QStringList indexChain(groupAddress.split('/', QString::SkipEmptyParts)); - bool ok; - int i; - Q_FOREACH(const QString & sIndex, indexChain) - { - i = sIndex.toInt(&ok); - if (!ok) - break; - - if (i < 0 || i >= node->childCount()) - break; - - node = node->child(i); - nodeIndex = index(i, 0, nodeIndex); - } - populate(node, rApp->bookmarkManager()->findByAddress(groupAddress).toGroup()); - endResetModel(); - } - - emit bookmarksUpdated(); -} - - -void BookmarksTreeModel::resetModel() -{ - setRoot(rApp->bookmarkManager()->rootGroup()); -} - - -void BookmarksTreeModel::setRoot(KBookmarkGroup bmg) -{ - beginResetModel(); - delete m_root; - m_root = new BtmItem(KBookmark()); - populate(m_root, bmg); - endResetModel(); -} - - -void BookmarksTreeModel::populate(BtmItem *node, KBookmarkGroup bmg) -{ - node->clear(); - - if (bmg.isNull()) - return; - - KBookmark bm = bmg.first(); - while (!bm.isNull()) - { - BtmItem *newChild = new BtmItem(bm); - if (bm.isGroup()) - populate(newChild, bm.toGroup()); - - node->appendChild(newChild); - bm = bmg.next(bm); - } -} - - -KBookmark BookmarksTreeModel::bookmarkForIndex(const QModelIndex &index) const -{ - return static_cast<BtmItem*>(index.internalPointer())->getBkm(); -} diff --git a/src/bookmarks/bookmarkstreemodel.h b/src/bookmarks/bookmarkstreemodel.h deleted file mode 100644 index f433ccaf..00000000 --- a/src/bookmarks/bookmarkstreemodel.h +++ /dev/null @@ -1,116 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2009 by Nils Weigel <nehlsen at gmail dot com> -* Copyright (C) 2010-2012 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 BOOKMARKSTREEMODEL_H -#define BOOKMARKSTREEMODEL_H - - -// Rekonq Includes -#include "rekonq_defines.h" - -// KDE includes -#include <KBookmark> - -// Qt Includes -#include <QtCore/QAbstractItemModel> - - -class BtmItem -{ -public: - BtmItem(const KBookmark &bm); - ~BtmItem(); - - QVariant data(int role = Qt::DisplayRole) const; - int row() const; - int childCount() const; - BtmItem* child(int n); - BtmItem* parent() const; - void appendChild(BtmItem *child); - void clear(); - KBookmark getBkm() const; - -private: - BtmItem *m_parent; - QList< BtmItem* > m_children; - KBookmark m_kbm; -}; - - -// ------------------------------------------------------------------------------------------------- - - -class REKONQ_TESTS_EXPORT BookmarksTreeModel : public QAbstractItemModel -{ - Q_OBJECT - -public: - explicit BookmarksTreeModel(QObject *parent = 0); - virtual ~BookmarksTreeModel(); - - /** - * @return number of rows under the given parent. - */ - virtual int rowCount(const QModelIndex &parent = QModelIndex()) const; - /** - * @return number of columns (always 1). - */ - virtual int columnCount(const QModelIndex &parent = QModelIndex()) const; - - virtual Qt::ItemFlags flags(const QModelIndex &index) const; - - /** - * @return index in the model specified by the given row, column and parent. - */ - virtual QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const; - /** - * @return parent of the given index. - */ - virtual QModelIndex parent(const QModelIndex &index) const; - virtual QVariant data(const QModelIndex &index, int role) const; - - virtual QStringList mimeTypes() const; - virtual bool dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent); - virtual Qt::DropActions supportedDropActions() const; - virtual QMimeData *mimeData(const QModelIndexList &indexes) const; - -private Q_SLOTS: - void bookmarksChanged(const QString &groupAddress); - -Q_SIGNALS: - void bookmarksUpdated(); - -private: - void resetModel(); - void setRoot(KBookmarkGroup bmg); - void populate(BtmItem *node, KBookmarkGroup bmg); - KBookmark bookmarkForIndex(const QModelIndex &index) const; - - BtmItem *m_root; -}; - -#endif // BOOKMARKSTREEMODEL_H diff --git a/src/cleardata.ui b/src/cleardata.ui deleted file mode 100644 index 2ceb3354..00000000 --- a/src/cleardata.ui +++ /dev/null @@ -1,129 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<ui version="4.0"> - <class>ClearDataWidget</class> - <widget class="QWidget" name="ClearDataWidget"> - <property name="windowModality"> - <enum>Qt::WindowModal</enum> - </property> - <property name="geometry"> - <rect> - <x>0</x> - <y>0</y> - <width>245</width> - <height>226</height> - </rect> - </property> - <property name="windowTitle"> - <string comment="@title:window">Clear Private Data</string> - </property> - <layout class="QVBoxLayout" name="verticalLayout"> - <item> - <widget class="QLabel" name="label"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="text"> - <string><h3>Clear the following items:</h3></string> - </property> - </widget> - </item> - <item> - <spacer name="verticalSpacer_2"> - <property name="orientation"> - <enum>Qt::Vertical</enum> - </property> - <property name="sizeType"> - <enum>QSizePolicy::Fixed</enum> - </property> - <property name="sizeHint" stdset="0"> - <size> - <width>20</width> - <height>10</height> - </size> - </property> - </spacer> - </item> - <item> - <widget class="QCheckBox" name="clearHistory"> - <property name="text"> - <string>Visited pages history</string> - </property> - <property name="checked"> - <bool>true</bool> - </property> - </widget> - </item> - <item> - <widget class="QCheckBox" name="clearDownloads"> - <property name="text"> - <string>Downloads history</string> - </property> - <property name="checked"> - <bool>true</bool> - </property> - </widget> - </item> - <item> - <widget class="QCheckBox" name="clearCookies"> - <property name="text"> - <string>Cookies</string> - </property> - <property name="checked"> - <bool>true</bool> - </property> - </widget> - </item> - <item> - <widget class="QCheckBox" name="clearCachedPages"> - <property name="text"> - <string>Cached web pages</string> - </property> - <property name="checked"> - <bool>true</bool> - </property> - </widget> - </item> - <item> - <widget class="QCheckBox" name="clearWebIcons"> - <property name="text"> - <string>Website icons</string> - </property> - <property name="checked"> - <bool>true</bool> - </property> - </widget> - </item> - <item> - <widget class="QCheckBox" name="homePageThumbs"> - <property name="text"> - <string>Home page thumbs</string> - </property> - <property name="checked"> - <bool>true</bool> - </property> - </widget> - </item> - <item> - <spacer name="verticalSpacer"> - <property name="orientation"> - <enum>Qt::Vertical</enum> - </property> - <property name="sizeType"> - <enum>QSizePolicy::MinimumExpanding</enum> - </property> - <property name="sizeHint" stdset="0"> - <size> - <width>20</width> - <height>15</height> - </size> - </property> - </spacer> - </item> - </layout> - </widget> - <resources/> - <connections/> -</ui> diff --git a/src/clicktoflash.cpp b/src/clicktoflash.cpp deleted file mode 100644 index baa61367..00000000 --- a/src/clicktoflash.cpp +++ /dev/null @@ -1,135 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2009 by Benjamin C. Meyer <ben@meyerhome.net> -* Copyright (C) 2010-2011 by Matthieu Gicquel <matgic78@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) 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 "clicktoflash.h" -#include "clicktoflash.moc" - -// KDE Includes -#include <KLocalizedString> - -// Qt Includes -#include <QHBoxLayout> -#include <QToolButton> - -#include <QWebElement> -#include <QWebFrame> -#include <QWebView> - - -ClickToFlash::ClickToFlash(const QUrl &pluginUrl, QWidget *parent) - : QWidget(parent) - , m_url(pluginUrl) -{ - QHBoxLayout *l = new QHBoxLayout(this); - setLayout(l); - - QToolButton *button = new QToolButton(this); - button->setPopupMode(QToolButton::InstantPopup); - button->setToolButtonStyle(Qt::ToolButtonTextBesideIcon); - button->setText(i18n("Load Plugin")); - button->setAutoRaise(false); - layout()->addWidget(button); - connect(button, SIGNAL(clicked(bool)), this, SLOT(load())); -} - - -void ClickToFlash::load() -{ - QWidget *parent = parentWidget(); - QWebView *view = 0; - while (parent) - { - if (QWebView *aView = qobject_cast<QWebView*>(parent)) - { - view = aView; - break; - } - parent = parent->parentWidget(); - } - if (!view) - return; - - const QString selector = QL1S("%1[type=\"application/x-shockwave-flash\"]"); - - hide(); - - QList<QWebFrame*> frames; - frames.append(view->page()->mainFrame()); - while (!frames.isEmpty()) - { - QWebFrame *frame = frames.takeFirst(); - QWebElement docElement = frame->documentElement(); - - QWebElementCollection elements; - elements.append(docElement.findAll(selector.arg(QL1S("object")))); - elements.append(docElement.findAll(selector.arg(QL1S("embed")))); - - Q_FOREACH(QWebElement element, elements) - { - if (checkElement(element)) - { - QWebElement substitute = element.clone(); - emit signalLoadClickToFlash(true); - element.replace(substitute); - deleteLater(); - return; - } - } - frames += frame->childFrames(); - } -} - - -bool ClickToFlash::checkElement(QWebElement el) -{ - QString checkString; - QString urlString; - - checkString = QUrl(el.attribute("src")).toString(QUrl::RemoveQuery); - urlString = m_url.toString(QUrl::RemoveQuery); - - if (urlString.contains(checkString)) - return true; - - QWebElementCollection collec = el.findAll("*"); - int i = 0; - while (i < collec.count()) - { - QWebElement el = collec.at(i); - - checkString = QUrl(el.attribute("src")).toString(QUrl::RemoveQuery); - urlString = m_url.toString(QUrl::RemoveQuery); - - if (urlString.contains(checkString)) - return true; - - i++; - } - - return false; -} diff --git a/src/clicktoflash.h b/src/clicktoflash.h deleted file mode 100644 index fcafea59..00000000 --- a/src/clicktoflash.h +++ /dev/null @@ -1,65 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2009 by Benjamin C. Meyer <ben@meyerhome.net> -* Copyright (C) 2010-2011 by Matthieu Gicquel <matgic78@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) 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 CLICKTOFLASH_H -#define CLICKTOFLASH_H - - -// Rekonq Includes -#include "rekonq_defines.h" - -// Qt Includes -#include <QUrl> -#include <QWidget> - -// Forward Declarations -class QWebElement; - - -class REKONQ_TESTS_EXPORT ClickToFlash : public QWidget -{ - Q_OBJECT - -public: - explicit ClickToFlash(const QUrl &pluginUrl, QWidget *parent = 0); - -Q_SIGNALS: - void signalLoadClickToFlash(bool); - -private Q_SLOTS: - void load(); - -private: - bool checkElement(QWebElement el); - - /** - used to find the right QWebElement between the ones of the different plugins - */ - const QUrl m_url; -}; - -#endif // CLICKTOFLASH_H diff --git a/src/data/rekonq.desktop b/src/data/rekonq.desktop index 445ae302..27286810 100755 --- a/src/data/rekonq.desktop +++ b/src/data/rekonq.desktop @@ -1,31 +1,18 @@ [Desktop Entry] Name=Rekonq -Name[bg]=Rekonq -Name[ca]=Rekonq Name[cs]=Rekonq Name[da]=Rekonq Name[de]=Rekonq Name[el]=Rekonq -Name[es]=Rekonq Name[et]=Rekonq Name[fi]=Rekonq Name[fr]=Rekonq -Name[ga]=Rekonq -Name[gl]=Rekonq Name[hu]=Rekonq Name[km]=Rekonq -Name[lt]=Rekonq -Name[nb]=Rekonq Name[nl]=Rekonq Name[pt]=Rekonq Name[pt_BR]=Rekonq -Name[ru]=Rekonq Name[sk]=Rekonq -Name[sl]=Rekonq -Name[sr]=Реконк -Name[sr@ijekavian]=Реконк -Name[sr@ijekavianlatin]=Rekonq -Name[sr@latin]=Rekonq Name[sv]=Rekonq Name[uk]=Rekonq Name[x-test]=xxRekonqxx @@ -50,14 +37,12 @@ GenericName[ga]=Brabhsálaà Gréasáin GenericName[gl]=Navegador web GenericName[hu]=WebböngészÅ‘ GenericName[it]=Browser Web -GenericName[kk]=Веб браузеры GenericName[km]=កម្មវិធី​រុករក​បណ្ដាញ GenericName[ko]=웹 브ë¼ìš°ì € GenericName[lt]=Žiniatinklio narÅ¡yklÄ— GenericName[nb]=Nettleser GenericName[nds]=Nettkieker GenericName[nl]=Webbrowser -GenericName[pa]=ਵੈੱਬ ਬਰਾਊਜ਼ਰ GenericName[pl]=PrzeglÄ…darka internetowa GenericName[pt]=Navegador Web GenericName[pt_BR]=Navegador Web diff --git a/src/downloaditem.cpp b/src/downloaditem.cpp deleted file mode 100644 index 38edbf1e..00000000 --- a/src/downloaditem.cpp +++ /dev/null @@ -1,157 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2008-2012 by Andrea Diamantini <adjam7 at gmail dot com> -* Copyright (C) 2011 by Pierre Rossi <pierre dot rossi 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 "downloaditem.h" -#include "downloaditem.moc" - -// Qt Includes -#include <QDBusInterface> -#include <QTimer> - -// KDE Includes -#include <KIconLoader> -#include <KJob> -#include <KMimeType> -#include <KUrl> - - -DownloadItem::DownloadItem(const QString &srcUrl, const QString &destUrl, const QDateTime &d, QObject *parent) - : QObject(parent) - , m_srcUrlString(srcUrl) - , m_destUrl(KUrl(destUrl)) - , m_dateTime(d) - , m_job(0) - , m_state(0) -{ -} - - -DownloadItem::DownloadItem(KIO::CopyJob *job, const QDateTime &d, QObject *parent) - : QObject(parent) - , m_srcUrlString(job->srcUrls().at(0).url()) - , m_destUrl(job->destUrl()) - , m_dateTime(d) - , m_job(job) - , m_state(0) -{ - QObject::connect(job, SIGNAL(percent(KJob*, ulong)), this, SLOT(updateProgress(KJob*, ulong))); - QObject::connect(job, SIGNAL(finished(KJob*)), this, SLOT(onFinished(KJob*))); - QObject::connect(job, SIGNAL(suspended(KJob*)), this, SLOT(onSuspended(KJob*))); -} - - -KUrl DownloadItem::destUrl() const -{ - return m_destUrl; -} - - -QString DownloadItem::originUrl() const -{ - return m_srcUrlString; -} - - -QString DownloadItem::fileDirectory() const -{ - KUrl u = destUrl(); - return (QL1S("file://") + u.directory()); -} - - -QString DownloadItem::fileName() const -{ - return destUrl().fileName(); -} - - -QString DownloadItem::destinationUrlString() const -{ - return destUrl().url(KUrl::RemoveTrailingSlash); -} - - -QString DownloadItem::icon() const -{ - KIconLoader *loader = KIconLoader::global(); - QString iconForMimeType = KMimeType::iconNameForUrl(destUrl()); - return (QL1S("file://") + loader->iconPath(iconForMimeType, KIconLoader::Desktop)); -} - - -void DownloadItem::setIsKGetDownload() -{ - m_state = KGetManaged; -} - - -// update progress for the plain KIO::Job backend -void DownloadItem::updateProgress(KJob *job, unsigned long value) -{ - Q_UNUSED(job); - - if (value > 0 && value < 100) - m_state = Downloading; - - emit downloadProgress(value); -} - - -// emit downloadFinished signal in KJob case -void DownloadItem::onFinished(KJob *job) -{ - if (job->error()) - { - m_state = Errors; - m_errorString = job->errorString(); - } - else - { - m_state = Done; - emit downloadProgress(100); - } - - emit downloadFinished(!job->error()); -} - - -void DownloadItem::onSuspended(KJob *job) -{ - Q_UNUSED(job); - - m_state = Suspended; - - // TODO: - // connect to job->resume() to let rekonq resume it -} - - -QString DownloadItem::errorString() const -{ - return m_errorString; -} diff --git a/src/downloaditem.h b/src/downloaditem.h deleted file mode 100644 index 0b244c34..00000000 --- a/src/downloaditem.h +++ /dev/null @@ -1,117 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2008-2012 by Andrea Diamantini <adjam7 at gmail dot com> -* Copyright (C) 2011 by Pierre Rossi <pierre dot rossi 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 DOWNLOADITEM_H -#define DOWNLOADITEM_H - - -// Rekonq Includes -#include "rekonq_defines.h" - -// Qt Includes -#include <QDateTime> -#include <QObject> -#include <QString> - -// KDE Includes -#include <KLocalizedString> -#include <KUrl> -#include <KIO/CopyJob> - - -class DownloadItem : public QObject -{ - Q_OBJECT - -public: - - enum JobState - { - Done = 0, - Downloading = 1, - Errors = 2, - Suspended = 3, - KGetManaged = 4 - }; - - explicit DownloadItem(const QString &srcUrl, const QString &destUrl, const QDateTime &d, QObject *parent = 0); - - // This is used to add a DownloadItem managed with KIO - explicit DownloadItem(KIO::CopyJob *job, const QDateTime &d, QObject *parent = 0); - - - inline QDateTime dateTime() const - { - return m_dateTime; - } - - KUrl destUrl() const; - - QString originUrl() const; - QString destinationUrlString() const; - QString fileName() const; - QString fileDirectory() const; - QString icon() const; - QString errorString() const; - - inline int state() const - { - return m_state; - } - - void setIsKGetDownload(); - - -Q_SIGNALS: - void downloadProgress(int percent); - void downloadFinished(bool success); - -public Q_SLOTS: - void updateProgress(KJob *job, unsigned long value); - void onFinished(KJob *job); - void onSuspended(KJob*); - -private: - QString m_srcUrlString; - KUrl m_destUrl; - - QDateTime m_dateTime; - - KIO::CopyJob *m_job; - int m_state; - - QString m_errorString; -}; - - -Q_DECLARE_METATYPE(DownloadItem*) - - -typedef QList<DownloadItem*> DownloadList; - - -#endif //DOWNLAODITEM_H diff --git a/src/downloadmanager.cpp b/src/downloadmanager.cpp deleted file mode 100644 index 8070ed58..00000000 --- a/src/downloadmanager.cpp +++ /dev/null @@ -1,263 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2008-2012 by Andrea Diamantini <adjam7 at gmail dot com> -* Copyright (C) 2011 by Pierre Rossi <pierre dot rossi 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 "downloadmanager.h" -#include "downloadmanager.moc" - -// Auto Includes -#include "rekonq.h" - -// KDE Includes -#include <KStandardDirs> -#include <KToolInvocation> -#include <KFileDialog> - -#include <kio/scheduler.h> - -#include <KIO/Job> -#include <KIO/CopyJob> -#include <KIO/JobUiDelegate> - -// Qt Includes -#include <QDataStream> -#include <QDateTime> -#include <QFile> -#include <QFileInfo> -#include <QString> -#include <QWebSettings> -#include <QNetworkReply> - -#include <QDBusConnection> -#include <QDBusConnectionInterface> -#include <QDBusInterface> - - -DownloadManager::DownloadManager(QObject *parent) - : QObject(parent) - , m_needToSave(false) -{ - init(); -} - - -DownloadManager::~DownloadManager() -{ - if (!m_needToSave) - return; - - QString downloadFilePath = KStandardDirs::locateLocal("appdata" , "downloads"); - QFile downloadFile(downloadFilePath); - - if (!downloadFile.open(QFile::WriteOnly)) - { - kDebug() << "Unable to open download file (WRITE mode).."; - return; - } - - QDataStream out(&downloadFile); - Q_FOREACH(DownloadItem * item, m_downloadList) - { - out << item->originUrl(); - out << item->destinationUrlString(); - out << item->dateTime(); - } - - downloadFile.close(); -} - - -void DownloadManager::init() -{ - QString downloadFilePath = KStandardDirs::locateLocal("appdata" , "downloads"); - QFile downloadFile(downloadFilePath); - if (!downloadFile.open(QFile::ReadOnly)) - { - kDebug() << "Unable to open download file (READ mode).."; - return; - } - - QDataStream in(&downloadFile); - while (!in.atEnd()) - { - QString srcUrl; - in >> srcUrl; - QString destUrl; - in >> destUrl; - QDateTime dt; - in >> dt; - DownloadItem *item = new DownloadItem(srcUrl, destUrl, dt, this); - m_downloadList.append(item); - } -} - - -DownloadItem* DownloadManager::addDownload(KIO::CopyJob *job) -{ - QWebSettings *globalSettings = QWebSettings::globalSettings(); - if (globalSettings->testAttribute(QWebSettings::PrivateBrowsingEnabled)) - return 0; - - KIO::CopyJob *cJob = qobject_cast<KIO::CopyJob *>(job); - - QString downloadFilePath = KStandardDirs::locateLocal("appdata" , "downloads"); - QFile downloadFile(downloadFilePath); - if (!downloadFile.open(QFile::WriteOnly | QFile::Append)) - { - kDebug() << "Unable to open download file (WRITE mode).."; - return 0; - } - QDataStream out(&downloadFile); - out << cJob->srcUrls().at(0).url(); - out << cJob->destUrl().url(); - out << QDateTime::currentDateTime(); - downloadFile.close(); - DownloadItem *item = new DownloadItem(job, QDateTime::currentDateTime(), this); - m_downloadList.append(item); - emit newDownloadAdded(item); - return item; -} - - -DownloadItem* DownloadManager::addKGetDownload(const QString &srcUrl, const QString &destUrl) -{ - QWebSettings *globalSettings = QWebSettings::globalSettings(); - if (globalSettings->testAttribute(QWebSettings::PrivateBrowsingEnabled)) - return 0; - - QString downloadFilePath = KStandardDirs::locateLocal("appdata" , "downloads"); - QFile downloadFile(downloadFilePath); - if (!downloadFile.open(QFile::WriteOnly | QFile::Append)) - { - kDebug() << "Unable to open download file (WRITE mode).."; - return 0; - } - QDataStream out(&downloadFile); - out << srcUrl; - out << destUrl; - out << QDateTime::currentDateTime(); - downloadFile.close(); - DownloadItem *item = new DownloadItem(srcUrl, destUrl, QDateTime::currentDateTime(), this); - item->setIsKGetDownload(); - m_downloadList.append(item); - emit newDownloadAdded(item); - return item; -} - - -bool DownloadManager::clearDownloadsHistory() -{ - m_downloadList.clear(); - QString downloadFilePath = KStandardDirs::locateLocal("appdata" , "downloads"); - QFile downloadFile(downloadFilePath); - return downloadFile.remove(); -} - - -void DownloadManager::downloadLinksWithKGet(const QVariant &contentList) -{ - if (!QDBusConnection::sessionBus().interface()->isServiceRegistered("org.kde.kget")) - { - KToolInvocation::kdeinitExecWait("kget"); - } - QDBusInterface kget("org.kde.kget", "/KGet", "org.kde.kget.main"); - if (kget.isValid()) - { - kget.call("importLinks", contentList); - } -} - - -void DownloadManager::removeDownloadItem(int index) -{ - DownloadItem *item = m_downloadList.takeAt(index); - delete item; - - m_needToSave = true; -} - - -// NOTE -// These 2 functions have been copied from the KWebPage class to implement a local version of the downloadResponse method. -// In this way, we can easily provide the extra functionality we need: -// 1. KGet Integration -// 2. Save downloads history -bool DownloadManager::downloadResource(const KUrl &srcUrl, const KIO::MetaData &metaData, - QWidget *parent, bool forceDirRequest, const QString &suggestedName) -{ - KUrl destUrl; - - const QString fileName((suggestedName.isEmpty() ? srcUrl.fileName() : suggestedName)); - - if (forceDirRequest || ReKonfig::askDownloadPath()) - { - // follow bug:184202 fixes - destUrl = KFileDialog::getSaveFileName(KUrl::fromPath(fileName), QString(), parent); - } - else - { - destUrl = KUrl(ReKonfig::downloadPath().path() + QL1C('/') + fileName); - } - - kDebug() << "DEST URL: " << destUrl; - - if (!destUrl.isValid()) - return false; - - // manage downloads with KGet if found - if (ReKonfig::kgetDownload() && !KStandardDirs::findExe("kget").isNull()) - { - //KGet integration: - if (!QDBusConnection::sessionBus().interface()->isServiceRegistered("org.kde.kget")) - { - KToolInvocation::kdeinitExecWait("kget"); - } - QDBusInterface kget("org.kde.kget", "/KGet", "org.kde.kget.main"); - if (!kget.isValid()) - return false; - - QDBusMessage transfer = kget.call(QL1S("addTransfer"), srcUrl.prettyUrl(), destUrl.prettyUrl(), true); - - addKGetDownload(srcUrl.pathOrUrl(), destUrl.pathOrUrl()); - emit notifyDownload(fileName); - return true; - } - - KIO::CopyJob *job = KIO::copy(srcUrl, destUrl); - - if (!metaData.isEmpty()) - job->setMetaData(metaData); - - job->addMetaData(QL1S("MaxCacheSize"), QL1S("0")); // Don't store in http cache. - job->addMetaData(QL1S("cache"), QL1S("cache")); // Use entry from cache if available. - job->ui()->setWindow((parent ? parent->window() : 0)); - job->ui()->setAutoErrorHandlingEnabled(true); - - addDownload(job); - emit notifyDownload(fileName); - return true; -} diff --git a/src/downloadmanager.h b/src/downloadmanager.h deleted file mode 100644 index 4cbd5fd6..00000000 --- a/src/downloadmanager.h +++ /dev/null @@ -1,89 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2011 by Pierre Rossi <pierre dot rossi at gmail dot com> -* Copyright (C) 2012 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 DOWNLOADMANAGER_H -#define DOWNLOADMANAGER_H - - -// Rekonq Includes -#include "rekonq_defines.h" - -// Local Includes -#include "downloaditem.h" - -// KDE Includes -#include <kio/accessmanager.h> -#include <KIO/CopyJob> - -// Qt Includes -#include <QObject> -#include <QWidget> - -// Forward Includes -class KUrl; -class QNetworkReply; - - -class REKONQ_TESTS_EXPORT DownloadManager : public QObject -{ - Q_OBJECT - -public: - DownloadManager(QObject *parent = 0); - ~DownloadManager(); - - DownloadList downloads() const - { - return m_downloadList; - } - - bool clearDownloadsHistory(); - - bool downloadResource(const KUrl &url, const KIO::MetaData &metaData = KIO::MetaData(), - QWidget *parent = 0, bool forceDirRequest = false, const QString &suggestedName = QString()); - - void downloadLinksWithKGet(const QVariant &contentList); - - void removeDownloadItem(int index); - -private: - void init(); - - DownloadItem* addDownload(KIO::CopyJob *job); - DownloadItem* addKGetDownload(const QString &srcUrl, const QString &destUrl); - -Q_SIGNALS: - void newDownloadAdded(QObject *item); - void notifyDownload(const QString&, Rekonq::Notify = Rekonq::Download); - -private: - DownloadList m_downloadList; - - bool m_needToSave; -}; - -#endif // DOWNLOADMANAGER_H diff --git a/src/findbar.cpp b/src/findbar.cpp deleted file mode 100644 index d218340f..00000000 --- a/src/findbar.cpp +++ /dev/null @@ -1,212 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2008-2012 by Andrea Diamantini <adjam7 at gmail dot com> -* Copyright (C) 2009-2011 by Lionel Chauvin <megabigbug@yahoo.fr> -* -* -* 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 "findbar.h" -#include "findbar.moc" - -// Local Includes -#include "mainwindow.h" -#include "webtab.h" -#include "webpage.h" - -// KDE Includes -#include <KApplication> -#include <KIcon> -#include <KLineEdit> -#include <KLocalizedString> -#include <KPushButton> -#include <KColorScheme> - -// Qt Includes -#include <QTimer> - -#include <QCheckBox> -#include <QHBoxLayout> -#include <QKeyEvent> -#include <QLabel> -#include <QToolButton> - - -FindBar::FindBar(MainWindow *window) - : QWidget(window) - , m_mainWindow(window) - , m_lineEdit(new KLineEdit(this)) - , m_hideTimer(new QTimer(this)) - , m_matchCase(new QCheckBox(i18n("&Match case"), this)) - , m_highlightAll(new QCheckBox(i18n("&Highlight all"), this)) -{ - QHBoxLayout *layout = new QHBoxLayout; - - // cosmetic - layout->setContentsMargins(2, 0, 2, 0); - - // hide button - QToolButton *hideButton = new QToolButton(this); - hideButton->setAutoRaise(true); - hideButton->setIcon(KIcon("dialog-close")); - connect(hideButton, SIGNAL(clicked()), this, SLOT(hide())); - layout->addWidget(hideButton); - layout->setAlignment(hideButton, Qt::AlignLeft | Qt::AlignTop); - - // hide timer - connect(m_hideTimer, SIGNAL(timeout()), this, SLOT(hide())); - m_hideTimer->setSingleShot(true); - - // label - QLabel *label = new QLabel(i18n("Find:")); - layout->addWidget(label); - - // lineEdit, focusProxy - setFocusProxy(m_lineEdit); - m_lineEdit->setMaximumWidth(250); - connect(m_lineEdit, SIGNAL(textChanged(QString)), window, SLOT(find(QString))); - layout->addWidget(m_lineEdit); - - // buttons - KPushButton *findNext = new KPushButton(KIcon("go-down"), i18n("&Next"), this); - KPushButton *findPrev = new KPushButton(KIcon("go-up"), i18n("&Previous"), this); - connect(findNext, SIGNAL(clicked()), window, SLOT(findNext())); - connect(findPrev, SIGNAL(clicked()), window, SLOT(findPrevious())); - layout->addWidget(findNext); - layout->addWidget(findPrev); - - // Case sensitivity. Deliberately set so this is off by default. - m_matchCase->setCheckState(Qt::Unchecked); - m_matchCase->setTristate(false); - connect(m_matchCase, SIGNAL(toggled(bool)), window, SLOT(matchCaseUpdate())); - layout->addWidget(m_matchCase); - - // Hightlight All. On by default - m_highlightAll->setCheckState(Qt::Checked); - m_highlightAll->setTristate(false); - connect(m_highlightAll, SIGNAL(toggled(bool)), window, SLOT(updateHighlight())); - layout->addWidget(m_highlightAll); - - // stretching widget on the left - layout->addStretch(); - - setLayout(layout); - - // we start off hidden - hide(); -} - - -void FindBar::keyPressEvent(QKeyEvent *event) -{ - if (event->key() == Qt::Key_Return) - { - if (event->modifiers() == Qt::ShiftModifier) - { - m_mainWindow->findPrevious(); - } - else - { - m_mainWindow->findNext(); - } - } - QWidget::keyPressEvent(event); -} - - -bool FindBar::matchCase() const -{ - return m_matchCase->isChecked(); -} - - -bool FindBar::highlightAllState() const -{ - return m_highlightAll->isChecked(); -} - - -void FindBar::setVisible(bool visible) -{ - if (visible && m_mainWindow->currentTab()->page()->isOnRekonqPage() && m_mainWindow->currentTab()->part() != 0) - { - // findNext is the slot containing part integration code - m_mainWindow->findNext(); - return; - } - - QWidget::setVisible(visible); - - if (visible) - { - const QString selectedText = m_mainWindow->selectedText(); - if (!hasFocus() && !selectedText.isEmpty()) - { - const QString previousText = m_lineEdit->text(); - m_lineEdit->setText(selectedText); - - if (m_lineEdit->text() != previousText) - m_mainWindow->findPrevious(); - else - m_mainWindow->updateHighlight();; - } - else if (selectedText.isEmpty()) - { - emit searchString(m_lineEdit->text()); - } - - m_hideTimer->start(60000); - - m_lineEdit->setFocus(); - m_lineEdit->selectAll(); - } - else - { - m_mainWindow->updateHighlight();; - m_hideTimer->stop(); - } -} - -void FindBar::notifyMatch(bool match) -{ - QPalette p = m_lineEdit->palette(); - KColorScheme colorScheme(p.currentColorGroup()); - - if (m_lineEdit->text().isEmpty()) - { - p.setColor(QPalette::Base, colorScheme.background(KColorScheme::NormalBackground).color()); - } - else - { - if (match) - { - p.setColor(QPalette::Base, colorScheme.background(KColorScheme::PositiveBackground).color()); - } - else - { - p.setColor(QPalette::Base, colorScheme.background(KColorScheme::NegativeBackground).color()); // previous were 247, 230, 230 - } - } - m_lineEdit->setPalette(p); - m_hideTimer->start(60000); -} diff --git a/src/findbar.h b/src/findbar.h deleted file mode 100644 index 04a6bd15..00000000 --- a/src/findbar.h +++ /dev/null @@ -1,74 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2008-2012 by Andrea Diamantini <adjam7 at gmail dot com> -* Copyright (C) 2009-2011 by Lionel Chauvin <megabigbug@yahoo.fr> -* -* -* 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 FINDBAR_H -#define FINDBAR_H - - -// Rekonq Includes -#include "rekonq_defines.h" - -// Qt Includes -#include <QWidget> - -// Forward Declarations -class MainWindow; - -class KLineEdit; - -class QString; -class QCheckBox; - - -class REKONQ_TESTS_EXPORT FindBar : public QWidget -{ - Q_OBJECT - -public: - FindBar(MainWindow *parent); - - bool matchCase() const; - void notifyMatch(bool match); - bool highlightAllState() const; - - void setVisible(bool visible); - -protected: - void keyPressEvent(QKeyEvent *event); - -Q_SIGNALS: - void searchString(const QString &); - -private: - MainWindow *m_mainWindow; - KLineEdit *m_lineEdit; - QTimer *m_hideTimer; - QCheckBox *m_matchCase; - QCheckBox *m_highlightAll; -}; - -#endif diff --git a/src/history/autosaver.cpp b/src/history/autosaver.cpp deleted file mode 100644 index ee84e299..00000000 --- a/src/history/autosaver.cpp +++ /dev/null @@ -1,96 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2007-2008 Trolltech ASA. All rights reserved -* Copyright (C) 2008-2011 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 "autosaver.h" -#include "autosaver.moc" - -// Qt Includes -#include <QMetaObject> -#include <QTimerEvent> -#include <QBasicTimer> -#include <QTime> - - -const int AUTOSAVE_TIME = 1000 * 3; // seconds -const int MAX_TIME_LIMIT = 1000 * 15; // seconds - - -AutoSaver::AutoSaver(QObject *parent) - : QObject(parent) - , m_timer(new QBasicTimer) - , m_firstChange(new QTime) -{ -} - - -AutoSaver::~AutoSaver() -{ - if (m_timer->isActive()) - kDebug() << "AutoSaver: still active when destroyed, changes not saved."; - - delete m_firstChange; - delete m_timer; -} - - -void AutoSaver::saveIfNeccessary() -{ - if (m_timer->isActive()) - save(); -} - - -void AutoSaver::changeOccurred() -{ - if (m_firstChange->isNull()) - m_firstChange->start(); - - if (m_firstChange->elapsed() > MAX_TIME_LIMIT) - save(); - else - m_timer->start(AUTOSAVE_TIME, this); -} - - -void AutoSaver::timerEvent(QTimerEvent *event) -{ - if (event->timerId() == m_timer->timerId()) - save(); - else - QObject::timerEvent(event); -} - - -void AutoSaver::save() -{ - m_timer->stop(); - delete m_firstChange; - m_firstChange = new QTime; - - emit saveNeeded(); -} diff --git a/src/history/autosaver.h b/src/history/autosaver.h deleted file mode 100644 index 4c385ed6..00000000 --- a/src/history/autosaver.h +++ /dev/null @@ -1,75 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2007-2008 Trolltech ASA. All rights reserved -* Copyright (C) 2008-2011 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 AUTOSAVER_H -#define AUTOSAVER_H - - -// Rekonq Includes -#include "rekonq_defines.h" - -// Qt Includes -#include <QObject> - -// Forward Declarations -class QBasicTimer; - -/** - * This class emits the saveNeeded() signal. - * It will wait several seconds after changeOccurred() to combine - * multiple changes preventing continuous writing to disk. - */ -class REKONQ_TESTS_EXPORT AutoSaver : public QObject -{ - Q_OBJECT - -public: - explicit AutoSaver(QObject *parent); - virtual ~AutoSaver(); - - /** - * Emits the saveNeeded() signal if there's been any change since we last saved. - */ - void saveIfNeccessary(); - -Q_SIGNALS: - void saveNeeded(); - -public Q_SLOTS: - void changeOccurred(); - -protected: - virtual void timerEvent(QTimerEvent *event); - -private: - void save(); - - QBasicTimer *m_timer; - QTime *m_firstChange; -}; - -#endif // AUTOSAVER_H diff --git a/src/history/historymanager.cpp b/src/history/historymanager.cpp deleted file mode 100644 index 5acb180e..00000000 --- a/src/history/historymanager.cpp +++ /dev/null @@ -1,455 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2007-2008 Trolltech ASA. All rights reserved -* Copyright (C) 2008 Benjamin C. Meyer <ben@meyerhome.net> -* Copyright (C) 2008-2012 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 "historymanager.h" -#include "historymanager.moc" - -// Auto Includes -#include "rekonq.h" - -// Local Includes -#include "historymodels.h" -#include "autosaver.h" -#include "application.h" - -// KDE Includes -#include <KStandardDirs> -#include <KLocale> -#include <KCompletion> - -// Qt Includes -#include <QList> -#include <QUrl> -#include <QDate> -#include <QDateTime> -#include <QString> -#include <QFile> -#include <QDataStream> -#include <QBuffer> -#include <QTemporaryFile> -#include <QTimer> - -#include <QClipboard> - -// generic algorithms -#include <QtAlgorithms> - - -static const unsigned int HISTORY_VERSION = 25; - - -HistoryManager::HistoryManager(QObject *parent) - : QObject(parent) - , m_saveTimer(new AutoSaver(this)) - , m_historyLimit(0) - , m_historyTreeModel(0) -{ - connect(this, SIGNAL(entryAdded(HistoryItem)), m_saveTimer, SLOT(changeOccurred())); - connect(this, SIGNAL(entryRemoved(HistoryItem)), m_saveTimer, SLOT(changeOccurred())); - connect(m_saveTimer, SIGNAL(saveNeeded()), this, SLOT(save())); - - load(); - - HistoryModel *historyModel = new HistoryModel(this, this); - m_historyFilterModel = new HistoryFilterModel(historyModel, this); - m_historyTreeModel = new HistoryTreeModel(m_historyFilterModel, this); -} - - -HistoryManager::~HistoryManager() -{ - if (ReKonfig::expireHistory() == 4) - { - m_history.clear(); - save(); - return; - } - m_saveTimer->saveIfNeccessary(); -} - - -bool HistoryManager::historyContains(const QString &url) const -{ - return m_historyFilterModel->historyContains(url); -} - - -void HistoryManager::addHistoryEntry(const KUrl &url, const QString &title) -{ - if (ReKonfig::expireHistory() == 5) // DON'T STORE HISTORY! - return; - - QWebSettings *globalSettings = QWebSettings::globalSettings(); - if (globalSettings->testAttribute(QWebSettings::PrivateBrowsingEnabled)) - return; - - if (url.isEmpty()) - return; - - QUrl urlToClean(url); - - // don't store about: urls (home page related) - if (urlToClean.scheme() == QString("about")) - return; - - urlToClean.setPassword(QString()); - urlToClean.setHost(urlToClean.host().toLower()); - QString urlString = urlToClean.toString(); - - HistoryItem item; - - // NOTE - // check if the url has just been visited. - // if so, remove previous entry from history, update and prepend it - if (historyContains(urlString)) - { - int index = m_historyFilterModel->historyLocation(urlString); - item = m_history.at(index); - m_history.removeOne(item); - emit entryRemoved(item); - - item.lastDateTimeVisit = QDateTime::currentDateTime(); - item.visitCount++; - } - else - { - item = HistoryItem(urlString, QDateTime::currentDateTime(), title); - } - - m_history.prepend(item); - emit entryAdded(item); - - if (m_history.count() == 1) - checkForExpired(); -} - - -void HistoryManager::setHistory(const QList<HistoryItem> &history, bool loadedAndSorted) -{ - m_history = history; - - // verify that it is sorted by date - if (!loadedAndSorted) - qSort(m_history.begin(), m_history.end()); - - checkForExpired(); - - if (loadedAndSorted) - { - m_lastSavedUrl = m_history.value(0).url; - } - else - { - m_lastSavedUrl.clear(); - m_saveTimer->changeOccurred(); - } - - emit historyReset(); -} - - -void HistoryManager::checkForExpired() -{ - if (m_historyLimit < 0 || m_history.isEmpty()) - return; - - QDateTime now = QDateTime::currentDateTime(); - int nextTimeout = 0; - - while (!m_history.isEmpty()) - { - QDateTime checkForExpired = m_history.last().lastDateTimeVisit; - checkForExpired.setDate(checkForExpired.date().addDays(m_historyLimit)); - if (now.daysTo(checkForExpired) > 7) - { - // check at most in a week to prevent int overflows on the timer - nextTimeout = 7 * 86400; - } - else - { - nextTimeout = now.secsTo(checkForExpired); - } - if (nextTimeout > 0) - break; - HistoryItem item = m_history.takeLast(); - // remove from saved file also - m_lastSavedUrl.clear(); - emit entryRemoved(item); - } - - if (nextTimeout > 0) - QTimer::singleShot(nextTimeout * 1000, this, SLOT(checkForExpired())); -} - - -void HistoryManager::removeHistoryEntry(const KUrl &url, const QString &title) -{ - HistoryItem item; - for (int i = 0; i < m_history.count(); ++i) - { - if (url == m_history.at(i).url - && (title.isEmpty() || title == m_history.at(i).title)) - { - item = m_history.at(i); - m_lastSavedUrl.clear(); - m_history.removeOne(item); - emit entryRemoved(item); - break; - } - } -} - - -QList<HistoryItem> HistoryManager::find(const QString &text) -{ - QList<HistoryItem> list; - - QStringList urlKeys = m_historyFilterModel->keys(); - Q_FOREACH(const QString & url, urlKeys) - { - int index = m_historyFilterModel->historyLocation(url); - HistoryItem item = m_history.at(index); - - QStringList words = text.split(' '); - bool matches = true; - Q_FOREACH(const QString & word, words) - { - if (!url.contains(word, Qt::CaseInsensitive) - && !item.title.contains(word, Qt::CaseInsensitive)) - { - matches = false; - break; - } - } - if (matches) - list << item; - } - - return list; -} - - -void HistoryManager::clear() -{ - m_history.clear(); - m_lastSavedUrl.clear(); - m_saveTimer->changeOccurred(); - m_saveTimer->saveIfNeccessary(); - historyReset(); -} - - -void HistoryManager::loadSettings() -{ - int historyExpire = ReKonfig::expireHistory(); - int days; - switch (historyExpire) - { - case 1: - days = 90; - break; - case 2: - days = 30; - break; - case 3: - days = 1; - break; - case 0: - case 4: - case 5: - default: - days = -1; - break; - } - m_historyLimit = days; -} - - -void HistoryManager::load() -{ - loadSettings(); - - QString historyFilePath = KStandardDirs::locateLocal("appdata" , "history"); - QFile historyFile(historyFilePath); - if (!historyFile.exists()) - return; - if (!historyFile.open(QFile::ReadOnly)) - { - kDebug() << "Unable to open history file" << historyFile.fileName(); - return; - } - - QList<HistoryItem> list; - QDataStream in(&historyFile); - // Double check that the history file is sorted as it is read in - bool needToSort = false; - HistoryItem lastInsertedItem; - QByteArray data; - QDataStream stream; - QBuffer buffer; - stream.setDevice(&buffer); - while (!historyFile.atEnd()) - { - in >> data; - buffer.close(); - buffer.setBuffer(&data); - buffer.open(QIODevice::ReadOnly); - quint32 version; - stream >> version; - - HistoryItem item; - - switch (version) - { - case HISTORY_VERSION: // default case - stream >> item.url; - stream >> item.firstDateTimeVisit; - stream >> item.lastDateTimeVisit; - stream >> item.title; - stream >> item.visitCount; - break; - - case 24: // this was history structure for rekonq < 0.8 - stream >> item.url; - stream >> item.lastDateTimeVisit; - stream >> item.title; - stream >> item.visitCount; - item.firstDateTimeVisit = item.lastDateTimeVisit; - break; - - case 23: // this will be used to upgrade previous structure... - stream >> item.url; - stream >> item.lastDateTimeVisit; - stream >> item.title; - item.visitCount = 1; - item.firstDateTimeVisit = item.lastDateTimeVisit; - break; - - default: - continue; - }; - - if (!item.lastDateTimeVisit.isValid()) - continue; - - if (item == lastInsertedItem) - { - if (lastInsertedItem.title.isEmpty() && !list.isEmpty()) - list[0].title = item.title; - continue; - } - - if (!needToSort && !list.isEmpty() && lastInsertedItem < item) - needToSort = true; - - list.prepend(item); - lastInsertedItem = item; - } - if (needToSort) - qSort(list.begin(), list.end()); - - setHistory(list, true); - - // If we had to sort re-write the whole history sorted - if (needToSort) - { - m_lastSavedUrl.clear(); - m_saveTimer->changeOccurred(); - } -} - - -void HistoryManager::save() -{ - bool saveAll = m_lastSavedUrl.isEmpty(); - int first = m_history.count() - 1; - if (!saveAll) - { - // find the first one to save - for (int i = 0; i < m_history.count(); ++i) - { - if (m_history.at(i).url == m_lastSavedUrl) - { - first = i - 1; - break; - } - } - } - if (first == m_history.count() - 1) - saveAll = true; - - QString historyFilePath = KStandardDirs::locateLocal("appdata" , "history"); - QFile historyFile(historyFilePath); - - // When saving everything use a temporary file to prevent possible data loss. - QTemporaryFile tempFile; - tempFile.setAutoRemove(false); - bool open = false; - if (saveAll) - { - open = tempFile.open(); - } - else - { - open = historyFile.open(QFile::Append); - } - - if (!open) - { - kDebug() << "Unable to open history file for saving" - << (saveAll ? tempFile.fileName() : historyFile.fileName()); - return; - } - - QDataStream out(saveAll ? &tempFile : &historyFile); - for (int i = first; i >= 0; --i) - { - QByteArray data; - QDataStream stream(&data, QIODevice::WriteOnly); - HistoryItem item = m_history.at(i); - stream << HISTORY_VERSION << item.url << item.firstDateTimeVisit << item.lastDateTimeVisit << item.title << item.visitCount; - out << data; - } - tempFile.close(); - - if (saveAll) - { - if (historyFile.exists() && !historyFile.remove()) - { - kDebug() << "History: error removing old history." << historyFile.errorString(); - } - if (!tempFile.rename(historyFile.fileName())) - { - kDebug() << "History: error moving new history over old." << tempFile.errorString() << historyFile.fileName(); - } - } - m_lastSavedUrl = m_history.value(0).url; - - emit historySaved(); -} diff --git a/src/history/historymanager.h b/src/history/historymanager.h deleted file mode 100644 index 4e727400..00000000 --- a/src/history/historymanager.h +++ /dev/null @@ -1,206 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2007-2008 Trolltech ASA. All rights reserved -* Copyright (C) 2008 Benjamin C. Meyer <ben@meyerhome.net> -* Copyright (C) 2008-2012 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 HISTORY_H -#define HISTORY_H - - -// Rekonq Includes -#include "rekonq_defines.h" - -// KDE Includes -#include <KUrl> - -// Qt Includes -#include <QDateTime> -#include <QHash> -#include <QObject> -#include <QWebHistory> - -#include <math.h> - -// Forward Declarations -class AutoSaver; -class HistoryFilterModel; -class HistoryTreeModel; - -class QWebHistory; - - -/** - * Elements in this class represent an history item - * - */ -class HistoryItem -{ -public: - HistoryItem() : visitCount(1) - {} - - explicit HistoryItem(const QString &u, - const QDateTime &d = QDateTime(), - const QString &t = QString() - ) - : title(t) - , url(u) - , firstDateTimeVisit(d) - , lastDateTimeVisit(d) - , visitCount(1) - {} - - inline bool operator==(const HistoryItem &other) const - { - return other.title == title - && other.url == url - && other.firstDateTimeVisit == firstDateTimeVisit - && other.lastDateTimeVisit == lastDateTimeVisit; - } - - inline qreal relevance() const - { - return log(visitCount) - log(lastDateTimeVisit.daysTo(QDateTime::currentDateTime()) + 1); - } - - // history is sorted in reverse - inline bool operator <(const HistoryItem &other) const - { - return lastDateTimeVisit > other.lastDateTimeVisit; - } - - QString title; - QString url; - QDateTime firstDateTimeVisit; - QDateTime lastDateTimeVisit; - int visitCount; -}; - - -// --------------------------------------------------------------------------------------------------------------- - - -class TabHistory -{ -public: - explicit TabHistory(QWebHistory *h = 0) - { - if (h) - { - title = h->currentItem().title(); - url = h->currentItem().url().toString(); - QDataStream stream(&history, QIODevice::ReadWrite); - stream << *h; - } - } - - inline bool operator ==(const TabHistory &other) const - { - return history == other.history; - } - - void applyHistory(QWebHistory *h) - { - if (h) - { - QDataStream stream(&history, QIODevice::ReadOnly); - stream >> *h; - } - } - - QString title; - QString url; - QByteArray history; -}; - - -// --------------------------------------------------------------------------------------------------------------- - - -/** - * THE History Manager: - * It manages rekonq history - * - */ -class REKONQ_TESTS_EXPORT HistoryManager : public QObject -{ - Q_OBJECT - -public: - HistoryManager(QObject *parent = 0); - ~HistoryManager(); - - bool historyContains(const QString &url) const; - void addHistoryEntry(const KUrl &url, const QString &title); - void removeHistoryEntry(const KUrl &url, const QString &title = QString()); - - QList<HistoryItem> find(const QString &text); - - QList<HistoryItem> history() const - { - return m_history; - }; - void setHistory(const QList<HistoryItem> &history, bool loadedAndSorted = false); - - // History manager keeps around these models for use by the completer and other classes - HistoryFilterModel *historyFilterModel() const - { - return m_historyFilterModel; - }; - HistoryTreeModel *historyTreeModel() const - { - return m_historyTreeModel; - }; - -Q_SIGNALS: - void historyReset(); - void entryAdded(const HistoryItem &item); - void entryRemoved(const HistoryItem &item); - - void historySaved(); - -public Q_SLOTS: - void clear(); - void loadSettings(); - -private Q_SLOTS: - void save(); - void checkForExpired(); - -private: - void load(); - - AutoSaver *m_saveTimer; - int m_historyLimit; - QList<HistoryItem> m_history; - QString m_lastSavedUrl; - - HistoryFilterModel *m_historyFilterModel; - HistoryTreeModel *m_historyTreeModel; -}; - - -#endif // HISTORY_H diff --git a/src/history/historymodels.cpp b/src/history/historymodels.cpp deleted file mode 100644 index 93a7b941..00000000 --- a/src/history/historymodels.cpp +++ /dev/null @@ -1,744 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2007-2008 Trolltech ASA. All rights reserved -* Copyright (C) 2008 Benjamin C. Meyer <ben@meyerhome.net> -* Copyright (C) 2008-2012 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 "historymodels.h" -#include "historymodels.moc" - -// Auto Includes -#include "rekonq.h" - -// Local Includes -#include "application.h" -#include "historymanager.h" -#include "iconmanager.h" - -// KDE Includes -#include <KStandardDirs> -#include <KLocale> -#include <KIcon> - -// Qt Includes -#include <QList> -#include <QUrl> -#include <QDate> -#include <QDateTime> -#include <QString> -#include <QFile> -#include <QDataStream> -#include <QBuffer> - -#include <QClipboard> -#include <QFileInfo> - -// generic algorithms -#include <QtAlgorithms> - - -HistoryModel::HistoryModel(HistoryManager *history, QObject *parent) - : QAbstractTableModel(parent) - , m_historyManager(history) -{ - Q_ASSERT(m_historyManager); - connect(m_historyManager, SIGNAL(historyReset()), this, SLOT(historyReset())); - connect(m_historyManager, SIGNAL(entryRemoved(HistoryItem)), this, SLOT(historyReset())); - connect(m_historyManager, SIGNAL(entryAdded(HistoryItem)), this, SLOT(entryAdded())); -} - - -void HistoryModel::historyReset() -{ - reset(); -} - - -void HistoryModel::entryAdded() -{ - beginInsertRows(QModelIndex(), 0, 0); - endInsertRows(); -} - - -QVariant HistoryModel::headerData(int section, Qt::Orientation orientation, int role) const -{ - if (orientation == Qt::Horizontal - && role == Qt::DisplayRole) - { - switch (section) - { - case 0: return i18n("Title"); - case 1: return i18n("Address"); - } - } - return QAbstractTableModel::headerData(section, orientation, role); -} - - -QVariant HistoryModel::data(const QModelIndex &index, int role) const -{ - QList<HistoryItem> lst = m_historyManager->history(); - if (index.row() < 0 || index.row() >= lst.size()) - return QVariant(); - - const HistoryItem &item = lst.at(index.row()); - switch (role) - { - case DateTimeRole: - return item.lastDateTimeVisit; - case DateRole: - return item.lastDateTimeVisit.date(); - case FirstDateTimeVisitRole: - return item.firstDateTimeVisit; - case UrlRole: - return QUrl(item.url); - case Qt::UserRole: - return KUrl(item.url); - case UrlStringRole: - return item.url; - case Qt::DisplayRole: - case Qt::EditRole: - { - switch (index.column()) - { - case 0: - // when there is no title try to generate one from the url - if (item.title.isEmpty()) - { - QString page = QFileInfo(QUrl(item.url).path()).fileName(); - if (!page.isEmpty()) - return page; - return item.url; - } - return item.title; - case 1: - return item.url; - } - } - case Qt::DecorationRole: - if (index.column() == 0) - { - return rApp->iconManager()->iconForUrl(item.url); - } - case Qt::ToolTipRole: - QString tooltip = ""; - if (!item.title.isEmpty()) - tooltip = item.title + "<br/>"; - - QString lastVisit = item.firstDateTimeVisit.toString(Qt::SystemLocaleDate); - QString firstVisit = item.lastDateTimeVisit.toString(Qt::SystemLocaleDate); - int visitCount = item.visitCount; - tooltip += "<center> <b>" + item.url + "</b> </center>"; - tooltip += "<hr/>"; - tooltip += i18n("First Visit: ") + firstVisit + "<br/>"; - tooltip += i18n("Last Visit: ") + lastVisit + "<br/>"; - tooltip += i18n("Number of Visits: ") + QString::number(visitCount); - - return tooltip; - } - return QVariant(); -} - - -int HistoryModel::columnCount(const QModelIndex &parent) const -{ - return (parent.isValid()) ? 0 : 2; -} - - -int HistoryModel::rowCount(const QModelIndex &parent) const -{ - return (parent.isValid()) ? 0 : m_historyManager->history().count(); -} - - -bool HistoryModel::removeRows(int row, int count, const QModelIndex &parent) -{ - if (parent.isValid()) - return false; - int lastRow = row + count - 1; - beginRemoveRows(parent, row, lastRow); - QList<HistoryItem> lst = m_historyManager->history(); - for (int i = lastRow; i >= row; --i) - lst.removeAt(i); - disconnect(m_historyManager, SIGNAL(historyReset()), this, SLOT(historyReset())); - m_historyManager->setHistory(lst); - connect(m_historyManager, SIGNAL(historyReset()), this, SLOT(historyReset())); - endRemoveRows(); - return true; -} - - -// ------------------------------------------------------------------------------------------------------------------ - - -HistoryFilterModel::HistoryFilterModel(QAbstractItemModel *sourceModel, QObject *parent) - : QAbstractProxyModel(parent) - , m_loaded(false) -{ - setSourceModel(sourceModel); -} - - -int HistoryFilterModel::historyLocation(const QString &url) const -{ - load(); - if (!m_historyHash.contains(url)) - return 0; - return sourceModel()->rowCount() - m_historyHash.value(url); -} - - -QVariant HistoryFilterModel::data(const QModelIndex &index, int role) const -{ - return QAbstractProxyModel::data(index, role); -} - - -void HistoryFilterModel::setSourceModel(QAbstractItemModel *newSourceModel) -{ - if (sourceModel()) - { - disconnect(sourceModel(), SIGNAL(modelReset()), this, SLOT(sourceReset())); - disconnect(sourceModel(), SIGNAL(dataChanged(QModelIndex, QModelIndex)), - this, SLOT(dataChanged(QModelIndex, QModelIndex))); - disconnect(sourceModel(), SIGNAL(rowsInserted(QModelIndex, int, int)), - this, SLOT(sourceRowsInserted(QModelIndex, int, int))); - disconnect(sourceModel(), SIGNAL(rowsRemoved(QModelIndex, int, int)), - this, SLOT(sourceRowsRemoved(QModelIndex, int, int))); - } - - QAbstractProxyModel::setSourceModel(newSourceModel); - - if (sourceModel()) - { - m_loaded = false; - connect(sourceModel(), SIGNAL(modelReset()), this, SLOT(sourceReset())); - connect(sourceModel(), SIGNAL(dataChanged(QModelIndex, QModelIndex)), - this, SLOT(sourceDataChanged(QModelIndex, QModelIndex))); - connect(sourceModel(), SIGNAL(rowsInserted(QModelIndex, int, int)), - this, SLOT(sourceRowsInserted(QModelIndex, int, int))); - connect(sourceModel(), SIGNAL(rowsRemoved(QModelIndex, int, int)), - this, SLOT(sourceRowsRemoved(QModelIndex, int, int))); - } -} - - -void HistoryFilterModel::sourceDataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight) -{ - emit dataChanged(mapFromSource(topLeft), mapFromSource(bottomRight)); -} - - -QVariant HistoryFilterModel::headerData(int section, Qt::Orientation orientation, int role) const -{ - return sourceModel()->headerData(section, orientation, role); -} - - -void HistoryFilterModel::sourceReset() -{ - m_loaded = false; - reset(); -} - - -int HistoryFilterModel::rowCount(const QModelIndex &parent) const -{ - load(); - if (parent.isValid()) - return 0; - return m_historyHash.count(); -} - - -int HistoryFilterModel::columnCount(const QModelIndex &parent) const -{ - return (parent.isValid()) ? 0 : 2; -} - - -QModelIndex HistoryFilterModel::mapToSource(const QModelIndex &proxyIndex) const -{ - load(); - int sourceRow = sourceModel()->rowCount() - proxyIndex.internalId(); - return sourceModel()->index(sourceRow, proxyIndex.column()); -} - - -QModelIndex HistoryFilterModel::mapFromSource(const QModelIndex &sourceIndex) const -{ - load(); - QString url = sourceIndex.data(HistoryModel::UrlStringRole).toString(); - if (!m_historyHash.contains(url)) - return QModelIndex(); - - // This can be done in a binary search, but we can't use qBinary find - // because it can't take: qBinaryFind(m_sourceRow.end(), m_sourceRow.begin(), v); - // so if this is a performance bottlneck then convert to binary search, until then - // the cleaner/easier to read code wins the day. - int realRow = -1; - int sourceModelRow = sourceModel()->rowCount() - sourceIndex.row(); - - for (int i = 0; i < m_sourceRow.count(); ++i) - { - if (m_sourceRow.at(i) == sourceModelRow) - { - realRow = i; - break; - } - } - if (realRow == -1) - return QModelIndex(); - - return createIndex(realRow, sourceIndex.column(), sourceModel()->rowCount() - sourceIndex.row()); -} - - -QModelIndex HistoryFilterModel::index(int row, int column, const QModelIndex &parent) const -{ - load(); - if (row < 0 || row >= rowCount(parent) - || column < 0 || column >= columnCount(parent)) - return QModelIndex(); - - return createIndex(row, column, m_sourceRow[row]); -} - - -QModelIndex HistoryFilterModel::parent(const QModelIndex &) const -{ - return QModelIndex(); -} - - -void HistoryFilterModel::load() const -{ - if (m_loaded) - return; - m_sourceRow.clear(); - m_historyHash.clear(); - m_historyHash.reserve(sourceModel()->rowCount()); - for (int i = 0; i < sourceModel()->rowCount(); ++i) - { - QModelIndex idx = sourceModel()->index(i, 0); - QString url = idx.data(HistoryModel::UrlStringRole).toString(); - if (!m_historyHash.contains(url)) - { - m_sourceRow.append(sourceModel()->rowCount() - i); - m_historyHash[url] = sourceModel()->rowCount() - i; - } - } - m_loaded = true; -} - - -void HistoryFilterModel::sourceRowsInserted(const QModelIndex &parent, int start, int end) -{ - Q_UNUSED(end); - - if (start != 0) - { - kDebug() << "STARTING from a NON zero position..."; - return; - } - - if (!m_loaded) - return; - - QModelIndex idx = sourceModel()->index(start, 0, parent); - QString url = idx.data(HistoryModel::UrlStringRole).toString(); - if (m_historyHash.contains(url)) - { - int sourceRow = sourceModel()->rowCount() - m_historyHash[url]; - int realRow = mapFromSource(sourceModel()->index(sourceRow, 0)).row(); - beginRemoveRows(QModelIndex(), realRow, realRow); - m_sourceRow.removeAt(realRow); - m_historyHash.remove(url); - endRemoveRows(); - } - beginInsertRows(QModelIndex(), 0, 0); - m_historyHash.insert(url, sourceModel()->rowCount() - start); - m_sourceRow.insert(0, sourceModel()->rowCount()); - endInsertRows(); -} - - -void HistoryFilterModel::sourceRowsRemoved(const QModelIndex &, int start, int end) -{ - Q_UNUSED(start); - Q_UNUSED(end); - sourceReset(); -} - - -/* - Removing a continuous block of rows will remove filtered rows too as this is - the users intention. -*/ -bool HistoryFilterModel::removeRows(int row, int count, const QModelIndex &parent) -{ - if (row < 0 || count <= 0 || row + count > rowCount(parent) || parent.isValid()) - return false; - int lastRow = row + count - 1; - disconnect(sourceModel(), SIGNAL(rowsRemoved(QModelIndex, int, int)), - this, SLOT(sourceRowsRemoved(QModelIndex, int, int))); - beginRemoveRows(parent, row, lastRow); - int oldCount = rowCount(); - int start = sourceModel()->rowCount() - m_sourceRow.value(row); - int end = sourceModel()->rowCount() - m_sourceRow.value(lastRow); - sourceModel()->removeRows(start, end - start + 1); - endRemoveRows(); - connect(sourceModel(), SIGNAL(rowsRemoved(QModelIndex, int, int)), - this, SLOT(sourceRowsRemoved(QModelIndex, int, int))); - m_loaded = false; - if (oldCount - count != rowCount()) - reset(); - return true; -} - - -// ---------------------------------------------------------------------------------------------------------- - - -HistoryTreeModel::HistoryTreeModel(QAbstractItemModel *sourceModel, QObject *parent) - : QAbstractProxyModel(parent) -{ - setSourceModel(sourceModel); -} - - -QVariant HistoryTreeModel::headerData(int section, Qt::Orientation orientation, int role) const -{ - return sourceModel()->headerData(section, orientation, role); -} - - -QVariant HistoryTreeModel::data(const QModelIndex &index, int role) const -{ - if (role == Qt::EditRole || role == Qt::DisplayRole) - { - int start = index.internalId(); - if (start == 0) - { - int offset = sourceDateRow(index.row()); - if (index.column() == 0) - { - QModelIndex idx = sourceModel()->index(offset, 0); - QDate date = idx.data(HistoryModel::DateRole).toDate(); - if (date == QDate::currentDate()) - return i18n("Earlier Today"); - return date.toString(QL1S("dddd, MMMM d, yyyy")); - } - if (index.column() == 1) - { - return i18np("1 item", "%1 items", rowCount(index.sibling(index.row(), 0))); - } - } - } - - if (role == Qt::DecorationRole && index.column() == 0 && !index.parent().isValid()) - return KIcon("view-history"); - - if (role == HistoryModel::DateRole && index.column() == 0 && index.internalId() == 0) - { - int offset = sourceDateRow(index.row()); - QModelIndex idx = sourceModel()->index(offset, 0); - return idx.data(HistoryModel::DateRole); - } - - if (role == HistoryModel::FirstDateTimeVisitRole && index.column() == 0 && index.internalId() == 0) - { - int offset = sourceDateRow(index.row()); - QModelIndex idx = sourceModel()->index(offset, 0); - return idx.data(HistoryModel::FirstDateTimeVisitRole); - } - - return QAbstractProxyModel::data(index, role); -} - - -int HistoryTreeModel::columnCount(const QModelIndex &parent) const -{ - return sourceModel()->columnCount(mapToSource(parent)); -} - - -int HistoryTreeModel::rowCount(const QModelIndex &parent) const -{ - if (parent.internalId() != 0 - || parent.column() > 0 - || !sourceModel()) - return 0; - - // row count OF dates - if (!parent.isValid()) - { - if (!m_sourceRowCache.isEmpty()) - return m_sourceRowCache.count(); - QDate currentDate; - int rows = 0; - int totalRows = sourceModel()->rowCount(); - - for (int i = 0; i < totalRows; ++i) - { - QDate rowDate = sourceModel()->index(i, 0).data(HistoryModel::DateRole).toDate(); - if (rowDate != currentDate) - { - m_sourceRowCache.append(i); - currentDate = rowDate; - ++rows; - } - } - Q_ASSERT(m_sourceRowCache.count() == rows); - return rows; - } - - // row count FOR a date - int start = sourceDateRow(parent.row()); - int end = sourceDateRow(parent.row() + 1); - return (end - start); -} - - -// Translate the top level date row into the offset where that date starts -int HistoryTreeModel::sourceDateRow(int row) const -{ - if (row <= 0) - return 0; - - if (m_sourceRowCache.isEmpty()) - rowCount(QModelIndex()); - - if (row >= m_sourceRowCache.count()) - { - if (!sourceModel()) - return 0; - return sourceModel()->rowCount(); - } - return m_sourceRowCache.at(row); -} - - -QModelIndex HistoryTreeModel::mapToSource(const QModelIndex &proxyIndex) const -{ - int offset = proxyIndex.internalId(); - if (offset == 0) - return QModelIndex(); - int startDateRow = sourceDateRow(offset - 1); - return sourceModel()->index(startDateRow + proxyIndex.row(), proxyIndex.column()); -} - - -QModelIndex HistoryTreeModel::index(int row, int column, const QModelIndex &parent) const -{ - if (row < 0 - || column < 0 || column >= columnCount(parent) - || parent.column() > 0) - return QModelIndex(); - - if (!parent.isValid()) - return createIndex(row, column, 0); - return createIndex(row, column, parent.row() + 1); -} - - -QModelIndex HistoryTreeModel::parent(const QModelIndex &index) const -{ - int offset = index.internalId(); - if (offset == 0 || !index.isValid()) - return QModelIndex(); - return createIndex(offset - 1, 0, 0); -} - - -bool HistoryTreeModel::hasChildren(const QModelIndex &parent) const -{ - QModelIndex grandparent = parent.parent(); - if (!grandparent.isValid()) - return true; - return false; -} - - -Qt::ItemFlags HistoryTreeModel::flags(const QModelIndex &index) const -{ - if (!index.isValid()) - return Qt::NoItemFlags; - return Qt::ItemIsSelectable | Qt::ItemIsEnabled | Qt::ItemIsDragEnabled; -} - - -bool HistoryTreeModel::removeRows(int row, int count, const QModelIndex &parent) -{ - if (row < 0 || count <= 0 || row + count > rowCount(parent)) - return false; - - if (parent.isValid()) - { - // removing pages - int offset = sourceDateRow(parent.row()); - return sourceModel()->removeRows(offset + row, count); - } - else - { - // removing whole dates - for (int i = row + count - 1; i >= row; --i) - { - QModelIndex dateParent = index(i, 0); - int offset = sourceDateRow(dateParent.row()); - if (!sourceModel()->removeRows(offset, rowCount(dateParent))) - return false; - } - } - return true; -} - - -void HistoryTreeModel::setSourceModel(QAbstractItemModel *newSourceModel) -{ - if (sourceModel()) - { - disconnect(sourceModel(), SIGNAL(modelReset()), this, SLOT(sourceReset())); - disconnect(sourceModel(), SIGNAL(layoutChanged()), this, SLOT(sourceReset())); - disconnect(sourceModel(), SIGNAL(rowsInserted(QModelIndex, int, int)), - this, SLOT(sourceRowsInserted(QModelIndex, int, int))); - disconnect(sourceModel(), SIGNAL(rowsRemoved(QModelIndex, int, int)), - this, SLOT(sourceRowsRemoved(QModelIndex, int, int))); - } - - QAbstractProxyModel::setSourceModel(newSourceModel); - - if (newSourceModel) - { - connect(sourceModel(), SIGNAL(modelReset()), this, SLOT(sourceReset())); - connect(sourceModel(), SIGNAL(layoutChanged()), this, SLOT(sourceReset())); - connect(sourceModel(), SIGNAL(rowsInserted(QModelIndex, int, int)), - this, SLOT(sourceRowsInserted(QModelIndex, int, int))); - connect(sourceModel(), SIGNAL(rowsRemoved(QModelIndex, int, int)), - this, SLOT(sourceRowsRemoved(QModelIndex, int, int))); - } - - reset(); -} - - -void HistoryTreeModel::sourceReset() -{ - m_sourceRowCache.clear(); - reset(); -} - - -void HistoryTreeModel::sourceRowsInserted(const QModelIndex &parent, int start, int end) -{ - Q_UNUSED(parent); // Avoid warnings when compiling release - Q_ASSERT(!parent.isValid()); - if (start != 0 || start != end) - { - m_sourceRowCache.clear(); - reset(); - return; - } - - m_sourceRowCache.clear(); - QModelIndex treeIndex = mapFromSource(sourceModel()->index(start, 0)); - QModelIndex treeParent = treeIndex.parent(); - if (rowCount(treeParent) == 1) - { - beginInsertRows(QModelIndex(), 0, 0); - endInsertRows(); - } - else - { - beginInsertRows(treeParent, treeIndex.row(), treeIndex.row()); - endInsertRows(); - } -} - - -QModelIndex HistoryTreeModel::mapFromSource(const QModelIndex &sourceIndex) const -{ - if (!sourceIndex.isValid()) - return QModelIndex(); - - if (m_sourceRowCache.isEmpty()) - rowCount(QModelIndex()); - - QList<int>::iterator it; - it = qLowerBound(m_sourceRowCache.begin(), m_sourceRowCache.end(), sourceIndex.row()); - if (*it != sourceIndex.row()) - --it; - - int dateRow = qMax(0, it - m_sourceRowCache.begin()); - int row = sourceIndex.row() - m_sourceRowCache.at(dateRow); - return createIndex(row, sourceIndex.column(), dateRow + 1); -} - - -void HistoryTreeModel::sourceRowsRemoved(const QModelIndex &parent, int start, int end) -{ - Q_UNUSED(parent); // Avoid warnings when compiling release - Q_ASSERT(!parent.isValid()); - if (m_sourceRowCache.isEmpty()) - return; - for (int i = end; i >= start;) - { - QList<int>::iterator it; - it = qLowerBound(m_sourceRowCache.begin(), m_sourceRowCache.end(), i); - // playing it safe - if (it == m_sourceRowCache.end()) - { - m_sourceRowCache.clear(); - reset(); - return; - } - - if (*it != i) - --it; - int row = qMax(0, it - m_sourceRowCache.begin()); - int offset = m_sourceRowCache[row]; - QModelIndex dateParent = index(row, 0); - // If we can remove all the rows in the date do that and skip over them - int rc = rowCount(dateParent); - if (i - rc + 1 == offset && start <= i - rc + 1) - { - beginRemoveRows(QModelIndex(), row, row); - m_sourceRowCache.removeAt(row); - i -= rc + 1; - } - else - { - beginRemoveRows(dateParent, i - offset, i - offset); - ++row; - --i; - } - for (int j = row; j < m_sourceRowCache.count(); ++j) - --m_sourceRowCache[j]; - endRemoveRows(); - } -} diff --git a/src/history/historymodels.h b/src/history/historymodels.h deleted file mode 100644 index d8f20818..00000000 --- a/src/history/historymodels.h +++ /dev/null @@ -1,179 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2007-2008 Trolltech ASA. All rights reserved -* Copyright (C) 2008 Benjamin C. Meyer <ben@meyerhome.net> -* Copyright (C) 2008-2012 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 HISTORYMODELS_H -#define HISTORYMODELS_H - - -// Rekonq Includes -#include "rekonq_defines.h" - -// KDE Includes -#include <KUrl> - -// Qt Includes -#include <QHash> -#include <QAbstractTableModel> -#include <QAbstractProxyModel> - -// Forward Declarations -class HistoryManager; - - -class REKONQ_TESTS_EXPORT HistoryModel : public QAbstractTableModel -{ - Q_OBJECT - -public: - enum Roles - { - DateRole = Qt::UserRole + 1, - DateTimeRole = Qt::UserRole + 2, - UrlRole = Qt::UserRole + 3, - UrlStringRole = Qt::UserRole + 4, - FirstDateTimeVisitRole = Qt::UserRole + 5 - }; - - explicit HistoryModel(HistoryManager *history, QObject *parent = 0); - -public Q_SLOTS: - void historyReset(); - void entryAdded(); - -public: - QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const; - QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const; - int columnCount(const QModelIndex &parent = QModelIndex()) const; - int rowCount(const QModelIndex &parent = QModelIndex()) const; - bool removeRows(int row, int count, const QModelIndex &parent = QModelIndex()); - -private: - HistoryManager *m_historyManager; -}; - - -// ---------------------------------------------------------------------------------------------------- - - -/** - * Proxy model that will remove any duplicate entries. - * Both m_sourceRow and m_historyHash store their offsets not from - * the front of the list, but as offsets from the back. - * - */ -class REKONQ_TESTS_EXPORT HistoryFilterModel : public QAbstractProxyModel -{ - Q_OBJECT - -public: - explicit HistoryFilterModel(QAbstractItemModel *sourceModel, QObject *parent = 0); - - inline bool historyContains(const QString &url) const - { - load(); - return m_historyHash.contains(url); - } - - inline QList<QString> keys() const - { - load(); - return m_historyHash.keys(); - } - - int historyLocation(const QString &url) const; - - QModelIndex mapFromSource(const QModelIndex &sourceIndex) const; - QModelIndex mapToSource(const QModelIndex &proxyIndex) const; - void setSourceModel(QAbstractItemModel *sourceModel); - QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const; - int rowCount(const QModelIndex &parent = QModelIndex()) const; - int columnCount(const QModelIndex &parent = QModelIndex()) const; - QModelIndex index(int, int, const QModelIndex& = QModelIndex()) const; - QModelIndex parent(const QModelIndex& index = QModelIndex()) const; - bool removeRows(int row, int count, const QModelIndex &parent = QModelIndex()); - QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const; - -private Q_SLOTS: - void sourceReset(); - void sourceDataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight); - void sourceRowsInserted(const QModelIndex &parent, int start, int end); - void sourceRowsRemoved(const QModelIndex &, int, int); - -private: - void load() const; - - mutable QList<int> m_sourceRow; - mutable QHash<QString, int> m_historyHash; - mutable bool m_loaded; -}; - - -// ---------------------------------------------------------------------------------------------------------------------- - - -/** - * Proxy model for the history model that converts the list - * into a tree, one top level node per day. - * - * Used in the HistoryDialog. - * - */ - -class HistoryTreeModel : public QAbstractProxyModel -{ - Q_OBJECT - -public: - explicit HistoryTreeModel(QAbstractItemModel *sourceModel, QObject *parent = 0); - - QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const; - int columnCount(const QModelIndex &parent) const; - int rowCount(const QModelIndex &parent = QModelIndex()) const; - QModelIndex mapFromSource(const QModelIndex &sourceIndex) const; - QModelIndex mapToSource(const QModelIndex &proxyIndex) const; - QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const; - QModelIndex parent(const QModelIndex &index = QModelIndex()) const; - bool hasChildren(const QModelIndex &parent = QModelIndex()) const; - Qt::ItemFlags flags(const QModelIndex &index) const; - bool removeRows(int row, int count, const QModelIndex &parent = QModelIndex()); - QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const; - - void setSourceModel(QAbstractItemModel *sourceModel); - -private Q_SLOTS: - void sourceReset(); - void sourceRowsInserted(const QModelIndex &parent, int start, int end); - void sourceRowsRemoved(const QModelIndex &parent, int start, int end); - -private: - int sourceDateRow(int row) const; - mutable QList<int> m_sourceRowCache; -}; - - -#endif // HISTORYMODELS_H diff --git a/src/history/historypanel.cpp b/src/history/historypanel.cpp deleted file mode 100644 index 5037a4d1..00000000 --- a/src/history/historypanel.cpp +++ /dev/null @@ -1,211 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2009 by Domrachev Alexandr <alexandr.domrachev@gmail.com> -* Copyright (C) 2009-2011 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 "historypanel.h" -#include "historypanel.moc" - -// Auto Includes -#include "rekonq.h" - -// Local Includes -#include "application.h" -#include "paneltreeview.h" -#include "historymanager.h" -#include "historymodels.h" -#include "urlfilterproxymodel.h" - -// KDE Includes -#include <KLocalizedString> -#include <KMenu> -#include <KAction> -#include <KMessageBox> - -// Qt Includes -#include <QHeaderView> - - -HistoryPanel::HistoryPanel(const QString &title, QWidget *parent, Qt::WindowFlags flags) - : UrlPanel(title, parent, flags) -{ - setObjectName("historyPanel"); - setVisible(ReKonfig::showHistoryPanel()); -} - - -HistoryPanel::~HistoryPanel() -{ - ReKonfig::setShowHistoryPanel(!isHidden()); -} - - -void HistoryPanel::contextMenuItem(const QPoint &pos) -{ - KMenu menu; - KAction* action; - - action = new KAction(KIcon("tab-new"), i18n("Open"), this); - connect(action, SIGNAL(triggered()), panelTreeView(), SLOT(openInCurrentTab())); - menu.addAction(action); - - action = new KAction(KIcon("tab-new"), i18n("Open in New Tab"), this); - connect(action, SIGNAL(triggered()), panelTreeView(), SLOT(openInNewTab())); - menu.addAction(action); - - action = new KAction(KIcon("window-new"), i18n("Open in New Window"), this); - connect(action, SIGNAL(triggered()), panelTreeView(), SLOT(openInNewWindow())); - menu.addAction(action); - - action = new KAction(KIcon("edit-copy"), i18n("Copy Link Address"), this); - connect(action, SIGNAL(triggered()), panelTreeView(), SLOT(copyToClipboard())); - menu.addAction(action); - - action = new KAction(KIcon("edit-clear"), i18n("Remove Entry"), this); - connect(action, SIGNAL(triggered()), this, SLOT(deleteEntry())); - menu.addAction(action); - - action = new KAction(KIcon("edit-clear"), i18n("Remove all occurrences"), this); - connect(action, SIGNAL(triggered()), this, SLOT(forgetSite())); - menu.addAction(action); - - menu.exec(panelTreeView()->mapToGlobal(pos)); -} - - -void HistoryPanel::contextMenuGroup(const QPoint &pos) -{ - KMenu menu; - KAction* action; - - action = new KAction(KIcon("tab-new"), i18n("Open Folder in Tabs"), this); - connect(action, SIGNAL(triggered()), this, SLOT(openAll())); - menu.addAction(action); - - action = new KAction(KIcon("edit-clear"), i18n("Remove Folder"), this); - connect(action, SIGNAL(triggered()), this, SLOT(deleteGroup())); - menu.addAction(action); - - menu.exec(panelTreeView()->mapToGlobal(pos)); -} - - -void HistoryPanel::contextMenuEmpty(const QPoint& /*pos*/) -{ -} - - -void HistoryPanel::openAll() -{ - QModelIndex index = panelTreeView()->currentIndex(); - if (!index.isValid()) - return; - - QList<KUrl> allChild; - - for (int i = 0; i < index.model()->rowCount(index); i++) - allChild << qVariantValue<KUrl>(index.child(i, 0).data(Qt::UserRole)); - - if (allChild.length() > 8) - { - if (!(KMessageBox::warningContinueCancel(this, - i18ncp("%1=Number of tabs. Value is always >=8", - "You are about to open %1 tabs.\nAre you sure?", - "You are about to open %1 tabs.\nAre you sure?", - allChild.length())) == KMessageBox::Continue) - ) - return; - } - - for (int i = 0; i < allChild.length(); i++) - emit openUrl(allChild.at(i).url(), Rekonq::NewTab); -} - -void HistoryPanel::deleteGroup() -{ - QModelIndex index = panelTreeView()->currentIndex(); - if (!index.isValid()) - return; - - //Getting all URLs of sub items. - QList<KUrl> allChild; - for (int i = 0; i < index.model()->rowCount(index); i++) - allChild << qVariantValue<KUrl>(index.child(i, 0).data(Qt::UserRole)); - - for (int i = 0; i < allChild.length(); i++) - rApp->historyManager()->removeHistoryEntry(allChild.at(i)); - -} - -void HistoryPanel::setup() -{ - UrlPanel::setup(); - - panelTreeView()->header()->hideSection(1); - - const UrlFilterProxyModel *proxy = static_cast<const UrlFilterProxyModel*>(panelTreeView()->model()); - panelTreeView()->expand(proxy->index(0, 0)); -} - -void HistoryPanel::deleteEntry() -{ - QModelIndex index = panelTreeView()->currentIndex(); - if (!index.isValid()) - return; - removedFolderIndex = index.parent().row(); - - rApp->historyManager()->removeHistoryEntry(qVariantValue< KUrl >(index.data(Qt::UserRole))); - - QModelIndex expandItem = panelTreeView()->model()->index(removedFolderIndex, 0); - if (expandItem.isValid()) - panelTreeView()->expand(expandItem); -} - -void HistoryPanel::forgetSite() -{ - QModelIndex index = panelTreeView()->currentIndex(); - if (!index.isValid()) - return; - removedFolderIndex = index.row(); - - QString site = qVariantValue< KUrl >(index.data(Qt::UserRole)).host(); - QList<HistoryItem> toRemove = rApp->historyManager()->find(site); - for (int i = 0; i < toRemove.length(); i++) - { - rApp->historyManager()->removeHistoryEntry(KUrl(toRemove.at(i).url)); - } - - QModelIndex expandItem = panelTreeView()->model()->index(removedFolderIndex, 0); - if (expandItem.isValid()) - panelTreeView()->expand(expandItem); -} - - - -QAbstractItemModel* HistoryPanel::model() -{ - return rApp->historyManager()->historyTreeModel(); -} diff --git a/src/history/historypanel.h b/src/history/historypanel.h deleted file mode 100644 index f78ec5e1..00000000 --- a/src/history/historypanel.h +++ /dev/null @@ -1,63 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2009 by Domrachev Alexandr <alexandr.domrachev@gmail.com> -* Copyright (C) 2009-2011 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 HISTORYPANEL_H -#define HISTORYPANEL_H - - -// Rekonq Includes -#include "rekonq_defines.h" - -// Local Includes -#include "urlpanel.h" - - -class REKONQ_TESTS_EXPORT HistoryPanel : public UrlPanel -{ - Q_OBJECT - -public: - explicit HistoryPanel(const QString &title, QWidget *parent = 0, Qt::WindowFlags flags = 0); - virtual ~HistoryPanel(); - -private Q_SLOTS: - virtual void contextMenuItem(const QPoint &pos); - virtual void contextMenuGroup(const QPoint &pos); - virtual void contextMenuEmpty(const QPoint &pos); - - void openAll(); - void deleteEntry(); - void deleteGroup(); - void forgetSite(); - -private: - virtual void setup(); - virtual QAbstractItemModel* model(); - int removedFolderIndex; -}; - -#endif // HISTORYPANEL_H diff --git a/src/icondownloader.cpp b/src/icondownloader.cpp deleted file mode 100644 index 6d1f3a5e..00000000 --- a/src/icondownloader.cpp +++ /dev/null @@ -1,112 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2012 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 "icondownloader.h" -#include "icondownloader.moc" - -// Qt Includes -#include <QNetworkAccessManager> -#include <QNetworkReply> -#include <QNetworkRequest> -#include <QFile> -#include <QPixmap> - - -IconDownloader::IconDownloader(const KUrl &srcUrl, const KUrl &destUrl, QObject *parent) - : QObject(parent) - , m_srcUrl(srcUrl) - , m_destUrl(destUrl) -{ - QNetworkAccessManager *manager = new QNetworkAccessManager(this); - connect(manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(replyFinished(QNetworkReply*))); - manager->get(QNetworkRequest(srcUrl)); -} - - -void IconDownloader::replyFinished(QNetworkReply *reply) -{ - if (reply->error()) - { - kDebug() << "FAVICON JOB ERROR"; - emit iconReady(); - this->deleteLater(); - return; - } - - QString s = m_destUrl.url().remove(QL1S("file://")); - QFile favicon(s); - if (!favicon.open(QIODevice::WriteOnly)) - { - kDebug() << "FAVICON FILE NOT OPENED"; - emit iconReady(); - this->deleteLater(); - return; - } - - favicon.write(reply->readAll()); - favicon.close(); - - if (favicon.size() == 0) - { - kDebug() << "SIZE ZERO FAVICON"; - favicon.remove(); - emit iconReady(); - this->deleteLater(); - return; - } - - QPixmap px; - if (!px.load(s)) - { - kDebug() << "PIXMAP NOT LOADED"; - emit iconReady(); - this->deleteLater(); - return; - } - - if (px.isNull()) - { - kDebug() << "PIXMAP IS NULL"; - favicon.remove(); - emit iconReady(); - this->deleteLater(); - return; - } - - px = px.scaled(16, 16); - if (!px.save(s + QL1S(".png"), "PNG")) - { - kDebug() << "PIXMAP NOT SAVED"; - emit iconReady(); - this->deleteLater(); - return; - } - - QFile::remove(s); - emit iconReady(); - this->deleteLater(); -} diff --git a/src/icondownloader.h b/src/icondownloader.h deleted file mode 100644 index 54fd60fb..00000000 --- a/src/icondownloader.h +++ /dev/null @@ -1,61 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2012 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 ICON_DOWNLOADER_H -#define ICON_DOWNLOADER_H - -// rekonq Includes -#include "rekonq_defines.h" - -// Qt Includes -#include <QObject> - -// KDE Includes -#include <KUrl> - -// Forward Declarations -class QNetworkReply; - - -class IconDownloader : public QObject -{ - Q_OBJECT - -public: - IconDownloader(const KUrl &srcUrl, const KUrl &destUrl, QObject *parent = 0); - -private Q_SLOTS: - void replyFinished(QNetworkReply *); - -Q_SIGNALS: - void iconReady(); - -private: - KUrl m_srcUrl; - KUrl m_destUrl; -}; - -#endif // ICON_DOWNLOADER_H diff --git a/src/iconmanager.cpp b/src/iconmanager.cpp deleted file mode 100644 index 2876aa27..00000000 --- a/src/iconmanager.cpp +++ /dev/null @@ -1,264 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2010-2012 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 "iconmanager.h" -#include "iconmanager.moc" - -// Local Includes -#include "application.h" -#include "icondownloader.h" -#include "webicon.h" - -// KDE Includes -#include <KIO/Job> - -#include <KIcon> -#include <KStandardDirs> -#include <KUrl> - -// Qt Includes -#include <QDir> - -#include <QWebElement> -#include <QWebFrame> -#include <QWebSettings> - - -IconManager::IconManager(QObject *parent) - : QObject(parent) -{ - _faviconsDir = KStandardDirs::locateLocal("cache" , "favicons/" , true); -} - - -KIcon IconManager::iconForUrl(const KUrl &url) -{ - // first things first.. avoid infinite loop at startup - if (url.isEmpty() || rApp->mainWindowList().isEmpty()) - return KIcon("text-html"); - - QByteArray encodedUrl = url.toEncoded(); - // rekonq icons.. - if (encodedUrl == QByteArray("about:home")) - return KIcon("go-home"); - if (encodedUrl == QByteArray("about:closedTabs")) - return KIcon("tab-close"); - if (encodedUrl == QByteArray("about:history")) - return KIcon("view-history"); - if (encodedUrl == QByteArray("about:bookmarks")) - return KIcon("bookmarks"); - if (encodedUrl == QByteArray("about:favorites")) - return KIcon("emblem-favorite"); - if (encodedUrl == QByteArray("about:downloads")) - return KIcon("download"); - if (encodedUrl == QByteArray("about:tabs")) - return KIcon("tab-duplicate"); - - // TODO: return other mimetype icons - if (url.isLocalFile()) - { - return KIcon("folder"); - } - - QString i = favIconForUrl(url); - if (!i.isEmpty()) - { - return KIcon(QIcon(_faviconsDir + i)); - } - - // Not found icon. Return default one. - return KIcon("text-html"); -} - - -void IconManager::provideIcon(QWebFrame *mFrame, const KUrl &url, bool notify) -{ - // provide icons just for http/https sites - if (!url.scheme().startsWith(QL1S("http"))) - { - if (notify) - emit iconChanged(); - return; - } - - // do not load new icons in private browsing.. - if (QWebSettings::globalSettings()->testAttribute(QWebSettings::PrivateBrowsingEnabled)) - { - if (notify) - emit iconChanged(); - return; - } - - // check if icon exists - if (!favIconForUrl(url).isEmpty()) - { - if (notify) - emit iconChanged(); - return; - } - - // the simplest way.. - const QString rootUrlString = url.scheme() + QL1S("://") + url.host(); - - // find favicon url - KUrl faviconUrl(rootUrlString + QL1S("/favicon.ico")); - - - QWebElement root = mFrame->documentElement(); - QWebElement e = root.findFirst(QL1S("link[rel~=\"icon\"]")); - QString relUrlString = e.attribute(QL1S("href")); - if (relUrlString.isEmpty()) - { - e = root.findFirst(QL1S("link[rel~=\"shortcut icon\"]")); - relUrlString = e.attribute(QL1S("href")); - } - - if (!relUrlString.isEmpty()) - { - faviconUrl = relUrlString.startsWith(QL1S("http")) - ? KUrl(relUrlString) - : KUrl(rootUrlString + QL1C('/') + relUrlString); - } - - // dest url - KUrl destUrl(_faviconsDir + url.host()); - - IconDownloader *id = new IconDownloader(faviconUrl, destUrl, this); - if (notify) - connect(id, SIGNAL(iconReady()), this, SIGNAL(iconChanged())); -} - - -void IconManager::downloadIconFromUrl(const KUrl &url) -{ - new WebIcon(url, this); -} - - -void IconManager::clearIconCache() -{ - QDir d(_faviconsDir); - QStringList favicons = d.entryList(); - Q_FOREACH(const QString & fav, favicons) - { - d.remove(fav); - } -} - - -void IconManager::saveDesktopIconForUrl(const KUrl &u) -{ - KIcon icon = iconForUrl(u); - QString destPath = _faviconsDir + u.host() + QL1S("_WEBAPPICON.png"); - - QPixmap pix = icon.pixmap(16, 16); - int s = KIconLoader::global()->currentSize(KIconLoader::Desktop); - pix = pix.scaled(s, s); - - pix.save(destPath); -} - - -// NOTE: this function is builded "around" the iconForurl one. It basically returns the same things -// with an important difference: this one returns paths while the other one returns KIcons -QString IconManager::iconPathForUrl(const KUrl &url) -{ - // first things first.. avoid infinite loop at startup - if (url.isEmpty() || rApp->mainWindowList().isEmpty()) - { - QString icon = QL1S("file://") + KGlobal::dirs()->findResource("icon", "oxygen/16x16/mimetypes/text-html.png"); - return icon; - } - - QByteArray encodedUrl = url.toEncoded(); - // rekonq icons.. - if (encodedUrl == QByteArray("about:home")) - { - QString icon = QL1S("file://") + KGlobal::dirs()->findResource("icon", "oxygen/16x16/actions/go-home.png"); - return icon; - } - if (encodedUrl == QByteArray("about:closedTabs")) - { - QString icon = QL1S("file://") + KGlobal::dirs()->findResource("icon", "oxygen/16x16/actions/tab-close.png"); - return icon; - } - if (encodedUrl == QByteArray("about:history")) - { - QString icon = QL1S("file://") + KGlobal::dirs()->findResource("icon", "oxygen/16x16/actions/view-history.png"); - return icon; - } - if (encodedUrl == QByteArray("about:bookmarks")) - { - QString icon = QL1S("file://") + KGlobal::dirs()->findResource("icon", "oxygen/16x16/places/bookmarks.png"); - return icon; - } - if (encodedUrl == QByteArray("about:favorites")) - { - QString icon = QL1S("file://") + KGlobal::dirs()->findResource("icon", "oxygen/16x16/emblems/emblem-favorite.png"); - return icon; - } - if (encodedUrl == QByteArray("about:downloads")) - { - QString icon = QL1S("file://") + KGlobal::dirs()->findResource("icon", "oxygen/16x16/actions/download.png"); - return icon; - } - if (encodedUrl == QByteArray("about:tabs")) - { - QString icon = QL1S("file://") + KGlobal::dirs()->findResource("icon", "oxygen/16x16/actions/tab-duplicate.png"); - return icon; - } - - // TODO: return other mimetype icons - if (url.isLocalFile()) - { - QString icon = QL1S("file://") + KGlobal::dirs()->findResource("icon", "oxygen/16x16/places/folder.png"); - return icon; - } - - QString i = favIconForUrl(url); - if (!i.isEmpty()) - { - return QL1S("file://") + _faviconsDir + i; - } - - // Not found icon. Return default one. - QString icon = QL1S("file://") + KGlobal::dirs()->findResource("icon", "oxygen/16x16/mimetypes/text-html.png"); - return icon; -} - - -QString IconManager::favIconForUrl(const KUrl &url) -{ - if (url.isLocalFile() - || !url.protocol().startsWith(QL1S("http"))) - return QString(); - - if (QFile::exists(_faviconsDir + url.host() + QL1S(".png"))) - return url.host() + QL1S(".png"); - else - return QString(); -} diff --git a/src/iconmanager.h b/src/iconmanager.h deleted file mode 100644 index f5416a95..00000000 --- a/src/iconmanager.h +++ /dev/null @@ -1,72 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2010-2012 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 ICON_MANAGER_H -#define ICON_MANAGER_H - -// Rekonq Includes -#include "rekonq_defines.h" - -// Qt Includes -#include <QObject> -#include <QString> - -// Forward Declarations -class KIcon; -class QWebFrame; -class KJob; - - -class REKONQ_TESTS_EXPORT IconManager : public QObject -{ - Q_OBJECT - -public: - IconManager(QObject *parent = 0); - - KIcon iconForUrl(const KUrl &url); - QString iconPathForUrl(const KUrl &url); - - void provideIcon(QWebFrame *mFrame, const KUrl &url, bool notify = true); - - void downloadIconFromUrl(const KUrl &url); - - void clearIconCache(); - - void saveDesktopIconForUrl(const KUrl &u); - -Q_SIGNALS: - void iconChanged(); - -private: - bool existsIconForUrl(const KUrl &url); - QString favIconForUrl(const KUrl &url); - - QString _faviconsDir; -}; - - -#endif // ICON_MANAGER_H diff --git a/src/kspellplugin.cpp b/src/kspellplugin.cpp deleted file mode 100644 index 6772ef63..00000000 --- a/src/kspellplugin.cpp +++ /dev/null @@ -1,198 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2012 by Lindsay Mathieson <lindsay dot mathieson 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/>. -* -* ============================================================ */ - - -#include <stdio.h> -#include <KDebug> -#include "kspellplugin.h" -#include <QTextBoundaryFinder> - -#include "rekonq.h" - -#define methodDebug() kDebug("KWebSpellChecker: %s", __FUNCTION__) - -///////////////////////////// -// KWebSpellChecker - - -KWebSpellChecker::KWebSpellChecker() -{ - m_speller = new Sonnet::Speller(); -} - -KWebSpellChecker::~KWebSpellChecker() -{ - delete m_speller; -} - -bool KWebSpellChecker::isContinousSpellCheckingEnabled() const -{ - return ReKonfig::automaticSpellChecking(); -} - -void KWebSpellChecker::toggleContinousSpellChecking() -{ - ReKonfig::setAutomaticSpellChecking(! ReKonfig::automaticSpellChecking()); -} - -void KWebSpellChecker::learnWord(const QString& word) -{ - Q_UNUSED(word); -} - -void KWebSpellChecker::ignoreWordInSpellDocument(const QString& word) -{ - Q_UNUSED(word); -} - -static bool isValidWord(const QString &str) -{ - if (str.isEmpty() || (str.length() == 1 && !str[0].isLetter())) - { - return false; - } - const int length = str.length(); - for (int i = 0; i < length; ++i) - { - if (!str[i].isNumber()) - { - return true; - } - } - // 'str' only contains numbers - return false; -} - -void KWebSpellChecker::checkSpellingOfString(const QString& word, int* misspellingLocation, int* misspellingLength) -{ - // sanity check - if (misspellingLocation == NULL || misspellingLength == NULL) - return; - - *misspellingLocation = -1; - *misspellingLength = 0; - - kDebug() << word << endl; - - QTextBoundaryFinder finder = QTextBoundaryFinder(QTextBoundaryFinder::Word, word); - - QTextBoundaryFinder::BoundaryReasons boundary = finder.boundaryReasons(); - int start = finder.position(), end = finder.position(); - bool inWord = (boundary & QTextBoundaryFinder::StartWord) != 0; - while (finder.toNextBoundary() > 0) - { - boundary = finder.boundaryReasons(); - if ((boundary & QTextBoundaryFinder::EndWord) && inWord) - { - end = finder.position(); - QString str = finder.string().mid(start, end - start); - if (isValidWord(str)) - { -#if 1 - qDebug() << "Word at " << start << " word = '" - << str << "', len = " << str.length(); -#endif - if (m_speller->isMisspelled(str)) - { - *misspellingLocation = start; - *misspellingLength = end - start; - } - return; - } - inWord = false; - } - if ((boundary & QTextBoundaryFinder::StartWord)) - { - start = finder.position(); - inWord = true; - } - } -} - -QString KWebSpellChecker::autoCorrectSuggestionForMisspelledWord(const QString& word) -{ - /* - QStringList words = m_speller->suggest(word); - if (words.size() > 0) - return words[0]; - else - return QString(""); - */ - - - return QString(""); -} - -void KWebSpellChecker::guessesForWord(const QString& word, const QString& context, QStringList& guesses) -{ - Q_UNUSED(context); - - QStringList words = m_speller->suggest(word); - guesses = words; -} - -bool KWebSpellChecker::isGrammarCheckingEnabled() -{ - return false; -} - -void KWebSpellChecker::toggleGrammarChecking() -{ -} - -void KWebSpellChecker::checkGrammarOfString(const QString&, QList<GrammarDetail>&, int* badGrammarLocation, int* badGrammarLength) -{ - Q_UNUSED(badGrammarLocation); - Q_UNUSED(badGrammarLength); -} - - -//////////////////////////////////////////// -// KWebKitPlatformPlugin -KWebKitPlatformPlugin::KWebKitPlatformPlugin() -{ -} - -KWebKitPlatformPlugin::~KWebKitPlatformPlugin() -{ -} - - -bool KWebKitPlatformPlugin::supportsExtension(Extension ext) const -{ - return ext == SpellChecker; -} - -QObject* KWebKitPlatformPlugin::createExtension(Extension ext) const -{ - if (ext == SpellChecker) - return new KWebSpellChecker(); - else - return NULL; -} - -Q_EXPORT_PLUGIN2(kwebspellchecker, KWebKitPlatformPlugin); -Q_IMPORT_PLUGIN(kwebspellchecker) - diff --git a/src/kspellplugin.h b/src/kspellplugin.h deleted file mode 100644 index faa83106..00000000 --- a/src/kspellplugin.h +++ /dev/null @@ -1,76 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2012 by Lindsay Mathieson <lindsay dot mathieson 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 TESTQWEBSPELLCHECKER_H -#define TESTQWEBSPELLCHECKER_H - - -#include <QtGlobal> -#include <QtPlugin> -#include <sonnet/speller.h> -#include "qwebkitplatformplugin.h" - - - - -class KWebSpellChecker : public QWebSpellChecker -{ - Q_OBJECT -public: - Sonnet::Speller *m_speller; - - KWebSpellChecker(); - ~KWebSpellChecker(); - - virtual bool isContinousSpellCheckingEnabled() const; - virtual void toggleContinousSpellChecking(); - virtual void learnWord(const QString& word); - virtual void ignoreWordInSpellDocument(const QString& word); - virtual void checkSpellingOfString(const QString& word, int* misspellingLocation, int* misspellingLength); - virtual QString autoCorrectSuggestionForMisspelledWord(const QString& word); - virtual void guessesForWord(const QString& word, const QString& context, QStringList& guesses); - - virtual bool isGrammarCheckingEnabled(); - virtual void toggleGrammarChecking(); - virtual void checkGrammarOfString(const QString&, QList<GrammarDetail>&, int* badGrammarLocation, int* badGrammarLength); -}; - - -class KWebKitPlatformPlugin : public QObject, public QWebKitPlatformPlugin -{ - Q_OBJECT - Q_INTERFACES(QWebKitPlatformPlugin) - -public: - KWebKitPlatformPlugin(); - ~KWebKitPlatformPlugin(); - - virtual bool supportsExtension(Extension) const; - virtual QObject* createExtension(Extension) const; - -}; - -#endif
\ No newline at end of file diff --git a/src/main.cpp b/src/main.cpp deleted file mode 100644 index 6ede3ac3..00000000 --- a/src/main.cpp +++ /dev/null @@ -1,224 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2008-2012 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/>. -* -* ============================================================ */ - - -// version include -#include "config-version.h" - -// Local Includes -#include "application.h" -#include "mainwindow.h" - -// KDE Includes -#include <KAboutData> -#include <KCmdLineArgs> - -// Qt Includes -#include <QDir> - -static const char description[] = - I18N_NOOP("A lightweight Web Browser for KDE based on WebKit"); - - -extern "C" KDE_EXPORT int kdemain(int argc, char **argv) -{ - KAboutData about("rekonq", - 0, - ki18n("rekonq"), - REKONQ_VERSION, - ki18n(description), - KAboutData::License_GPL_V3, - ki18n("(C) 2008-2012 Andrea Diamantini"), - KLocalizedString(), - "http://rekonq.kde.org" - ); - - // --------------- about authors ----------------------------- - about.addAuthor(ki18n("Andrea Diamantini"), - ki18n("Project Lead, Developer, Maintainer"), - "adjam7@gmail.com", - "http://www.adjam.org"); - - about.addAuthor(ki18n("Johannes Tröscher"), - ki18n("QGraphicsEffect expert. Tabbar highlight animation"), - "fritz_van_tom@hotmail.com", - ""); - - about.addAuthor(ki18n("Furkan Uzumcu"), - ki18n("A lot of improvements, especially on usability"), - "furkanuzumcu@gmail.com", - ""); - - about.addAuthor(ki18n("Yoann Laissus"), - ki18n("Developer, History & Bookmarks Improvements"), - "yoann.laissus@gmail.com", - ""); - - about.addAuthor(ki18n("Cédric Bellegarde"), - ki18n("Patched code quite everywhere :)"), - "gnumdk@adishatz.1s.fr", - ""); - - about.addAuthor(ki18n("Jon Ander Peñalba"), - ki18n("Bookmarks code peer reviewer. A fantastic help"), - "jonan88@gmail.com", - "http://identi.ca/jonan"); - - about.addAuthor(ki18n("Pierre Rossi"), - ki18n("Urlbar, tests, new tab page, bars... and more"), - "pierre.rossi@gmail.com", - ""); - - about.addAuthor(ki18n("Lionel Chauvin"), - ki18n("Development, Ideas, Mockups, rekonq Icon"), - "megabigbug@yahoo.fr", - ""); - - about.addAuthor(ki18n("Siteshwar Vashisht"), - ki18n("Code, Ideas, sync... and IRC chats!"), - "siteshwar@gmail.com", - ""); - - about.addAuthor(ki18n("Tirtha Chatterjee"), - ki18n("A lot of nice work, here and there in the code :)"), - "tirtha.p.chatterjee@gmail.com", - ""); - - about.addAuthor(ki18n("Lindsay Mathieson"), - ki18n("Implemented inline spellcheck, provided hints, discovered bugs"), - "lindsay.mathieson@gmail.com", - ""); - - // --------------- about credits ----------------------------- - about.addCredit(ki18n("Dawit Alemayehu"), - ki18n("KDEWebKit (main) developer. And KIO. And KUriFilter. And more.."), - "adawit@kde.org", - ""); - - about.addCredit(ki18n("Jekyll Wu"), - ki18n("Bug triaging. Impressive job about..."), - "adaptee@gmail.com", - ""); - - about.addCredit(ki18n("Panagiotis Papadopoulos"), - ki18n("Quite everything but code"), - "pano_90@gmx.net", - ""); - - about.addCredit(ki18n("Phaneendra Hedge"), - ki18n("Nepomuk fancy bookmarking"), - "pnh.pes@gmail.com", - ""); - - about.addCredit(ki18n("Jonathan Raphael Joachim Kolberg"), - ki18n("Handbook, Maintains a Kubuntu PPA with rekonq git packages"), - "bulldog98@freenet.de", - ""); - - about.addCredit(ki18n("Benjamin Poulain"), - ki18n("The \"QtWebKit guy\". Adblock (new) implementation. Code quality improvements"), - "ikipou@gmail.com", - "http://www.openyourcode.org/"); - - about.addCredit(ki18n("Rohan Garg"), - ki18n("Handbook, Maintains a Kubuntu PPA with rekonq git packages."), - "rohan16garg@gmail.com", - ""); - - about.addCredit(ki18n("Anton Kreuzkamp"), - ki18n("Session Management, patches"), - "akreuzkamp@web.de", - ""); - - about.addCredit(ki18n("David E. Narváez"), - ki18n("Implemented User Session Management and cleaned up SessionManager code"), - "david.narvaez@computer.org", - ""); - - about.addCredit(ki18n("Marc Deop"), - ki18n("Access Keys Navigation"), - "damnshock@gmail.com", - ""); - - about.addCredit(ki18n("Yuri Chornoivan"), - ki18n("Checking rekonq strings, helping with docs"), - "yurchor@ukr.net", - ""); - - about.addCredit(ki18n("Burkhard Lück"), - ki18n("Checking rekonq strings, helping with docs"), - "lueck@hube-lueck.de", - ""); - - about.addCredit(ki18n("Andrius da Costa Ribas"), - ki18n("Helped letting rekonq compile on Windows/MSVC and Mac OS X"), - "andriusmao@gmail.com", - ""); - - about.addCredit(ki18n("Pino Toscano"), - ki18n("fixuifiles ;)"), - "pino@kde.org", - ""); - - // Initialize command line args - KCmdLineArgs::init(argc, argv, &about); - - // Define the command line options using KCmdLineOptions - KCmdLineOptions options; - - // adding URL option - options.add("+[URL]" , ki18n("Location to open")); - - // Register the supported options - KCmdLineArgs::addCmdLineOptions(options); - - // Add options from Application class - Application::addCmdLineOptions(); - - if (!Application::start()) - { - kWarning() << "rekonq is already running!"; - return 0; - } - -#if defined(Q_WS_X11) - // On X11, the raster engine gives better performance than native. - QApplication::setGraphicsSystem(QL1S("raster")); -#endif - - Application app; - - // set application data - QCoreApplication::setApplicationName(QL1S("rekonq")); - QCoreApplication::setApplicationVersion(REKONQ_VERSION); - - KCmdLineArgs::setCwd(QDir::currentPath().toUtf8()); - - if (app.isSessionRestored()) - for (int i = 1; MainWindow::canBeRestored(i); i++) - app.newMainWindow(false)->restore(i); - - return app.exec(); -} diff --git a/src/mainview.cpp b/src/mainview.cpp deleted file mode 100644 index aa6526e8..00000000 --- a/src/mainview.cpp +++ /dev/null @@ -1,848 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2008-2012 by Andrea Diamantini <adjam7 at gmail dot com> -* Copyright (C) 2009 by PaweÅ‚ Prażak <pawelprazak at gmail dot com> -* Copyright (C) 2009-2011 by Lionel Chauvin <megabigbug@yahoo.fr> -* Copyright (C) 2010 by Matthieu Gicquel <matgic78 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 "mainview.h" -#include "mainview.moc" - -// Auto Includes -#include "rekonq.h" - -// Local Includes -#include "application.h" -#include "historymanager.h" -#include "iconmanager.h" -#include "mainwindow.h" -#include "sessionmanager.h" -#include "stackedurlbar.h" -#include "tabbar.h" -#include "urlbar.h" -#include "webpage.h" -#include "webtab.h" - -// KDE Includes -#include <KAction> -#include <KLocalizedString> -#include <KMessageBox> -#include <KStandardDirs> - -#include <config-kactivities.h> -#ifdef HAVE_KACTIVITIES -#include <KActivities/ResourceInstance> -#endif - -// Qt Includes -#include <QtGui/QLabel> -#include <QtGui/QMovie> -#include <QtGui/QToolButton> - - -MainView::MainView(QWidget *parent) - : KTabWidget(parent) - , m_widgetBar(new StackedUrlBar(this)) - , m_addTabButton(0) - , m_currentTabIndex(0) -{ - // setting tabbar - TabBar *tabBar = new TabBar(this); - m_addTabButton = new QToolButton(this); - setTabBar(tabBar); - - tabBar->show(); - // set mouse tracking for tab previews - setMouseTracking(true); - - // loading pixmap path - m_loadingGitPath = KStandardDirs::locate("appdata" , "pics/loading.mng"); - - // connecting tabbar signals - connect(tabBar, SIGNAL(closeTab(int)), this, SLOT(closeTab(int))); - connect(tabBar, SIGNAL(mouseMiddleClick(int)), this, SLOT(closeTab(int))); - connect(tabBar, SIGNAL(newTabRequest()), this, SLOT(newTab())); - - connect(tabBar, SIGNAL(cloneTab(int)), this, SLOT(cloneTab(int))); - connect(tabBar, SIGNAL(closeOtherTabs(int)), this, SLOT(closeOtherTabs(int))); - connect(tabBar, SIGNAL(reloadTab(int)), this, SLOT(reloadTab(int))); - connect(tabBar, SIGNAL(reloadAllTabs()), this, SLOT(reloadAllTabs())); - connect(tabBar, SIGNAL(detachTab(int)), this, SLOT(detachTab(int))); - - connect(tabBar, SIGNAL(tabCloseRequested(int)), this, SLOT(closeTab(int))); - connect(tabBar, SIGNAL(tabMoved(int, int)), m_widgetBar, SLOT(moveBar(int, int))); - - // Update the add tab button for each tabbar layout change - connect(tabBar, SIGNAL(tabLayoutChanged()), this, SLOT(updateAddTabButton())); - - // current page index changing - connect(this, SIGNAL(currentChanged(int)), this, SLOT(currentChanged(int))); - connect(this, SIGNAL(currentChanged(int)), rApp->sessionManager(), SLOT(saveSession())); - - QList<TabHistory> list = rApp->sessionManager()->closedSites(); - Q_FOREACH(const TabHistory & tab, list) - { - if (tab.url.startsWith(QL1S("about"))) - continue; - m_recentlyClosedTabs.removeAll(tab); - m_recentlyClosedTabs.prepend(tab); - } -} - - -MainView::~MainView() -{ - // NOTE - // we wanna delete m_widgetBar later to get sure - // all its children (i.e. the urlbars) got deleted in - // WebTab dtor. - m_widgetBar->deleteLater(); -} - - -void MainView::addNewTabButton(QAction *newTabAction) -{ - m_addTabButton->setDefaultAction(newTabAction); - - m_addTabButton->setAutoRaise(true); - m_addTabButton->setToolButtonStyle(Qt::ToolButtonIconOnly); -} - - -TabBar *MainView::tabBar() const -{ - TabBar *tabBar = qobject_cast<TabBar *>(KTabWidget::tabBar()); - return tabBar; -} - - -UrlBar *MainView::currentUrlBar() const -{ - return currentWebTab()->urlBar(); -} - - -WebTab *MainView::currentWebTab() const -{ - int i = currentIndex(); - WebTab *b = webTab(i); - if (b) - return b; - - kDebug() << "We failed to find the current tab!!! Let's go sure with the first one..."; - return webTab(0); -} - - -QList<TabHistory> MainView::recentlyClosedTabs() -{ - return m_recentlyClosedTabs; -} - - -void MainView::updateTabBarVisibility() -{ - // Get sure tabbar is well shown (and hided) during fullscreen navigation - // NOTE: don't ask me why, but it seems that using code like: - // MainWindow *w = qobject_cast<MainWindow *>(parent()); - // does NOT work here. So, I'm asking you: WHY??? - MainWindow *w = rApp->mainWindow(); - if (w && !w->isFullScreen()) - { - if (tabBar()->isHidden()) - { - tabBar()->show(); - } - - // this to ensure tab button visibility also on new window creation - if (m_addTabButton->isHidden()) - { - m_addTabButton->show(); - } - } -} - - -void MainView::updateAddTabButton() -{ - if (!ReKonfig::alwaysShowTabBar()) - { - bool b = (count() == 1); - - tabBar()->setVisible(!b); - m_addTabButton->setVisible(!b); - if (b) - return; - } - - // update tab button position - int tabWidgetWidth = frameSize().width(); - int tabBarWidth = tabBar()->sizeHint().width(); - - if (tabBarWidth + m_addTabButton->width() > tabWidgetWidth) - { - setCornerWidget(m_addTabButton); - } - else - { - setCornerWidget(0); - m_addTabButton->move(tabBarWidth, 0); - } -} - - -void MainView::webReload() -{ - reloadTab(currentIndex()); -} - - -void MainView::webStop() -{ - WebTab *tabToStop = currentWebTab(); - QAction *action = tabToStop->view()->page()->action(QWebPage::Stop); - action->trigger(); -} - - -// When index is -1 index chooses the current tab -void MainView::reloadTab(int index) -{ - if (index < 0) - index = currentIndex(); - if (index < 0 || index >= count()) - return; - - WebTab *reloadingTab = webTab(index); - if (reloadingTab->view()->url().scheme() != QL1S("about")) - { - QAction *action = reloadingTab->view()->page()->action(QWebPage::Reload); - action->trigger(); - } - else - { - reloadingTab->view()->setUrl(reloadingTab->page()->loadingUrl()); - } -} - - -// this slot is called on tab switching -void MainView::currentChanged(int index) -{ - // retrieve the webview related to the index - WebTab *tab = this->webTab(index); - if (!tab) - return; - - // retrieve the old webview (that where we move from) - WebTab *oldTab = this->webTab(m_currentTabIndex); - - WebView *view = tab->view(); - -#ifdef HAVE_KACTIVITIES - if (!QWebSettings::globalSettings()->testAttribute(QWebSettings::PrivateBrowsingEnabled)) { - if (oldTab) { - WebView *oldView = oldTab->view(); - if (activityResourceInstance(oldView)) { - activityResourceInstance(oldView)->notifyFocusedOut(); - } - } - - if (activityResourceInstance(view)) { - activityResourceInstance(view)->notifyFocusedIn(); - } - } -#endif - - // set current index - m_currentTabIndex = index; - - if (oldTab) - { - // disconnecting webpage from mainview - disconnect(oldTab->page(), SIGNAL(statusBarMessage(QString)), - this, SIGNAL(showStatusBarMessage(QString))); - disconnect(oldTab->page(), SIGNAL(linkHovered(QString, QString, QString)), - this, SIGNAL(linkHovered(QString))); - } - - connect(tab->page(), SIGNAL(statusBarMessage(QString)), - this, SIGNAL(showStatusBarMessage(QString))); - connect(tab->page(), SIGNAL(linkHovered(QString, QString, QString)), - this, SIGNAL(linkHovered(QString))); - - emit currentTitle(view->title()); - m_widgetBar->setCurrentIndex(index); - - // clean up "status bar" - emit showStatusBarMessage(QString()); - - // notify UI to eventually switch stop/reload button - emit currentTabStateChanged(); - - // set focus to the current webview - if (tab->url().scheme() == QL1S("about")) - m_widgetBar->currentWidget()->setFocus(); - else - view->setFocus(); - - tabBar()->resetTabHighlighted(index); -} - - -WebTab *MainView::webTab(int index) const -{ - WebTab *tab = qobject_cast<WebTab *>(this->widget(index)); - if (tab) - { - return tab; - } - - kDebug() << "WebTab with index " << index << "not found. Returning NULL." ; - return 0; -} - - -WebTab *MainView::newWebTab(bool focused) -{ - WebTab *tab = new WebTab(this); - - // connecting webview with mainview - connect(tab->view(), SIGNAL(loadStarted()), this, SLOT(webViewLoadStarted())); - connect(tab->view(), SIGNAL(loadFinished(bool)), this, SLOT(webViewLoadFinished(bool))); - connect(tab, SIGNAL(titleChanged(QString)), this, SLOT(webViewTitleChanged(QString))); - connect(tab->view(), SIGNAL(urlChanged(QUrl)), this, SLOT(webViewUrlChanged(QUrl))); - connect(tab->view(), SIGNAL(iconChanged()), this, SLOT(webViewIconChanged())); - connect(tab->view(), SIGNAL(openPreviousInHistory()), this, SIGNAL(openPreviousInHistory())); - connect(tab->view(), SIGNAL(openNextInHistory()), this, SIGNAL(openNextInHistory())); - - // connecting webPage signals with mainview - connect(tab->page(), SIGNAL(windowCloseRequested()), this, SLOT(windowCloseRequested())); - connect(tab->page(), SIGNAL(printRequested(QWebFrame*)), this, SIGNAL(printRequested(QWebFrame*))); - - bool openNearCurrent = true; - if (sender()) - openNearCurrent = sender()->objectName() != "new_tab" ? true : false; - if (ReKonfig::openNewTabsNearCurrent() && openNearCurrent) - { - insertTab(currentIndex() + 1, tab, i18n("(Untitled)")); - m_widgetBar->insertWidget(currentIndex() + 1, tab->urlBar()); - } - else - { - addTab(tab, i18n("(Untitled)")); - m_widgetBar->addWidget(tab->urlBar()); - } - - if (focused) - { - setCurrentWidget(tab); - } - - return tab; -} - - -void MainView::newTab() -{ - WebView *w = newWebTab()->view(); - - currentUrlBar()->setFocus(); - - switch (ReKonfig::newTabsBehaviour()) - { - case 0: // new tab page - w->load(KUrl("about:home")); - break; - case 1: // blank page - currentUrlBar()->clear(); - break; - case 2: // homepage - w->load(KUrl(ReKonfig::homePage())); - break; - default: - break; - } -} - - -void MainView::reloadAllTabs() -{ - for (int i = 0; i < count(); ++i) - { - reloadTab(i); - } -} - - -void MainView::windowCloseRequested() -{ - WebPage *page = qobject_cast<WebPage *>(sender()); - if (!page) - return; - - WebView *view = qobject_cast<WebView *>(page->view()); - int index = indexOf(view->parentWidget()); - - if (index >= 0) - { - if (count() == 1) - { - MainWindow *w = qobject_cast<MainWindow *>(parent()); - w->close(); - } - else - { - closeTab(index); - } - return; - } -} - - -void MainView::closeOtherTabs(int index) -{ - if (index < 0) - index = currentIndex(); - if (index < 0 || index >= count()) - return; - - for (int i = count() - 1; i > index; --i) - { - closeTab(i); - } - - for (int i = index - 1; i >= 0; --i) - { - closeTab(i); - } -} - - -void MainView::cloneTab(int index) -{ - if (index < 0) - index = currentIndex(); - if (index < 0 || index >= count()) - return; - - KUrl url = webTab(index)->url(); - QWebHistory* history = webTab(index)->view()->history(); - - rApp->mainWindow()->loadUrl(url, Rekonq::NewTab, history); -} - - -// When index is -1 index chooses the current tab -void MainView::closeTab(int index, bool del) -{ - if (index < 0) - index = currentIndex(); - if (index < 0 || index >= count()) - return; - - WebTab *tabToClose = webTab(index); - if (!tabToClose) - return; - - if (tabToClose->view()->isModified()) - { - int risp = KMessageBox::warningContinueCancel(this, - i18n("This tab contains changes that have not been submitted.\n" - "Closing the tab will discard these changes.\n" - "Do you really want to close this tab?\n"), - i18n("Closing Modified Tab"), KGuiItem(i18n("Close &Tab"), "tab-close"), KStandardGuiItem::cancel()); - if (risp != KMessageBox::Continue) - return; - } - - if (!tabToClose->url().isEmpty() - && tabToClose->url().scheme() != QL1S("about") - && !QWebSettings::globalSettings()->testAttribute(QWebSettings::PrivateBrowsingEnabled) - ) - { - const int recentlyClosedTabsLimit = 8; - TabHistory history(tabToClose->view()->history()); - history.title = tabToClose->view()->title(); - history.url = tabToClose->url().url(); - - m_recentlyClosedTabs.removeAll(history); - if (m_recentlyClosedTabs.count() == recentlyClosedTabsLimit) - m_recentlyClosedTabs.removeLast(); - m_recentlyClosedTabs.prepend(history); - } - - // what to do if there is just one tab... - if (count() == 1) - { - if (ReKonfig::lastTabClosesWindow()) - { - emit closeWindow(); - return; - } - - // open default homePage if just one tab is opened - WebView *w = currentWebTab()->view(); - - if (currentWebTab()->url().protocol() == QL1S("about")) - return; - - switch (ReKonfig::newTabsBehaviour()) - { - case 0: // new tab page - case 1: // blank page - w->load(KUrl("about:home")); - currentUrlBar()->setFocus(); - break; - case 2: // homepage - w->load(KUrl(ReKonfig::homePage())); - break; - default: - break; - } - return; - } - // else... - - removeTab(index); - - m_widgetBar->removeWidget(tabToClose->urlBar()); - m_widgetBar->setCurrentIndex(m_currentTabIndex); - - if (del) - { - tabToClose->deleteLater(); - } -} - - -void MainView::webViewLoadStarted() -{ - WebView *view = qobject_cast<WebView *>(sender()); - if (!view) - return; - - int index = indexOf(view->parentWidget()); - if (-1 != index) - { - QLabel *label = animatedLoading(index, true); - if (label->movie()) - { - label->movie()->start(); - } - } - - if (index != currentIndex()) - return; - - emit currentTabStateChanged(); - emit showStatusBarMessage(i18n("Loading..."), Rekonq::Info); - - if (view == currentWebTab()->view() - && !currentUrlBar()->hasFocus() - && view->url().scheme() != QL1S("about")) - { - view->setFocus(); - } -} - - -void MainView::webViewLoadFinished(bool ok) -{ - WebView *view = qobject_cast<WebView *>(sender()); - int index = -1; - if (view) - index = indexOf(view->parentWidget()); - - if (-1 != index) - { - QLabel *label = animatedLoading(index, true); - QMovie *movie = label->movie(); - if (movie) - movie->stop(); - } - - webViewIconChanged(); - emit currentTabStateChanged(); - - // don't display messages for background tabs - if (index != currentIndex()) - { - return; - } - - if (ok) - emit showStatusBarMessage(i18n("Done"), Rekonq::Info); -// else -// emit showStatusBarMessage(i18n("Failed to load"), Rekonq::Error); -} - - -void MainView::webViewIconChanged() -{ - WebView *view = qobject_cast<WebView *>(sender()); - if (!view) - return; - - WebTab *tab = qobject_cast<WebTab *>(view->parent()); - const int index = indexOf(tab); - - if (-1 != index) - { - KIcon icon = rApp->iconManager()->iconForUrl(tab->url()); - QLabel *label = animatedLoading(index, false); - QMovie *movie = label->movie(); - delete movie; - label->setMovie(0); - label->setPixmap(icon.pixmap(16, 16)); - } -} - - -void MainView::webViewTitleChanged(const QString &title) -{ - QString viewTitle = title.isEmpty() ? i18n("(Untitled)") : title; - QString tabTitle = viewTitle; - tabTitle.replace('&', "&&"); - - WebTab *tab = qobject_cast<WebTab *>(sender()); - if (!tab) - return; - - int index = indexOf(tab); - if (-1 != index) - { - setTabText(index, tabTitle); - } - - if (currentIndex() == index) - { - emit currentTitle(viewTitle); - } - else - { - if (tabTitle != i18n("(Untitled)")) - tabBar()->setTabHighlighted(index); - } - - if (ReKonfig::hoveringTabOption() == 1) - tabBar()->setTabToolTip(index, tabTitle.remove('&')); -} - - -void MainView::webViewUrlChanged(const QUrl &url) -{ - WebView *view = qobject_cast<WebView *>(sender()); - if (!view) - return; - - WebTab *tab = qobject_cast<WebTab *>(view->parentWidget()); - if (!tab) - return; - -#ifdef HAVE_KACTIVITIES - if ( - !QWebSettings::globalSettings()->testAttribute(QWebSettings::PrivateBrowsingEnabled) && - !url.isEmpty() && - url.scheme() != "about" - ) - { - if (!activityResourceInstance(view)) { - new KActivities::ResourceInstance(window()->winId(), view); - } - - activityResourceInstance(view)->setUri(url); - } -#endif - - int index = indexOf(tab); - if (ReKonfig::hoveringTabOption() == 2) - tabBar()->setTabToolTip(index, url.toString()); - - if (tab == rApp->mainWindow()->currentTab()) - rApp->mainWindow()->updateHistoryActions(); -} - - -void MainView::nextTab() -{ - int next = currentIndex() + 1; - if (next == count()) - next = 0; - setCurrentIndex(next); -} - - -void MainView::previousTab() -{ - int next = currentIndex() - 1; - if (next < 0) - next = count() - 1; - setCurrentIndex(next); -} - - -void MainView::openClosedTab() -{ - KAction *action = qobject_cast<KAction *>(sender()); - if (!action) - return; - - int index = action->data().toInt(); - kDebug() << "TAB INDEX TO RESTORE:" << index; - restoreClosedTab(index); -} - - -void MainView::restoreClosedTab(int i, bool inNewTab) -{ - if (m_recentlyClosedTabs.isEmpty()) - return; - - TabHistory history = m_recentlyClosedTabs.takeAt(i); - - WebView *view = inNewTab - ? newWebTab()->view() - : currentWebTab()->view() - ; - - history.applyHistory(view->history()); - view->load(KUrl(history.url)); - - // just to get sure... - m_recentlyClosedTabs.removeAll(history); -} - - -void MainView::switchToTab(const int index) -{ - if (index <= 0 || index > count()) - return; - setCurrentIndex(index - 1); -} - - -void MainView::loadFavorite(const int index) -{ - QStringList urls = ReKonfig::previewUrls(); - if (index < 0 || index > urls.length()) - return; - KUrl url = KUrl(urls.at(index - 1)); - rApp->loadUrl(url); - currentWebTab()->setFocus(); -} - - -QLabel *MainView::animatedLoading(int index, bool addMovie) -{ - if (index == -1) - return 0; - - QLabel *label = qobject_cast<QLabel* >(tabBar()->tabButton(index, QTabBar::LeftSide)); - if (!label) - { - label = new QLabel(this); - } - if (addMovie && !label->movie()) - { - QMovie *movie = new QMovie(m_loadingGitPath, QByteArray(), label); - movie->setSpeed(50); - label->setMovie(movie); - movie->start(); - } - tabBar()->setTabButton(index, QTabBar::LeftSide, 0); - tabBar()->setTabButton(index, QTabBar::LeftSide, label); - return label; -} - - -void MainView::detachTab(int index, MainWindow *toWindow) -{ - if (index < 0) - index = currentIndex(); - if (index < 0 || index >= count()) - return; - - WebTab *tab = webTab(index); - KUrl u = tab->url(); - if (u.scheme() == QL1S("about")) - { - closeTab(index); - rApp->loadUrl(u, Rekonq::NewWindow); - } - else - { - QString label = tab->view()->title(); - UrlBar *bar = tab->urlBar(); - closeTab(index, false); - - MainWindow *w; - if (toWindow == NULL) - w = rApp->newMainWindow(false); - else - w = toWindow; - - w->mainView()->addTab(tab, label); - w->mainView()->widgetBar()->insertWidget(0, bar); - - // reconnect signals to the new mainview - // Code copied from newWebTab(), any new changes there should be applied here - - // disconnecting webview with old mainview - disconnect(tab->view(), SIGNAL(loadStarted())); - disconnect(tab->view(), SIGNAL(loadFinished(bool))); - disconnect(tab, SIGNAL(titleChanged(QString))); - disconnect(tab->view(), SIGNAL(urlChanged(QUrl))); - disconnect(tab->view(), SIGNAL(iconChanged())); - disconnect(tab->view(), SIGNAL(openPreviousInHistory())); - disconnect(tab->view(), SIGNAL(openNextInHistory())); - - // disconnecting webPage signals with old mainview - disconnect(tab->page(), SIGNAL(windowCloseRequested())); - disconnect(tab->page(), SIGNAL(printRequested(QWebFrame*))); - - // connecting webview with new mainview - connect(tab->view(), SIGNAL(loadStarted()), w->mainView(), SLOT(webViewLoadStarted())); - connect(tab->view(), SIGNAL(loadFinished(bool)), w->mainView(), SLOT(webViewLoadFinished(bool))); - connect(tab, SIGNAL(titleChanged(QString)), w->mainView(), SLOT(webViewTitleChanged(QString))); - connect(tab->view(), SIGNAL(urlChanged(QUrl)), w->mainView(), SLOT(webViewUrlChanged(QUrl))); - connect(tab->view(), SIGNAL(iconChanged()), w->mainView(), SLOT(webViewIconChanged())); - connect(tab->view(), SIGNAL(openPreviousInHistory()), w->mainView(), SIGNAL(openPreviousInHistory())); - connect(tab->view(), SIGNAL(openNextInHistory()), w->mainView(), SIGNAL(openNextInHistory())); - - // connecting webPage signals with new mainview - connect(tab->page(), SIGNAL(windowCloseRequested()), w->mainView(), SLOT(windowCloseRequested())); - connect(tab->page(), SIGNAL(printRequested(QWebFrame*)), w->mainView(), SIGNAL(printRequested(QWebFrame*))); - } -} - -#ifdef HAVE_KACTIVITIES -KActivities::ResourceInstance * MainView::activityResourceInstance(WebView * view) -{ - return view->findChild<KActivities::ResourceInstance*> (); -} -#endif - diff --git a/src/mainview.h b/src/mainview.h deleted file mode 100644 index d8547530..00000000 --- a/src/mainview.h +++ /dev/null @@ -1,211 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2008-2012 by Andrea Diamantini <adjam7 at gmail dot com> -* Copyright (C) 2009 by PaweÅ‚ Prażak <pawelprazak at gmail dot com> -* Copyright (C) 2009-2011 by Lionel Chauvin <megabigbug@yahoo.fr> -* Copyright (C) 2010 by Matthieu Gicquel <matgic78 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 MAINVIEW_H -#define MAINVIEW_H - - -// Rekonq Includes -#include "rekonq_defines.h" -#include "historymanager.h" - -// KDE Includes -#include <KTabWidget> - -// Config -#include <config-kactivities.h> - -// Forward Declarations -class MainWindow; -class StackedUrlBar; -class TabBar; -class UrlBar; -class WebTab; -class WebView; - -class QLabel; -class QToolButton; -class QUrl; -class QWebFrame; - -#ifdef HAVE_KACTIVITIES -namespace KActivities { class ResourceInstance; } -#endif - - -/** - * This class represent rekonq Main View. - * It contains all WebViews and the url bar. - * - */ - -class REKONQ_TESTS_EXPORT MainView : public KTabWidget -{ - Q_OBJECT - -public: - MainView(QWidget *parent); - ~MainView(); - - inline StackedUrlBar *widgetBar() const - { - return m_widgetBar; - } - - TabBar *tabBar() const; - - WebTab *currentWebTab() const; - UrlBar *currentUrlBar() const; - - WebTab *webTab(int index) const; - - void addNewTabButton(QAction *); - - void updateTabBarVisibility(); - - inline QToolButton *addTabButton() const - { - return m_addTabButton; - } - - /** - * This function creates a new empty tab - * with a webview inside - * @param focused decide if you wannna give focus - * (or not) to this new tab (default true) - * @return the webview embedded in the new tab - */ - WebTab *newWebTab(bool focused = true); - - QList<TabHistory> recentlyClosedTabs(); - - void restoreClosedTab(int i, bool inNewTab = true); - -Q_SIGNALS: - // current tab signals - void currentTitle(const QString &url); - void showStatusBarMessage(const QString &message, Rekonq::Notify status = Rekonq::Info); - void linkHovered(const QString &link); - void openPreviousInHistory(); - void openNextInHistory(); - void closeWindow(); - - void printRequested(QWebFrame *frame); - - /** - * Current tab state changed: - * 1. tab is loading - * 2. tab finished loading - * 3. tab urlbar got focus - */ - void currentTabStateChanged(); - -public Q_SLOTS: - /** - * Core browser slot. This create a new tab with a WebView inside - * for browsing and follows rekonq settings about opening there a - * home/blank/rekonq page - * - */ - void newTab(); - - // Indexed slots - void cloneTab(int index = -1); - void closeTab(int index = -1, bool del = true); - void closeOtherTabs(int index = -1); - void reloadTab(int index = -1); - - /** - * Detaches tab at @c index to a new window. - * If @c toWindow is not null, the tab is instead - * added to existing MainWindow @c toWindow. - */ - void detachTab(int index = -1, MainWindow *toWindow = NULL); - - void reloadAllTabs(); - void nextTab(); - void previousTab(); - - void switchToTab(const int index); - void loadFavorite(const int index); - - // WEB slot actions - void webReload(); - void webStop(); - -private Q_SLOTS: - void currentChanged(int index); - void updateAddTabButton(); - - void webViewLoadStarted(); - void webViewLoadFinished(bool ok); - void webViewIconChanged(); - void webViewTitleChanged(const QString &title); - void webViewUrlChanged(const QUrl &url); - - void windowCloseRequested(); - - void openClosedTab(); - -private: - /** - * This function creates (if not exists) and returns a QLabel - * with a loading QMovie. - * Imported from Arora's code. - * - * @param index the tab index where inserting the animated label - * @param addMovie creates or not a loading movie - * - * @return animated label's pointer - */ - QLabel *animatedLoading(int index, bool addMovie); - - -// -------------------------------------------------------------------------- - - StackedUrlBar *m_widgetBar; - - QString m_loadingGitPath; - - // The original width hint of the mainview for tabs width - int m_originalWidthHint; - - // the new tab button - QToolButton *m_addTabButton; - - int m_currentTabIndex; - - QList<TabHistory> m_recentlyClosedTabs; - -#ifdef HAVE_KACTIVITIES - KActivities::ResourceInstance * activityResourceInstance(WebView * view); -#endif -}; - -#endif // MAINVIEW_H diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp deleted file mode 100644 index 7e42e6c1..00000000 --- a/src/mainwindow.cpp +++ /dev/null @@ -1,1694 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2008-2012 by Andrea Diamantini <adjam7 at gmail dot com> -* Copyright (C) 2009 by PaweÅ‚ Prażak <pawelprazak at gmail dot com> -* Copyright (C) 2009-2011 by Lionel Chauvin <megabigbug@yahoo.fr> -* Copyright (C) 2010 by Matthieu Gicquel <matgic78 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 "mainwindow.h" -#include "mainwindow.moc" - -// Auto Includes -#include "rekonq.h" - -// Local Includes -#include "adblockmanager.h" -#include "analyzerpanel.h" -#include "application.h" -#include "bookmarkmanager.h" -#include "bookmarkspanel.h" -#include "bookmarkstoolbar.h" -#include "downloadmanager.h" -#include "findbar.h" -#include "historymanager.h" -#include "historypanel.h" -#include "iconmanager.h" -#include "mainview.h" -#include "rekonqmenu.h" -#include "sessionmanager.h" -#include "settingsdialog.h" -#include "stackedurlbar.h" -#include "syncmanager.h" -#include "tabbar.h" -#include "urlbar.h" -#include "webinspectorpanel.h" -#include "webpage.h" -#include "webtab.h" -#include "zoombar.h" -#include "useragentmanager.h" - -// Ui Includes -#include "ui_cleardata.h" - -// KDE Includes -#include <KIO/Job> - -#include <KAction> -#include <KEditToolBar> -#include <KFileDialog> -#include <KJobUiDelegate> -#include <KMenu> -#include <KMenuBar> -#include <KMessageBox> -#include <KProcess> -#include <KPushButton> -#include <KProtocolManager> -#include <KStandardDirs> -#include <KTemporaryFile> -#include <KToggleFullScreenAction> -#include <KXMLGUIFactory> -#include <kdeprintdialog.h> - -#include <KParts/Part> -#include <KParts/BrowserExtension> -#include <KMimeTypeTrader> - - -// Qt Includes -#include <QtCore/QTimer> - -#include <QtDBus/QDBusInterface> -#include <QtDBus/QDBusReply> - -#include <QtGui/QDesktopWidget> -#include <QtGui/QLabel> -#include <QtGui/QPrintDialog> -#include <QtGui/QPrinter> -#include <QtGui/QVBoxLayout> - -#include <QtWebKit/QWebHistory> - -#include <QSignalMapper> -#include <QTextDocument> - - -MainWindow::MainWindow() - : KXmlGuiWindow() - , m_view(new MainView(this)) - , m_findBar(new FindBar(this)) - , m_zoomBar(new ZoomBar(this)) - , m_historyPanel(0) - , m_bookmarksPanel(0) - , m_webInspectorPanel(0) - , m_analyzerPanel(0) - , m_loadStopReloadAction(0) - , m_historyBackMenu(0) - , m_historyForwardMenu(0) - , m_tabListMenu(0) - , m_bookmarksBar(0) - , m_popup(new QLabel(this)) - , m_hidePopupTimer(new QTimer(this)) - , m_rekonqMenu(0) -{ - // Setting attributes (just to be sure...) - setAttribute(Qt::WA_DeleteOnClose, true); - setAttribute(Qt::WA_QuitOnClose, true); - - // creating a centralWidget containing panel, m_view and the hidden findbar - QWidget *centralWidget = new QWidget; - centralWidget->setContentsMargins(0, 0, 0, 0); - - // setting layout - QVBoxLayout *layout = new QVBoxLayout; - layout->setContentsMargins(0, 0, 0, 0); - layout->addWidget(m_view); - layout->addWidget(m_findBar); - layout->addWidget(m_zoomBar); - centralWidget->setLayout(layout); - - // central widget - setCentralWidget(centralWidget); - - // setting size policies - setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); - - // then, setup our actions - setupActions(); - - // BEFORE setupGUI, AFTER setupActions!! - m_view->addNewTabButton(actionByName("new_tab")); - - // setting Panels - setupPanels(); - - // setting up rekonq tools - setupTools(); - - // setting up rekonq toolbar(s) - setupToolbars(); - - // a call to KXmlGuiWindow::setupGUI() populates the GUI - // with actions, using KXMLGUI. - // It also applies the saved mainwindow settings, if any, and ask the - // mainwindow to automatically save settings if changed: window size, - // toolbar position, icon size, etc. - setupGUI(); - - // no menu bar in rekonq: we have other plans.. - menuBar()->setVisible(false); - - // no more status bar.. - setStatusBar(0); - - // setting popup notification - connect(rApp, SIGNAL(focusChanged(QWidget*, QWidget*)), m_popup, SLOT(hide())); - m_popup->setAutoFillBackground(true); - m_popup->setMargin(4); - m_popup->raise(); - m_popup->hide(); - connect(m_hidePopupTimer, SIGNAL(timeout()), m_popup, SLOT(hide())); - - // notification system - connect(m_view, SIGNAL(showStatusBarMessage(QString, Rekonq::Notify)), this, SLOT(notifyMessage(QString, Rekonq::Notify))); - connect(m_view, SIGNAL(linkHovered(QString)), this, SLOT(notifyMessage(QString))); - connect(rApp->downloadManager(), SIGNAL(notifyDownload(QString, Rekonq::Notify)), - this, SLOT(notifyMessage(QString, Rekonq::Notify))); - - // connect signals and slots - connect(m_view, SIGNAL(currentTitle(QString)), this, SLOT(updateWindowTitle(QString))); - connect(m_view, SIGNAL(printRequested(QWebFrame*)), this, SLOT(printRequested(QWebFrame*))); - connect(m_view, SIGNAL(closeWindow()), this, SLOT(close())); - - // (shift +) ctrl + tab switching - connect(this, SIGNAL(ctrlTabPressed()), m_view, SLOT(nextTab())); - connect(this, SIGNAL(shiftCtrlTabPressed()), m_view, SLOT(previousTab())); - - // wheel history navigation - connect(m_view, SIGNAL(openPreviousInHistory()), this, SLOT(openPrevious())); - connect(m_view, SIGNAL(openNextInHistory()), this, SLOT(openNext())); - - // update actions - connect(m_view, SIGNAL(currentChanged(int)), this, SLOT(updateHistoryActions())); - connect(m_view, SIGNAL(currentTabStateChanged()), this, SLOT(updateTabActions())); - - // Change window icon according to tab icon - connect(m_view, SIGNAL(currentChanged(int)), this, SLOT(changeWindowIcon(int))); - - // Find Bar signal - connect(m_findBar, SIGNAL(searchString(QString)), this, SLOT(find(QString))); - - // Zoom Bar signal - connect(m_view, SIGNAL(currentChanged(int)), m_zoomBar, SLOT(updateSlider(int))); - - // Save session on window closing - connect(this, SIGNAL(windowClosing()), rApp->sessionManager(), SLOT(saveSession())); - - // Adblock Manager changed rules. Reload current page - connect(rApp->adblockManager(), SIGNAL(reloadCurrentPage()), m_view, SLOT(webReload())); - - // setting up toolbars to NOT have context menu enabled - setContextMenuPolicy(Qt::DefaultContextMenu); - - // accept d'n'd - setAcceptDrops(true); - - // Things that need to be setup after the call to setupGUI() and after ctor call - QTimer::singleShot(1, this, SLOT(postLaunch())); -} - - -MainWindow::~MainWindow() -{ - m_hidePopupTimer->stop(); - - rApp->bookmarkManager()->removeBookmarkBar(m_bookmarksBar); - rApp->bookmarkManager()->removeBookmarkPanel(m_bookmarksPanel); - - rApp->removeMainWindow(this); -} - - -void MainWindow::setupToolbars() -{ - KAction *a; - - // location bar - a = new KAction(i18n("Location Bar"), this); - a->setDefaultWidget(m_view->widgetBar()); - actionCollection()->addAction(QL1S("url_bar"), a); -} - - -void MainWindow::postLaunch() -{ - setupBookmarksAndToolsShortcuts(); - - // this just to fix reopening rekonq after fullscreen close - KToolBar *mainBar = toolBar("mainToolBar"); - mainBar->show(); - - // Bookmarks Bar - KToolBar *XMLGUIBkBar = toolBar("bookmarkToolBar"); - if (!XMLGUIBkBar) - return; - - if (m_bookmarksBar) - { - rApp->bookmarkManager()->removeBookmarkBar(m_bookmarksBar); - delete m_bookmarksBar; - } - m_bookmarksBar = new BookmarkToolBar(XMLGUIBkBar, this); - rApp->bookmarkManager()->registerBookmarkBar(m_bookmarksBar); - - QAction *a; - - // Bookmarks bar action - a = actionByName(QL1S("show_bookmarks_toolbar")); - a->setChecked(XMLGUIBkBar->isVisible()); - connect(XMLGUIBkBar, SIGNAL(visibilityChanged(bool)), a, SLOT(setChecked(bool))); - - // History panel action - a = actionByName(QL1S("show_history_panel")); - a->setChecked(m_historyPanel->isVisible()); - - // Bookmarks panel action - a = actionByName(QL1S("show_bookmarks_panel")); - a->setChecked(m_bookmarksPanel->isVisible()); -} - - -void MainWindow::toggleBookmarkBarVisible(bool visible) -{ - if (m_bookmarksBar) - m_bookmarksBar->toolBar()->setVisible(visible); -} - - -void MainWindow::configureToolbars() -{ - if (autoSaveSettings()) - saveAutoSaveSettings(); - - KEditToolBar dlg(factory(), this); - // The bookmark bar needs to be refill after the UI changes are finished - connect(&dlg, SIGNAL(newToolBarConfig()), this, SLOT(postLaunch())); - dlg.exec(); -} - - -QSize MainWindow::sizeHint() const -{ - QRect desktopRect = QApplication::desktop()->screenGeometry(); - QSize size = desktopRect.size() * 0.8; - return size; -} - - -void MainWindow::changeWindowIcon(int index) -{ - if (ReKonfig::useFavicon()) - { - KUrl url = mainView()->webTab(index)->url(); - QIcon icon = rApp->iconManager()->iconForUrl(url).pixmap(QSize(32, 32)); - setWindowIcon(icon); - } -} - - -void MainWindow::setupActions() -{ - // this let shortcuts work.. - actionCollection()->addAssociatedWidget(this); - - KAction *a; - - // new window action - a = new KAction(KIcon("window-new"), i18n("&New Window"), this); - a->setShortcut(KShortcut(Qt::CTRL | Qt::Key_N)); - actionCollection()->addAction(QL1S("new_window"), a); - connect(a, SIGNAL(triggered(bool)), rApp, SLOT(newWindow())); - - // Standard Actions - KStandardAction::open(this, SLOT(fileOpen()), actionCollection()); - KStandardAction::saveAs(this, SLOT(fileSaveAs()), actionCollection()); - KStandardAction::print(this, SLOT(printRequested()), actionCollection()); - KStandardAction::quit(rApp, SLOT(queryQuit()), actionCollection()); - - a = KStandardAction::find(m_findBar, SLOT(show()), actionCollection()); - KShortcut findShortcut = KStandardShortcut::find(); - a->setShortcut(findShortcut); - - KStandardAction::findNext(this, SLOT(findNext()) , actionCollection()); - KStandardAction::findPrev(this, SLOT(findPrevious()) , actionCollection()); - - a = KStandardAction::fullScreen(this, SLOT(viewFullScreen(bool)), this, actionCollection()); - KShortcut fullScreenShortcut = KStandardShortcut::fullScreen(); - fullScreenShortcut.setAlternate(Qt::Key_F11); - a->setShortcut(fullScreenShortcut); - - a = actionCollection()->addAction(KStandardAction::Home); - connect(a, SIGNAL(triggered(Qt::MouseButtons, Qt::KeyboardModifiers)), this, SLOT(homePage())); - KStandardAction::preferences(this, SLOT(preferences()), actionCollection()); - - a = KStandardAction::redisplay(m_view, SLOT(webReload()), actionCollection()); - a->setText(i18n("Reload")); - KShortcut reloadShortcut = KStandardShortcut::reload(); - reloadShortcut.setAlternate(Qt::CTRL + Qt::Key_R); - a->setShortcut(reloadShortcut); - - a = new KAction(KIcon("process-stop"), i18n("&Stop"), this); - a->setShortcut(KShortcut(Qt::CTRL | Qt::Key_Period)); - actionCollection()->addAction(QL1S("stop"), a); - connect(a, SIGNAL(triggered(bool)), m_view, SLOT(webStop())); - - // load stop reload Action - m_loadStopReloadAction = new KAction(this); - actionCollection()->addAction(QL1S("load_stop_reload") , m_loadStopReloadAction); - m_loadStopReloadAction->setShortcutConfigurable(false); - - // Open location action - a = new KAction(i18n("Open Location"), this); - KShortcut openLocationShortcut(Qt::CTRL + Qt::Key_L); - openLocationShortcut.setAlternate(Qt::ALT + Qt::Key_D); - a->setShortcut(openLocationShortcut); - actionCollection()->addAction(QL1S("open_location"), a); - connect(a, SIGNAL(triggered(bool)) , this, SLOT(openLocation())); - - // set zoom bar actions - m_zoomBar->setupActions(this); - - // tab list - m_tabListMenu = new KMenu(); - m_tabListMenu->addAction("hack"); // necessary to show the menu on the right side the first time - connect(m_tabListMenu, SIGNAL(aboutToShow()), this, SLOT(aboutToShowTabListMenu())); - connect(m_tabListMenu, SIGNAL(triggered(QAction*)), this, SLOT(openActionTab(QAction*))); - KActionMenu *tabAction = new KActionMenu(i18n("Tab List"), this); - tabAction->setMenu(m_tabListMenu); - tabAction->setIcon(KIcon("document-multiple")); - tabAction->setDelayed(false); - actionCollection()->addAction(QL1S("tab_list"), tabAction); - - // ============================== Bookmark ======================================= - a = KStandardAction::addBookmark(this, SLOT(bookmarkCurrentPage()), actionCollection()); - KShortcut bkShortcut(Qt::CTRL + Qt::Key_D); - a->setShortcut(bkShortcut); - - //================================Download======================================== - a = new KAction(KIcon("download"), i18n("Downloads"), this); - a->setShortcut(KShortcut(Qt::CTRL + Qt::Key_J)); - actionCollection()->addAction(QL1S("openDownloadsPage"), a); - connect(a, SIGNAL(triggered(bool)), this, SLOT(openDownloadsPage())); - - // =============================== Tools Actions ================================= - a = new KAction(i18n("View Page S&ource"), this); - a->setIcon(KIcon("application-xhtml+xml")); - a->setShortcut(KShortcut(Qt::CTRL + Qt::Key_U)); - actionCollection()->addAction(QL1S("page_source"), a); - connect(a, SIGNAL(triggered(bool)), this, SLOT(viewPageSource())); - - a = rApp->privateBrowsingAction(); - a->setShortcut(Qt::ControlModifier + Qt::ShiftModifier + Qt::Key_P); - actionCollection()->addAction(QL1S("private_browsing"), a); - - a = new KAction(KIcon("edit-clear"), i18n("Clear Private Data..."), this); - a->setShortcut(Qt::ControlModifier + Qt::ShiftModifier + Qt::Key_Delete); - actionCollection()->addAction(QL1S("clear_private_data"), a); - connect(a, SIGNAL(triggered(bool)), this, SLOT(clearPrivateData())); - - // ========================= History related actions ============================== - a = actionCollection()->addAction(KStandardAction::Back); - connect(a, SIGNAL(triggered(Qt::MouseButtons, Qt::KeyboardModifiers)), - this, SLOT(openPrevious(Qt::MouseButtons, Qt::KeyboardModifiers))); - - m_historyBackMenu = new KMenu(this); - a->setMenu(m_historyBackMenu); - connect(m_historyBackMenu, SIGNAL(aboutToShow()), this, SLOT(aboutToShowBackMenu())); - connect(m_historyBackMenu, SIGNAL(triggered(QAction*)), this, SLOT(openActionUrl(QAction*))); - - a = actionCollection()->addAction(KStandardAction::Forward); - connect(a, SIGNAL(triggered(Qt::MouseButtons, Qt::KeyboardModifiers)), - this, SLOT(openNext(Qt::MouseButtons, Qt::KeyboardModifiers))); - - m_historyForwardMenu = new KMenu(this); - a->setMenu(m_historyForwardMenu); - connect(m_historyForwardMenu, SIGNAL(aboutToShow()), this, SLOT(aboutToShowForwardMenu())); - connect(m_historyForwardMenu, SIGNAL(triggered(QAction*)), this, SLOT(openActionUrl(QAction*))); - - // ============================== General Tab Actions ==================================== - a = new KAction(KIcon("tab-new"), i18n("New &Tab"), this); - a->setShortcut(KShortcut(Qt::CTRL + Qt::Key_T)); - actionCollection()->addAction(QL1S("new_tab"), a); - connect(a, SIGNAL(triggered(bool)), m_view, SLOT(newTab())); - - a = new KAction(KIcon("view-refresh"), i18n("Reload All Tabs"), this); - actionCollection()->addAction(QL1S("reload_all_tabs"), a); - connect(a, SIGNAL(triggered(bool)), m_view, SLOT(reloadAllTabs())); - - a = new KAction(i18n("Show Next Tab"), this); - a->setShortcuts(QApplication::isRightToLeft() ? KStandardShortcut::tabPrev() : KStandardShortcut::tabNext()); - actionCollection()->addAction(QL1S("show_next_tab"), a); - connect(a, SIGNAL(triggered(bool)), m_view, SLOT(nextTab())); - - a = new KAction(i18n("Show Previous Tab"), this); - a->setShortcuts(QApplication::isRightToLeft() ? KStandardShortcut::tabNext() : KStandardShortcut::tabPrev()); - actionCollection()->addAction(QL1S("show_prev_tab"), a); - connect(a, SIGNAL(triggered(bool)), m_view, SLOT(previousTab())); - - a = new KAction(KIcon("tab-new"), i18n("Open Last Closed Tab"), this); - a->setData(0); // last tab has always index = 0 - a->setShortcut(KShortcut(Qt::CTRL + Qt::SHIFT + Qt::Key_T)); - actionCollection()->addAction(QL1S("open_last_closed_tab"), a); - connect(a, SIGNAL(triggered(bool)), m_view, SLOT(openClosedTab())); - - // shortcuts for quickly switching to a tab - QSignalMapper *tabSignalMapper = new QSignalMapper(this); - for (int i = 1; i <= 9; i++) - { - a = new KAction(i18n("Switch to Tab %1", i), this); - a->setShortcut(KShortcut(QString("Alt+%1").arg(i))); - actionCollection()->addAction(QL1S(QString("switch_tab_" + QString::number(i)).toAscii()), a); - connect(a, SIGNAL(triggered(bool)), tabSignalMapper, SLOT(map())); - tabSignalMapper->setMapping(a, i); - } - connect(tabSignalMapper, SIGNAL(mapped(int)), m_view, SLOT(switchToTab(int))); - - // shortcuts for loading favorite pages - QSignalMapper *favoritesSignalMapper = new QSignalMapper(this); - for (int i = 1; i <= 9; ++i) - { - a = new KAction(i18n("Switch to Favorite Page %1", i), this); - a->setShortcut(KShortcut(QString("Ctrl+%1").arg(i))); - actionCollection()->addAction(QL1S(QString("switch_favorite_" + QString::number(i)).toAscii()), a); - connect(a, SIGNAL(triggered(bool)), favoritesSignalMapper, SLOT(map())); - favoritesSignalMapper->setMapping(a, i); - } - connect(favoritesSignalMapper, SIGNAL(mapped(int)), m_view, SLOT(loadFavorite(int))); - - // ============================== Indexed Tab Actions ==================================== - a = new KAction(KIcon("tab-close"), i18n("&Close Tab"), this); - a->setShortcuts(KStandardShortcut::close()); - actionCollection()->addAction(QL1S("close_tab"), a); - connect(a, SIGNAL(triggered(bool)), m_view->tabBar(), SLOT(closeTab())); - - a = new KAction(KIcon("tab-duplicate"), i18n("Clone Tab"), this); - actionCollection()->addAction(QL1S("clone_tab"), a); - connect(a, SIGNAL(triggered(bool)), m_view->tabBar(), SLOT(cloneTab())); - - a = new KAction(KIcon("tab-close-other"), i18n("Close &Other Tabs"), this); - actionCollection()->addAction(QL1S("close_other_tabs"), a); - connect(a, SIGNAL(triggered(bool)), m_view->tabBar(), SLOT(closeOtherTabs())); - - a = new KAction(KIcon("view-refresh"), i18n("Reload Tab"), this); - actionCollection()->addAction(QL1S("reload_tab"), a); - connect(a, SIGNAL(triggered(bool)), m_view->tabBar(), SLOT(reloadTab())); - - a = new KAction(KIcon("tab-detach"), i18n("Detach Tab"), this); - actionCollection()->addAction(QL1S("detach_tab"), a); - connect(a, SIGNAL(triggered(bool)), m_view->tabBar(), SLOT(detachTab())); - - // Bookmark Menu - KActionMenu *bmMenu = rApp->bookmarkManager()->bookmarkActionMenu(this); - bmMenu->setIcon(KIcon("bookmarks")); - bmMenu->setDelayed(false); - bmMenu->setShortcutConfigurable(true); - bmMenu->setShortcut(KShortcut(Qt::ALT + Qt::Key_B)); - actionCollection()->addAction(QL1S("bookmarksActionMenu"), bmMenu); - - // Bookmark Toolbar - a = new KAction(KIcon("bookmarks-bar"), i18n("Bookmarks Toolbar"), this); - a->setCheckable(true); - actionCollection()->addAction(QL1S("show_bookmarks_toolbar"), a); - connect(a, SIGNAL(toggled(bool)), this, SLOT(toggleBookmarkBarVisible(bool))); - - // User Agent - a = new KAction(KIcon("preferences-web-browser-identification"), i18n("Browser Identification"), this); - actionCollection()->addAction(QL1S("useragent"), a); - KMenu *uaMenu = new KMenu(this); - a->setMenu(uaMenu); - connect(uaMenu, SIGNAL(aboutToShow()), this, SLOT(populateUserAgentMenu())); - - // Editable Page - a = new KAction(KIcon("document-edit"), i18n("Set Editable"), this); - a->setCheckable(true); - actionCollection()->addAction(QL1S("set_editable"), a); - connect(a, SIGNAL(triggered(bool)), this, SLOT(setEditable(bool))); - - // Adblock - a = new KAction(KIcon("preferences-web-browser-adblock"), i18n("Ad Block"), this); - actionCollection()->addAction(QL1S("adblock"), a); - connect(a, SIGNAL(triggered(bool)), rApp->adblockManager(), SLOT(showSettings())); - - // Web Applications - a = new KAction(KIcon("applications-internet"), i18n("Create application shortcut"), this); - actionCollection()->addAction(QL1S("webapp_shortcut"), a); - connect(a, SIGNAL(triggered(bool)), rApp, SLOT(createWebAppShortcut())); - - // Sync action - a = new KAction(KIcon("tools-wizard"), i18n("Sync"), this); // FIXME sync icon!! - actionCollection()->addAction(QL1S("sync"), a); - connect(a, SIGNAL(triggered(bool)), rApp->syncManager(), SLOT(showSettings())); -} - - -void MainWindow::setupTools() -{ - KActionMenu *toolsAction = new KActionMenu(KIcon("configure"), i18n("&Tools"), this); - toolsAction->setDelayed(false); - toolsAction->setShortcutConfigurable(true); - toolsAction->setShortcut(KShortcut(Qt::ALT + Qt::Key_T)); - m_rekonqMenu = new RekonqMenu(this); - toolsAction->setMenu(m_rekonqMenu); // dummy menu to have the dropdown arrow - - // adding rekonq_tools to rekonq actionCollection - actionCollection()->addAction(QL1S("rekonq_tools"), toolsAction); -} - - -void MainWindow::setupPanels() -{ - KAction* a; - - // STEP 1 - // Setup history panel - const QString historyTitle = i18n("History Panel"); - m_historyPanel = new HistoryPanel(historyTitle, this); - connect(m_historyPanel, SIGNAL(openUrl(KUrl, Rekonq::OpenType)), - rApp, SLOT(loadUrl(KUrl, Rekonq::OpenType))); - connect(m_historyPanel, SIGNAL(itemHovered(QString)), this, SLOT(notifyMessage(QString))); - connect(m_historyPanel, SIGNAL(destroyed()), rApp, SLOT(saveConfiguration())); - - addDockWidget(Qt::LeftDockWidgetArea, m_historyPanel); - - // setup history panel action - a = new KAction(KIcon("view-history"), historyTitle, this); - a->setShortcut(KShortcut(Qt::CTRL + Qt::Key_H)); - actionCollection()->addAction(QL1S("show_history_panel"), a); - a->setCheckable(true); - connect(a, SIGNAL(triggered(bool)), m_historyPanel, SLOT(setVisible(bool))); - connect(m_historyPanel, SIGNAL(visibilityChanged(bool)), a, SLOT(setChecked(bool))); - - // STEP 2 - // Setup bookmarks panel - const QString bookmarksTitle = i18n("Bookmarks Panel"); - m_bookmarksPanel = new BookmarksPanel(bookmarksTitle, this); - connect(m_bookmarksPanel, SIGNAL(openUrl(KUrl, Rekonq::OpenType)), - rApp, SLOT(loadUrl(KUrl, Rekonq::OpenType))); - connect(m_bookmarksPanel, SIGNAL(itemHovered(QString)), this, SLOT(notifyMessage(QString))); - connect(m_bookmarksPanel, SIGNAL(destroyed()), rApp, SLOT(saveConfiguration())); - - addDockWidget(Qt::LeftDockWidgetArea, m_bookmarksPanel); - - rApp->bookmarkManager()->registerBookmarkPanel(m_bookmarksPanel); - - // setup bookmarks panel action - a = new KAction(KIcon("bookmarks-organize"), bookmarksTitle, this); - a->setShortcut(KShortcut(Qt::CTRL + Qt::SHIFT + Qt::Key_B)); - actionCollection()->addAction(QL1S("show_bookmarks_panel"), a); - a->setCheckable(true); - connect(a, SIGNAL(triggered(bool)), m_bookmarksPanel, SLOT(setVisible(bool))); - connect(m_bookmarksPanel, SIGNAL(visibilityChanged(bool)), a, SLOT(setChecked(bool))); - - // STEP 3 - // Setup webinspector panel - m_webInspectorPanel = new WebInspectorPanel(i18n("Web Inspector"), this); - connect(mainView(), SIGNAL(currentChanged(int)), m_webInspectorPanel, SLOT(changeCurrentPage())); - - a = new KAction(KIcon("tools-report-bug"), i18n("Web &Inspector"), this); - a->setCheckable(true); - actionCollection()->addAction(QL1S("web_inspector"), a); - connect(a, SIGNAL(triggered(bool)), m_webInspectorPanel, SLOT(toggle(bool))); - - addDockWidget(Qt::BottomDockWidgetArea, m_webInspectorPanel); - m_webInspectorPanel->hide(); - - // STEP 4 - // Setup Network analyzer panel - m_analyzerPanel = new NetworkAnalyzerPanel(i18n("Network Analyzer"), this); - connect(mainView(), SIGNAL(currentChanged(int)), m_analyzerPanel, SLOT(changeCurrentPage())); - - a = new KAction(KIcon("document-edit-decrypt-verify"), i18n("Network Analyzer"), this); - a->setCheckable(true); - actionCollection()->addAction(QL1S("net_analyzer"), a); - connect(a, SIGNAL(triggered(bool)), this, SLOT(enableNetworkAnalysis(bool))); - - addDockWidget(Qt::BottomDockWidgetArea, m_analyzerPanel); - m_analyzerPanel->hide(); -} - - -void MainWindow::finalizeGUI(KXMLGUIClient* client) -{ - KXmlGuiWindow::finalizeGUI(client); - - // update rekonqMenu when GUI has changed - KMenu *m = qobject_cast<KMenu*>(factory()->container("rekonqMenu", this)); - if (m) - m_rekonqMenu->addActions(m->actions()); - else - kDebug() << " ====================== " - << "Could not get the rekonqMenu menu. Maybe the rekonqui.rc file wasn't found." - << "Was rekonq installed correctly?" - << " ====================== "; -} - - -void MainWindow::readProperties(const KConfigGroup& config) -{ - Q_UNUSED(config) - - Application::instance()->sessionManager()->restoreMainWindow(this); -} - - -void MainWindow::openLocation() -{ - if (isFullScreen()) - { - setWidgetsVisible(true); - } - m_view->currentUrlBar()->selectAll(); - m_view->currentUrlBar()->setFocus(); -} - - -void MainWindow::fileSaveAs() -{ - WebTab *w = currentTab(); - KUrl srcUrl = w->url(); - - if (currentTab()->page()->isOnRekonqPage()) - { - KParts::ReadOnlyPart *p = currentTab()->part(); - if (p) - { - // if this is a KParts document then the w->url() will be empty and the srcUrl - // must be set to the document url - srcUrl = p->url(); - } - } - - // First, try with suggested file name... - QString name = w->page()->suggestedFileName(); - - // Second, with KUrl fileName... - if (name.isEmpty()) - { - name = srcUrl.fileName(); - } - - // Last chance... - if (name.isEmpty()) - { - name = srcUrl.host() + QString(".html"); - } - - const KUrl destUrl = KFileDialog::getSaveUrl(name, QString(), this); - if (destUrl.isEmpty()) - return; - - if (w->page()->isContentEditable()) - { - QString code = w->page()->mainFrame()->toHtml(); - QFile file(destUrl.url()); - if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) - return; - - QTextStream out(&file); - out << code; - - return; - } - - KIO::Job *job = KIO::file_copy(srcUrl, destUrl, -1, KIO::Overwrite); - job->addMetaData("MaxCacheSize", "0"); // Don't store in http cache. - job->addMetaData("cache", "cache"); // Use entry from cache if available. - job->uiDelegate()->setAutoErrorHandlingEnabled(true); -} - - -void MainWindow::preferences() -{ - // an instance the dialog could be already created and could be cached, - // in which case you want to display the cached dialog - if (SettingsDialog::showDialog("rekonfig")) - return; - - // we didn't find an instance of this dialog, so lets create it - QPointer<SettingsDialog> s = new SettingsDialog(this); - - // keep us informed when the user changes settings - connect(s, SIGNAL(settingsChanged(QString)), rApp, SLOT(updateConfiguration())); - connect(s, SIGNAL(finished(int)), s, SLOT(deleteLater())); - - s->show(); -} - - -void MainWindow::updateHistoryActions() -{ - bool rekonqPage = currentTab()->page()->isOnRekonqPage(); - - QAction *historyBackAction = actionByName(KStandardAction::name(KStandardAction::Back)); - if (rekonqPage && currentTab()->view()->history()->count() > 0) - historyBackAction->setEnabled(true); - else - historyBackAction->setEnabled(currentTab()->view()->history()->canGoBack()); - - QAction *historyForwardAction = actionByName(KStandardAction::name(KStandardAction::Forward)); - historyForwardAction->setEnabled(currentTab()->view()->history()->canGoForward()); -} - - -void MainWindow::updateWindowTitle(const QString &title) -{ - QWebSettings *settings = QWebSettings::globalSettings(); - if (title.isEmpty()) - { - if (settings->testAttribute(QWebSettings::PrivateBrowsingEnabled)) - { - setWindowTitle(i18nc("Window title when private browsing is activated", "rekonq (Private Browsing)")); - } - else - { - setWindowTitle("rekonq"); - } - } - else - { - if (settings->testAttribute(QWebSettings::PrivateBrowsingEnabled)) - { - setWindowTitle(i18nc("window title, %1 = title of the active website", "%1 – rekonq (Private Browsing)", title)); - } - else - { - setWindowTitle(i18nc("window title, %1 = title of the active website", "%1 – rekonq", title)); - } - } -} - - -void MainWindow::fileOpen() -{ - QString filePath = KFileDialog::getOpenFileName(KUrl(), - i18n("*.html *.htm *.svg *.png *.gif *.svgz|Web Resources (*.html *.htm *.svg *.png *.gif *.svgz)\n" - "*.*|All files (*.*)"), - this, - i18n("Open Web Resource")); - - if (filePath.isEmpty()) - return; - - rApp->loadUrl(filePath); -} - - -void MainWindow::printRequested(QWebFrame *frame) -{ - if (!currentTab()) - return; - - if (currentTab()->page()->isOnRekonqPage()) - { - // trigger print part action instead of ours.. - KParts::ReadOnlyPart *p = currentTab()->part(); - if (p) - { - KParts::BrowserExtension *ext = p->browserExtension(); - if (ext) - { - KParts::BrowserExtension::ActionSlotMap *actionSlotMap = KParts::BrowserExtension::actionSlotMapPtr(); - - connect(this, SIGNAL(triggerPartPrint()), ext, actionSlotMap->value("print")); - emit triggerPartPrint(); - - return; - } - } - } - - QWebFrame *printFrame = 0; - if (frame == 0) - { - printFrame = currentTab()->page()->mainFrame(); - } - else - { - printFrame = frame; - } - - QPrinter printer; - printer.setDocName(printFrame->title()); - QPrintDialog *printDialog = KdePrint::createPrintDialog(&printer, this); - - if (printDialog) //check if the Dialog was created - { - if (printDialog->exec()) - printFrame->print(&printer); - - delete printDialog; - } -} - - -void MainWindow::find(const QString & search) -{ - if (!currentTab()) - return; - m_lastSearch = search; - - updateHighlight(); - findNext(); -} - - -void MainWindow::matchCaseUpdate() -{ - if (!currentTab()) - return; - - currentTab()->view()->findText(m_lastSearch, QWebPage::FindBackward); - findNext(); - updateHighlight(); -} - - -void MainWindow::findNext() -{ - if (!currentTab()) - return; - - if (currentTab()->page()->isOnRekonqPage()) - { - // trigger part find action - KParts::ReadOnlyPart *p = currentTab()->part(); - if (p) - { - connect(this, SIGNAL(triggerPartFind()), p, SLOT(slotFind())); - emit triggerPartFind(); - return; - } - } - - if (m_findBar->isHidden()) - { - QPoint previous_position = currentTab()->view()->page()->currentFrame()->scrollPosition(); - currentTab()->view()->page()->focusNextPrevChild(true); - currentTab()->view()->page()->currentFrame()->setScrollPosition(previous_position); - return; - } - - QWebPage::FindFlags options = QWebPage::FindWrapsAroundDocument; - if (m_findBar->matchCase()) - options |= QWebPage::FindCaseSensitively; - - bool found = currentTab()->view()->findText(m_lastSearch, options); - m_findBar->notifyMatch(found); - - if (!found) - { - QPoint previous_position = currentTab()->view()->page()->currentFrame()->scrollPosition(); - currentTab()->view()->page()->focusNextPrevChild(true); - currentTab()->view()->page()->currentFrame()->setScrollPosition(previous_position); - } -} - - -void MainWindow::findPrevious() -{ - if (!currentTab()) - return; - - QWebPage::FindFlags options = QWebPage::FindBackward | QWebPage::FindWrapsAroundDocument; - if (m_findBar->matchCase()) - options |= QWebPage::FindCaseSensitively; - - bool found = currentTab()->view()->findText(m_lastSearch, options); - m_findBar->notifyMatch(found); -} - - -void MainWindow::updateHighlight() -{ - if (!currentTab()) - return; - - QWebPage::FindFlags options = QWebPage::HighlightAllOccurrences; - - currentTab()->view()->findText("", options); //Clear an existing highlight - - if (m_findBar->highlightAllState() && !m_findBar->isHidden()) - { - if (m_findBar->matchCase()) - options |= QWebPage::FindCaseSensitively; - - currentTab()->view()->findText(m_lastSearch, options); - } -} - - -void MainWindow::findSelectedText() -{ - // FindBar::setVisible() gets the selected text by itself - m_findBar->show(); -} - - -void MainWindow::viewFullScreen(bool makeFullScreen) -{ - setWidgetsVisible(!makeFullScreen); - KToggleFullScreenAction::setFullScreen(this, makeFullScreen); -} - - -void MainWindow::openDownloadsPage() -{ - rApp->loadUrl(KUrl("about:downloads"), Rekonq::NewFocusedTab); -} - - -void MainWindow::setWidgetsVisible(bool makeVisible) -{ - // state flags - static bool bookmarksToolBarFlag; - static bool historyPanelFlag; - static bool bookmarksPanelFlag; - - KToolBar *mainBar = toolBar("mainToolBar"); - KToolBar *bookBar = toolBar("bookmarkToolBar"); - - if (!makeVisible) - { - // save current state, if in windowed mode - if (!isFullScreen()) - { - bookmarksToolBarFlag = bookBar->isHidden(); - historyPanelFlag = m_historyPanel->isHidden(); - bookmarksPanelFlag = m_bookmarksPanel->isHidden(); - } - - bookBar->hide(); - m_view->tabBar()->hide(); - m_historyPanel->hide(); - m_bookmarksPanel->hide(); - - // hide main toolbar - mainBar->hide(); - } - else - { - // show main toolbar - mainBar->show(); - m_view->tabBar()->show(); - - // restore state of windowed mode - if (!bookmarksToolBarFlag) - bookBar->show(); - if (!historyPanelFlag) - m_historyPanel->show(); - if (!bookmarksPanelFlag) - m_bookmarksPanel->show(); - } -} - - -QString MainWindow::selectedText() const -{ - if (!currentTab()) - return QString(); - - return currentTab()->view()->selectedText(); -} - - -void MainWindow::viewPageSource() -{ - WebTab * w = currentTab(); - - if (!w) - return; - - KUrl url = w->url(); - QString code = w->page()->mainFrame()->toHtml(); - - KTemporaryFile tmpFile; - tmpFile.setAutoRemove(false); - if (!tmpFile.open()) - return; - - QTextStream out(&tmpFile); - out << code; - tmpFile.close(); - KUrl tmpUrl(tmpFile.fileName()); - - KParts::ReadOnlyPart *pa = KMimeTypeTrader::createPartInstanceFromQuery<KParts::ReadOnlyPart>(QL1S("text/plain"), w, this, QString()); - if (pa) - { - WebTab *srcTab = m_view->newWebTab(true); - srcTab->page()->setIsOnRekonqPage(true); - srcTab->setPart(pa, tmpUrl); - srcTab->urlBar()->setQUrl(url.pathOrUrl()); - m_view->setTabText(m_view->currentIndex(), i18n("Source of: ") + url.prettyUrl()); - updateHistoryActions(); - } - else - KRun::runUrl(tmpUrl, QL1S("text/plain"), this, false); -} - - -void MainWindow::homePage() -{ - KUrl homeUrl = ReKonfig::useNewTabPage() - ? KUrl(QL1S("about:home")) - : KUrl(ReKonfig::homePage()); - - currentTab()->view()->load(homeUrl); -} - - -WebTab *MainWindow::currentTab() const -{ - return m_view->currentWebTab(); -} - - -void MainWindow::updateTabActions() -{ - m_loadStopReloadAction->disconnect(); - - if (m_view->currentUrlBar()->hasFocus()) - { - m_loadStopReloadAction->disconnect(); - - m_loadStopReloadAction->setIcon(KIcon("go-jump-locationbar")); - m_loadStopReloadAction->setToolTip(i18n("Go")); - m_loadStopReloadAction->setText(i18n("Go")); - - connect(m_loadStopReloadAction, SIGNAL(triggered(bool)), m_view->currentUrlBar(), SLOT(loadDigitedUrl())); - return; - } - - QAction *stop = actionCollection()->action(QL1S("stop")); - QAction *reload = actionCollection()->action(QL1S("view_redisplay")); - - if (currentTab()->isPageLoading()) - { - m_loadStopReloadAction->setIcon(KIcon("process-stop")); - m_loadStopReloadAction->setToolTip(i18n("Stop loading the current page")); - m_loadStopReloadAction->setText(i18n("Stop")); - connect(m_loadStopReloadAction, SIGNAL(triggered(bool)), stop, SIGNAL(triggered(bool))); - stop->setEnabled(true); - } - else - { - m_loadStopReloadAction->setIcon(KIcon("view-refresh")); - m_loadStopReloadAction->setToolTip(i18n("Reload the current page")); - m_loadStopReloadAction->setText(i18n("Reload")); - connect(m_loadStopReloadAction, SIGNAL(triggered(bool)), reload, SIGNAL(triggered(bool))); - stop->setEnabled(false); - - updateHistoryActions(); - } -} - - -void MainWindow::openPrevious(Qt::MouseButtons mouseButtons, Qt::KeyboardModifiers keyboardModifiers) -{ - QWebHistory *history = currentTab()->view()->history(); - QWebHistoryItem *item = 0; - - if (currentTab()->page()->isOnRekonqPage()) - { - item = new QWebHistoryItem(history->currentItem()); - } - else - { - if (history->canGoBack()) - { - item = new QWebHistoryItem(history->backItem()); - } - } - - if (!item) - return; - - if (mouseButtons == Qt::MidButton || keyboardModifiers == Qt::ControlModifier) - { - rApp->loadUrl(item->url(), Rekonq::NewTab); - } - else - { - history->goToItem(*item); - } - - updateHistoryActions(); -} - - -void MainWindow::openNext(Qt::MouseButtons mouseButtons, Qt::KeyboardModifiers keyboardModifiers) -{ - QWebHistory *history = currentTab()->view()->history(); - QWebHistoryItem *item = 0; - - if (currentTab()->view()->page()->isOnRekonqPage()) - { - item = new QWebHistoryItem(history->currentItem()); - } - else - { - if (history->canGoForward()) - { - item = new QWebHistoryItem(history->forwardItem()); - } - } - - if (!item) - return; - - if (mouseButtons == Qt::MidButton || keyboardModifiers == Qt::ControlModifier) - { - rApp->loadUrl(item->url(), Rekonq::NewTab); - } - else - { - history->goToItem(*item); - } - - updateHistoryActions(); -} - - -void MainWindow::keyPressEvent(QKeyEvent *event) -{ - // ctrl + tab action - if ((event->modifiers() == Qt::ControlModifier) && (event->key() == Qt::Key_Tab)) - { - emit ctrlTabPressed(); - event->accept(); - return; - } - - // shift + ctrl + tab action - if ((event->modifiers() == Qt::ControlModifier + Qt::ShiftModifier) && (event->key() == Qt::Key_Backtab)) - { - emit shiftCtrlTabPressed(); - event->accept(); - return; - } - - KMainWindow::keyPressEvent(event); -} - - -bool MainWindow::event(QEvent *event) -{ - // Avoid a conflict with window-global actions - if (event->type() == QEvent::ShortcutOverride || event->type() == QEvent::KeyPress) - { - QKeyEvent *kev = static_cast<QKeyEvent *>(event); - if (kev->key() == Qt::Key_Escape) - { - // if zoombar is visible, hide it - if (m_zoomBar->isVisible()) - { - m_zoomBar->hide(); - event->accept(); - currentTab()->setFocus(); - return true; - } - - // if findbar is visible, hide it - if (m_findBar->isVisible()) - { - m_findBar->hide(); - event->accept(); - currentTab()->setFocus(); - return true; - } - } - } - - return KMainWindow::event(event); -} - - -void MainWindow::notifyMessage(const QString &msg, Rekonq::Notify status) -{ - // deleting popus if empty msgs - if (msg.isEmpty()) - { - m_hidePopupTimer->start(250); - return; - } - - m_hidePopupTimer->stop(); - - switch (status) - { - case Rekonq::Info: - m_hidePopupTimer->start(500); - break; - case Rekonq::Url: - case Rekonq::Success: - case Rekonq::Error: - case Rekonq::Download: - m_hidePopupTimer->start(3000); - break; - default: - break; - } - - QString msgToShow = Qt::escape(msg); - - // useful values - WebTab *tab = m_view->currentWebTab(); - - // fix crash on window close - if (!tab || !tab->page()) - return; - - const int margin = 4; - const int halfWidth = width() / 2; - - // Set Popup size - QFontMetrics fm = m_popup->fontMetrics(); - QSize labelSize(fm.width(msgToShow) + 2 * margin, fm.height() + 2 * margin); - - if (labelSize.width() > halfWidth) - labelSize.setWidth(halfWidth); - - m_popup->setFixedSize(labelSize); - m_popup->setText(fm.elidedText(msgToShow, Qt::ElideMiddle, labelSize.width() - 2 * margin)); - - // NOTE: while currentFrame should NEVER be null - // we are checking here its existence cause of bug:264187 - if (!tab->page()->currentFrame()) - return; - - const bool horizontalScrollbarIsVisible = tab->page()->currentFrame()->scrollBarMaximum(Qt::Horizontal); - const bool verticalScrollbarIsVisible = tab->page()->currentFrame()->scrollBarMaximum(Qt::Vertical); - const bool actionBarsVisible = m_findBar->isVisible() || m_zoomBar->isVisible(); - - const int scrollbarExtent = style()->pixelMetric(QStyle::PM_ScrollBarExtent); - const int hScrollbarSize = horizontalScrollbarIsVisible ? scrollbarExtent : 0; - const int vScrollbarSize = verticalScrollbarIsVisible ? scrollbarExtent : 0; - - const QPoint mousePos = mapFromGlobal(QCursor::pos()); - const QPoint bottomPoint = m_view->mapTo(this, m_view->geometry().bottomLeft()); - - int y = bottomPoint.y() + 1 - m_popup->height() - hScrollbarSize; // +1 because bottom() returns top() + height() - 1, see QRect doku - int x = QRect(QPoint(0, y), labelSize).contains(mousePos) || actionBarsVisible - ? width() - labelSize.width() - vScrollbarSize - : 0; - - m_popup->move(x, y); - m_popup->show(); -} - - -void MainWindow::clearPrivateData() -{ - QPointer<KDialog> dialog = new KDialog(this); - dialog->setCaption(i18nc("@title:window", "Clear Private Data")); - dialog->setButtons(KDialog::Ok | KDialog::Cancel); - - dialog->button(KDialog::Ok)->setIcon(KIcon("edit-clear")); - dialog->button(KDialog::Ok)->setText(i18n("Clear")); - - Ui::ClearDataWidget clearWidget; - QWidget widget; - clearWidget.setupUi(&widget); - clearWidget.clearHistory->setChecked(ReKonfig::clearHistory()); - clearWidget.clearDownloads->setChecked(ReKonfig::clearDownloads()); - clearWidget.clearCookies->setChecked(ReKonfig::clearCookies()); - clearWidget.clearCachedPages->setChecked(ReKonfig::clearCachedPages()); - clearWidget.clearWebIcons->setChecked(ReKonfig::clearWebIcons()); - clearWidget.homePageThumbs->setChecked(ReKonfig::clearHomePageThumbs()); - - dialog->setMainWidget(&widget); - dialog->exec(); - - if (dialog->result() == QDialog::Accepted) - { - //Save current state - ReKonfig::setClearHistory(clearWidget.clearHistory->isChecked()); - ReKonfig::setClearDownloads(clearWidget.clearDownloads->isChecked()); - ReKonfig::setClearCookies(clearWidget.clearDownloads->isChecked()); - ReKonfig::setClearCachedPages(clearWidget.clearCachedPages->isChecked()); - ReKonfig::setClearWebIcons(clearWidget.clearWebIcons->isChecked()); - ReKonfig::setClearHomePageThumbs(clearWidget.homePageThumbs->isChecked()); - - if (clearWidget.clearHistory->isChecked()) - { - rApp->historyManager()->clear(); - } - - if (clearWidget.clearDownloads->isChecked()) - { - rApp->downloadManager()->clearDownloadsHistory(); - } - - if (clearWidget.clearCookies->isChecked()) - { - QDBusInterface kcookiejar("org.kde.kded", "/modules/kcookiejar", "org.kde.KCookieServer"); - QDBusReply<void> reply = kcookiejar.call("deleteAllCookies"); - } - - if (clearWidget.clearCachedPages->isChecked()) - { - KProcess::startDetached(KStandardDirs::findExe("kio_http_cache_cleaner"), - QStringList(QL1S("--clear-all"))); - } - - if (clearWidget.clearWebIcons->isChecked()) - { - rApp->iconManager()->clearIconCache(); - } - - if (clearWidget.homePageThumbs->isChecked()) - { - QString path = KStandardDirs::locateLocal("cache", QString("thumbs/rekonq"), true); - path.remove("rekonq"); - QDir cacheDir(path); - QStringList fileList = cacheDir.entryList(); - Q_FOREACH(const QString & str, fileList) - { - QFile file(path + str); - file.remove(); - } - } - } - - dialog->deleteLater(); -} - - -void MainWindow::aboutToShowBackMenu() -{ - m_historyBackMenu->clear(); - if (!currentTab()) - return; - QWebHistory *history = currentTab()->view()->history(); - int pivot = history->currentItemIndex(); - int offset = 0; - const int maxItemNumber = 8; // no more than 8 elements in the Back History Menu! - QList<QWebHistoryItem> historyList = history->backItems(maxItemNumber); - int listCount = historyList.count(); - if (pivot >= maxItemNumber) - offset = pivot - maxItemNumber; - - if (currentTab()->view()->page()->isOnRekonqPage()) - { - QWebHistoryItem item = history->currentItem(); - KAction *action = new KAction(this); - action->setData(listCount + offset++); - KIcon icon = rApp->iconManager()->iconForUrl(item.url()); - action->setIcon(icon); - action->setText(item.title()); - m_historyBackMenu->addAction(action); - } - - for (int i = listCount - 1; i >= 0; --i) - { - QWebHistoryItem item = historyList.at(i); - KAction *action = new KAction(this); - action->setData(i + offset); - KIcon icon = rApp->iconManager()->iconForUrl(item.url()); - action->setIcon(icon); - action->setText(item.title()); - m_historyBackMenu->addAction(action); - } -} - - -void MainWindow::aboutToShowForwardMenu() -{ - m_historyForwardMenu->clear(); - - if (!currentTab()) - return; - - QWebHistory *history = currentTab()->view()->history(); - const int pivot = history->currentItemIndex(); - int offset = 0; - const int maxItemNumber = 8; // no more than 8 elements in the Forward History Menu! - QList<QWebHistoryItem> historyList = history->forwardItems(maxItemNumber); - int listCount = historyList.count(); - - if (pivot >= maxItemNumber) - offset = pivot - maxItemNumber; - - if (currentTab()->view()->page()->isOnRekonqPage()) - { - QWebHistoryItem item = history->currentItem(); - KAction *action = new KAction(this); - action->setData(listCount + offset++); - KIcon icon = rApp->iconManager()->iconForUrl(item.url()); - action->setIcon(icon); - action->setText(item.title()); - m_historyForwardMenu->addAction(action); - } - - for (int i = 1; i <= listCount; i++) - { - QWebHistoryItem item = historyList.at(i - 1); - KAction *action = new KAction(this); - action->setData(pivot + i + offset); - KIcon icon = rApp->iconManager()->iconForUrl(item.url()); - action->setIcon(icon); - action->setText(item.title()); - m_historyForwardMenu->addAction(action); - } -} - - -void MainWindow::aboutToShowTabListMenu() -{ - m_tabListMenu->clear(); - for (int i = 0; i < m_view->count(); ++i) - { - KAction *action = new KAction(m_view->tabText(i), this); - action->setIcon(rApp->iconManager()->iconForUrl(m_view->webTab(i)->url()).pixmap(16, 16)); - action->setData(i); - if (mainView()->tabBar()->currentIndex() == i) - { - QFont font = action->font(); - font.setBold(true); - action->setFont(font); - } - m_tabListMenu->addAction(action); - } - m_tabListMenu->adjustSize(); -} - - -void MainWindow::openActionUrl(QAction *action) -{ - int index = action->data().toInt(); - - QWebHistory *history = currentTab()->view()->history(); - if (!history->itemAt(index).isValid()) - { - kDebug() << "Invalid Index!: " << index; - return; - } - - history->goToItem(history->itemAt(index)); -} - - -void MainWindow::openActionTab(QAction* action) -{ - int index = action->data().toInt(); - if (index < 0 || index >= m_view->count()) - { - kDebug() << "Invalid Index!: " << index; - return; - } - m_view->setCurrentIndex(index); -} - - -void MainWindow::enableNetworkAnalysis(bool b) -{ - currentTab()->page()->enableNetworkAnalyzer(b); - m_analyzerPanel->toggle(b); -} - - -void MainWindow::saveNewToolbarConfig() -{ - KXmlGuiWindow::saveNewToolbarConfig(); - setupBookmarksAndToolsShortcuts(); -} - - -void MainWindow::setupBookmarksAndToolsShortcuts() -{ - KToolBar *mainBar = toolBar("mainToolBar"); - - QToolButton *bookmarksButton = qobject_cast<QToolButton*>(mainBar->widgetForAction(actionByName(QL1S("bookmarksActionMenu")))); - if (bookmarksButton) - { - connect(actionByName(QL1S("bookmarksActionMenu")), SIGNAL(triggered()), bookmarksButton, SLOT(showMenu())); - } - - QToolButton *toolsButton = qobject_cast<QToolButton*>(mainBar->widgetForAction(actionByName(QL1S("rekonq_tools")))); - if (toolsButton) - { - connect(actionByName(QL1S("rekonq_tools")), SIGNAL(triggered()), toolsButton, SLOT(showMenu())); - - // HACK: set button widget in rekonq menu - m_rekonqMenu->setButtonWidget(toolsButton); - return; - } - - kWarning() << "oh oh, something went wrong with rekonq tools button..."; -} - - -void MainWindow::moveEvent(QMoveEvent *event) -{ - if (m_hidePopupTimer) - m_hidePopupTimer->stop(); - if (m_popup) - m_popup->hide(); - - KMainWindow::moveEvent(event); -} - - -void MainWindow::resizeEvent(QResizeEvent *event) -{ - if (m_hidePopupTimer) - m_hidePopupTimer->stop(); - if (m_popup) - m_popup->hide(); - - KMainWindow::resizeEvent(event); -} - - -void MainWindow::setEditable(bool on) -{ - currentTab()->page()->setContentEditable(on); -} - - -void MainWindow::closeEvent(QCloseEvent *event) -{ - emit windowClosing(); - kDebug() << "CLOSING WINDOW..."; - KXmlGuiWindow::closeEvent(event); -} - - -void MainWindow::populateUserAgentMenu() -{ - KMenu *uaMenu = static_cast<KMenu *>(QObject::sender()); - if (!uaMenu) - { - kDebug() << "oops... NO user agent menu"; - return; - } - WebTab *w = currentTab(); - if (!w) - { - kDebug() << "oh oh... NO current tab. What is it happening here???"; - return; - } - - rApp->userAgentManager()->populateUAMenuForTabUrl(uaMenu, w); -} - - -void MainWindow::loadUrl(const KUrl& url, - const Rekonq::OpenType& type, - QWebHistory *webHistory - ) -{ - if (url.isEmpty()) - return; - - if (!url.isValid()) - { - KMessageBox::error(0, i18n("Malformed URL:\n%1", url.url(KUrl::RemoveTrailingSlash))); - return; - } - - Rekonq::OpenType newType = type; - // Don't open useless tabs or windows for actions in about: pages - if (url.url().contains("about:") && url.url().contains("/")) - newType = Rekonq::CurrentTab; - - loadCheckedUrl(url, newType, webHistory); -} - - -void MainWindow::loadCheckedUrl(const KUrl& url, const Rekonq::OpenType& type, QWebHistory *webHistory) -{ - // NOTE: At this point, url should just be resolved via urlresolver. - // No need to check it twice - - WebTab *tab = 0; - switch (type) - { - case Rekonq::NewTab: - tab = mainView()->newWebTab(!ReKonfig::openNewTabsInBackground()); - break; - case Rekonq::NewFocusedTab: - tab = mainView()->newWebTab(true); - break; - case Rekonq::NewBackGroundTab: - tab = mainView()->newWebTab(false); - break; - case Rekonq::NewWindow: - rApp->loadUrl(url, type); - return; - case Rekonq::CurrentTab: - default: - tab = mainView()->currentWebTab(); - break; - }; - - // rapidly show first loading url.. - int tabIndex = mainView()->indexOf(tab); - Q_ASSERT(tabIndex != -1); - UrlBar *barForTab = qobject_cast<UrlBar *>(mainView()->widgetBar()->widget(tabIndex)); - barForTab->activateSuggestions(false); - barForTab->setQUrl(url); - - WebView *view = tab->view(); - if (view) - { - view->load(url); - - if (webHistory) - { - QByteArray historyBytes; - QDataStream historyStream(&historyBytes, QIODevice::ReadWrite); - - historyStream << *webHistory; - historyStream.device()->seek(0); - historyStream >> *(view->history()); - } - } -} - - -void MainWindow::bookmarkCurrentPage() -{ - currentTab()->urlBar()->manageBookmarks(); -} diff --git a/src/mainwindow.h b/src/mainwindow.h deleted file mode 100644 index 1382046b..00000000 --- a/src/mainwindow.h +++ /dev/null @@ -1,235 +0,0 @@ - -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2008-2012 by Andrea Diamantini <adjam7 at gmail dot com> -* Copyright (C) 2009 by PaweÅ‚ Prażak <pawelprazak at gmail dot com> -* Copyright (C) 2009-2011 by Lionel Chauvin <megabigbug@yahoo.fr> -* Copyright (C) 2010 by Matthieu Gicquel <matgic78 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 MAINWINDOW_H -#define MAINWINDOW_H - -// Rekonq Includes -#include "rekonq_defines.h" - -// KDE Includes -#include <KActionCollection> -#include <KXmlGuiWindow> - -// Forward Declarations -class BookmarksPanel; -class BookmarkToolBar; -class FindBar; -class HistoryPanel; -class MainView; -class NetworkAnalyzerPanel; -class RekonqMenu; -class WebInspectorPanel; -class WebTab; -class ZoomBar; - -class QWebFrame; -class QWebHistory; -class QLabel; - - -/** - * This class serves as the main window for rekonq. - * It handles the menus, toolbars, and status bars. - * - */ -class REKONQ_TESTS_EXPORT MainWindow : public KXmlGuiWindow -{ - Q_OBJECT - -public: - MainWindow(); - ~MainWindow(); - - inline MainView *mainView() const - { - return m_view; - } - inline QAction *actionByName(const QString &name) - { - return actionCollection()->action(name); - } - - WebTab *currentTab() const; - virtual QSize sizeHint() const; - void setWidgetsVisible(bool makeFullScreen); - - QString selectedText() const; - - void loadCheckedUrl(const KUrl& url, - const Rekonq::OpenType& type = Rekonq::CurrentTab, - QWebHistory *webHistory = 0 - ); -private: - void setupBookmarksAndToolsShortcuts(); - void setupActions(); - void setupTools(); - void setupToolbars(); - void setupPanels(); - -public Q_SLOTS: - void loadUrl(const KUrl& url, - const Rekonq::OpenType& type = Rekonq::CurrentTab, - QWebHistory *webHistory = 0 - ); - - void openDownloadsPage(); - void homePage(); - - /** - * Notifies a message in a popup - * - * @param msg The message to notify - * - * @param status The status message - * - */ - void notifyMessage(const QString &msg, Rekonq::Notify status = Rekonq::Url); - - void printRequested(QWebFrame *frame = 0); - - void updateHistoryActions(); - void updateTabActions(); - - virtual void configureToolbars(); - - // Find Bar slots - void findNext(); - void findPrevious(); - void updateHighlight(); - void findSelectedText(); - - void changeWindowIcon(int index); - -Q_SIGNALS: - // switching tabs - void ctrlTabPressed(); - void shiftCtrlTabPressed(); - - void triggerPartPrint(); - void triggerPartFind(); - - void windowClosing(); - -protected Q_SLOTS: - void saveNewToolbarConfig(); - -protected: - /** - * Filters (SHIFT + ) CTRL + TAB events and emit (shift)ctrlTabPressed() - * to make switch tab - * Filters out ESC key to show/hide the search bar - */ - void keyPressEvent(QKeyEvent *event); - void moveEvent(QMoveEvent *event); - void resizeEvent(QResizeEvent *event); - void closeEvent(QCloseEvent *event); - - bool event(QEvent *event); - - void readProperties(const KConfigGroup & config); - void finalizeGUI(KXMLGUIClient *client); - -private Q_SLOTS: - void updateWindowTitle(const QString &title = QString()); - - // history related - void openPrevious(Qt::MouseButtons = Qt::LeftButton, Qt::KeyboardModifiers = Qt::NoModifier); - void openNext(Qt::MouseButtons = Qt::LeftButton, Qt::KeyboardModifiers = Qt::NoModifier); - - // Find Action slots - void find(const QString &); - void matchCaseUpdate(); - - // File Menu slots - void openLocation(); - void fileOpen(); - void fileSaveAs(); - - void viewPageSource(); - void viewFullScreen(bool enable); - - // Settings Menu slot - void preferences(); - - // clear private data - void clearPrivateData(); - - void aboutToShowBackMenu(); - void aboutToShowForwardMenu(); - - void aboutToShowTabListMenu(); - void openActionUrl(QAction *action); - void openActionTab(QAction *action); - - void populateUserAgentMenu(); - - void enableNetworkAnalysis(bool); - void setEditable(bool); - - void toggleBookmarkBarVisible(bool); - - // add bookmark - void bookmarkCurrentPage(); - - /** - * This is for the things to do ABSOLUTELY AFTER ctor launch: - * the less, the better. - */ - void postLaunch(); - -private: - MainView *m_view; - FindBar *m_findBar; - ZoomBar *m_zoomBar; - - HistoryPanel *m_historyPanel; - BookmarksPanel *m_bookmarksPanel; - WebInspectorPanel *m_webInspectorPanel; - NetworkAnalyzerPanel *m_analyzerPanel; - - KAction *m_loadStopReloadAction; - - KMenu *m_historyBackMenu; - KMenu *m_historyForwardMenu; - - KMenu *m_tabListMenu; - - BookmarkToolBar *m_bookmarksBar; - - QString m_lastSearch; - - QLabel *m_popup; - QTimer *m_hidePopupTimer; - - RekonqMenu *m_rekonqMenu; -}; - -#endif // MAINWINDOW_H diff --git a/src/messagebar.cpp b/src/messagebar.cpp deleted file mode 100644 index 0e89ac56..00000000 --- a/src/messagebar.cpp +++ /dev/null @@ -1,71 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2010-2011 by Pierre Rossi <pierre dot rossi at gmail dot com> -* Copyright (C) 2011 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 "messagebar.h" -#include "messagebar.moc" - -// KDE Includes -#include <KIcon> -#include <KIconLoader> -#include <KLocalizedString> - -// Qt Includes -#include <QAction> - - -MessageBar::MessageBar(const QString &message, QWidget *parent) - : KMessageWidget(parent) -{ - connect(this, SIGNAL(accepted()), this, SLOT(hideAndDelete())); - connect(this, SIGNAL(rejected()), this, SLOT(hideAndDelete())); - - setMessageType(KMessageWidget::Warning); - - QSize sz = size(); - sz.setWidth(qobject_cast<QWidget *>(parent)->size().width()); - resize(sz); - - setCloseButtonVisible(false); - - setText(message); - - QAction *acceptAction = new QAction(i18n("Yes"), this); - connect(acceptAction, SIGNAL(triggered(bool)), this, SIGNAL(accepted())); - addAction(acceptAction); - - QAction *rejectAction = new QAction(i18n("No"), this); - connect(rejectAction, SIGNAL(triggered(bool)), this, SIGNAL(rejected())); - addAction(rejectAction); -} - - -void MessageBar::hideAndDelete() -{ - animatedHide(); - deleteLater(); -} diff --git a/src/messagebar.h b/src/messagebar.h deleted file mode 100644 index bbf5d5d4..00000000 --- a/src/messagebar.h +++ /dev/null @@ -1,54 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2010-2011 by Pierre Rossi <pierre dot rossi at gmail dot com> -* Copyright (C) 2011 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 MESSAGEBAR_H -#define MESSAGEBAR_H - -// Rekonq Includes -#include "rekonq_defines.h" - -// KDE Includes -#include <KMessageWidget> - - -class REKONQ_TESTS_EXPORT MessageBar : public KMessageWidget -{ - Q_OBJECT - -public: - explicit MessageBar(const QString & message, QWidget *parent); - -private Q_SLOTS: - void hideAndDelete(); - -Q_SIGNALS: - void accepted(); - void rejected(); -}; - - -#endif // MESSAGEBAR_H diff --git a/src/networkaccessmanager.cpp b/src/networkaccessmanager.cpp deleted file mode 100644 index dc10da1b..00000000 --- a/src/networkaccessmanager.cpp +++ /dev/null @@ -1,120 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2007-2008 Trolltech ASA. All rights reserved -* Copyright (C) 2008-2012 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 "networkaccessmanager.h" -#include "networkaccessmanager.moc" - -// Local Includes -#include "adblockmanager.h" -#include "application.h" -#include "webpage.h" - -// KDE Includes -#include <KLocale> -#include <KProtocolManager> - -// Qt Includes -#include <QNetworkReply> -#include <QTimer> - - -class NullNetworkReply : public QNetworkReply -{ -public: - NullNetworkReply(const QNetworkRequest &req, QObject* parent = 0) - : QNetworkReply(parent) - { - setRequest(req); - setUrl(req.url()); - setHeader(QNetworkRequest::ContentLengthHeader, 0); - setHeader(QNetworkRequest::ContentTypeHeader, "text/plain"); - setError(QNetworkReply::ContentAccessDenied, i18n("Null reply")); - setAttribute(QNetworkRequest::User, QNetworkReply::ContentAccessDenied); - QTimer::singleShot(0, this, SIGNAL(finished())); - } - - virtual void abort() {} - virtual qint64 bytesAvailable() const - { - return 0; - } - -protected: - virtual qint64 readData(char*, qint64) - { - return -1; - } -}; - - -// ---------------------------------------------------------------------------------------------- - - -NetworkAccessManager::NetworkAccessManager(QObject *parent) - : AccessManager(parent) -{ - QString c = KGlobal::locale()->language(); - - if (c == QL1S("C")) - c = QL1S("en-US"); - else - c = c.replace(QL1C('_') , QL1C('-')); - - c.append(QL1S(", en-US; q=0.8, en; q=0.6")); - - _acceptLanguage = c.toLatin1(); -} - - -QNetworkReply *NetworkAccessManager::createRequest(QNetworkAccessManager::Operation op, const QNetworkRequest &request, QIODevice *outgoingData) -{ - WebPage *parentPage = qobject_cast<WebPage *>(parent()); - - // NOTE: This to get sure we are NOT serving unused requests - if (!parentPage) - return new NullNetworkReply(request, this); - - QNetworkReply *reply = 0; - - // set our "nice" accept-language header... - QNetworkRequest req = request; - req.setRawHeader("Accept-Language", _acceptLanguage); - - // Handle GET operations with AdBlock - if (op == QNetworkAccessManager::GetOperation) - reply = rApp->adblockManager()->block(req, parentPage); - - if (!reply) - reply = AccessManager::createRequest(op, req, outgoingData); - - if (parentPage->hasNetworkAnalyzerEnabled()) - emit networkData(op, req, reply); - - return reply; -} diff --git a/src/networkaccessmanager.h b/src/networkaccessmanager.h deleted file mode 100644 index 5c877bdf..00000000 --- a/src/networkaccessmanager.h +++ /dev/null @@ -1,59 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2007-2008 Trolltech ASA. All rights reserved -* Copyright (C) 2008-2012 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 NETWORKACCESSMANAGER_H -#define NETWORKACCESSMANAGER_H - - -// Rekonq Includes -#include "rekonq_defines.h" - -// KDE Includes -#include <KIO/AccessManager> - -// Qt Includes -#include <QByteArray> - - -class REKONQ_TESTS_EXPORT NetworkAccessManager : public KIO::Integration::AccessManager -{ - Q_OBJECT - -public: - NetworkAccessManager(QObject *parent); - -protected: - virtual QNetworkReply *createRequest(QNetworkAccessManager::Operation op, const QNetworkRequest &request, QIODevice *outgoingData = 0); - -Q_SIGNALS: - void networkData(QNetworkAccessManager::Operation op, const QNetworkRequest &request, QNetworkReply *reply); - -private: - QByteArray _acceptLanguage; -}; - -#endif // NETWORKACCESSMANAGER_H diff --git a/src/newtabpage.cpp b/src/newtabpage.cpp deleted file mode 100644 index a25f07a9..00000000 --- a/src/newtabpage.cpp +++ /dev/null @@ -1,1094 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2009-2012 by Andrea Diamantini <adjam7 at gmail dot com> -* Copyright (C) 2010 by Matthieu Gicquel <matgic78 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 "newtabpage.h" -#include "newtabpage.moc" - -// Auto Includes -#include "rekonq.h" - -// Local Includes -#include "application.h" -#include "bookmarkmanager.h" -#include "downloadmanager.h" -#include "iconmanager.h" -#include "historymanager.h" -#include "historymodels.h" -#include "mainview.h" -#include "mainwindow.h" -#include "previewselectorbar.h" -#include "thumbupdater.h" -#include "urlfilterproxymodel.h" -#include "websnap.h" -#include "webpage.h" -#include "webtab.h" - -// KDE Includes -#include <KBookmarkManager> -#include <KIconLoader> -#include <KLocale> -#include <KMimeType> -#include <KRun> -#include <KStandardDirs> - -// Qt Includes -#include <QFile> -#include <QAction> -#include <QWebFrame> -#include <QProcess> - - -NewTabPage::NewTabPage(QWebFrame *frame) - : QObject(frame) - , m_root(frame->documentElement()) - , m_showFullHistory(false) -{ - QString htmlFilePath = KStandardDirs::locate("data", "rekonq/htmls/home.html"); - QString dataPath = QL1S("file://") + htmlFilePath; - dataPath.remove(QL1S("/htmls/home.html")); - - QFile file(htmlFilePath); - bool isOpened = file.open(QIODevice::ReadOnly); - if (!isOpened) - { - kDebug() << "Couldn't open the home.html file"; - } - else - { - m_html = file.readAll(); - m_html.replace(QL1S("$DEFAULT_PATH"), dataPath); - } -} - - -void NewTabPage::generate(const KUrl &url) -{ - // about:preview links - if (KUrl("about:settings").isParentOf(url)) - { - if (url.fileName() == QL1S("network")) - { - QString program = QL1S("kcmshell4"); - QStringList arguments; - arguments << QL1S("kcm_networkmanagement"); - QProcess *proc = new QProcess(parent()); - proc->start(program, arguments); - return; - } - - if (url.fileName() == QL1S("proxy")) - { - QString program = QL1S("kcmshell4"); - QStringList arguments; - arguments << QL1S("proxy"); - QProcess *proc = new QProcess(parent()); - proc->start(program, arguments); - return; - } - - if (url.fileName() == QL1S("firewall")) - { - QString program = QL1S("kcmshell4"); - QStringList arguments; - arguments << QL1S("kcm-ufw"); - QProcess *proc = new QProcess(parent()); - proc->start(program, arguments); - return; - } - } - - // about:preview links - if (KUrl("about:preview").isParentOf(url)) - { - if (url.fileName() == QL1S("add")) - { - QStringList names = ReKonfig::previewNames(); - QStringList urls = ReKonfig::previewUrls(); - - int index = urls.count(); - - names.append(""); - urls.append(""); - - ReKonfig::setPreviewNames(names); - ReKonfig::setPreviewUrls(urls); - - loadPageForUrl(KUrl("about:favorites")); - - rApp->mainWindow()->currentTab()->createPreviewSelectorBar(index); - return; - } - - if (url.directory() == QL1S("preview/remove")) - { - int index = url.fileName().toInt(); - removePreview(index); - return; - } - - if (url.directory() == QL1S("preview/modify")) - { - int index = url.fileName().toInt(); - rApp->mainWindow()->currentTab()->createPreviewSelectorBar(index); - return; - } - - if (url.directory() == QL1S("preview/reload")) - { - int index = url.fileName().toInt(); - reloadPreview(index); - return; - } - } - - // about:tabs links - if (KUrl("about:tabs").isParentOf(url)) - { - if (url.fileName() == QL1S("show")) - { - const int winIndex = url.queryItem(QL1S("win")).toInt(); - const int tabIndex = url.queryItem(QL1S("tab")).toInt(); - - MainWindow *w = rApp->mainWindowList().at(winIndex).data(); - - // close about:tabs tab - rApp->mainWindow()->mainView()->closeTab(rApp->mainWindow()->mainView()->currentIndex()); - - // show requested tab - w->mainView()->setCurrentIndex(tabIndex); - if (w != rApp->mainWindow()) - w->raise(); - return; - } - - if (url.fileName() == QL1S("remove")) - { - const int winIndex = url.queryItem(QL1S("win")).toInt(); - const int tabIndex = url.queryItem(QL1S("tab")).toInt(); - - MainWindow *w = rApp->mainWindowList().at(winIndex).data(); - w->mainView()->closeTab(tabIndex); - loadPageForUrl(KUrl("about:tabs")); - return; - } - } - - // about:closedTabs links - if (KUrl("about:closedTabs").isParentOf(url)) - { - if (url.fileName() == QL1S("restore")) - { - const int tabIndex = url.queryItem(QL1S("tab")).toInt(); - - rApp->mainWindow()->mainView()->restoreClosedTab(tabIndex, false); - return; - } - } - - // about:history links - if (KUrl("about:history").isParentOf(url)) - { - if (url.fileName() == QL1S("clear")) - { - rApp->historyManager()->clear(); - loadPageForUrl(KUrl("about:history")); - return; - } - - if (url.fileName() == QL1S("showAllItems")) - { - m_showFullHistory = true; - loadPageForUrl(KUrl("about:history")); - return; - } - - if (url.fileName() == QL1S("search")) - { - QString value = url.queryItemValue(QL1S("q")); - loadPageForUrl(KUrl("about:history"), value); - return; - } - - } - - // about:downloads links - if (KUrl("about:downloads").isParentOf(url)) - { - if (url.fileName() == QL1S("clear")) - { - rApp->downloadManager()->clearDownloadsHistory(); - loadPageForUrl(KUrl("about:downloads")); - return; - } - - if (url.fileName() == QL1S("search")) - { - QString value = url.queryItemValue(QL1S("q")); - loadPageForUrl(KUrl("about:downloads"), value); - return; - } - - if (url.fileName() == QL1S("opendir")) - { - QString value = url.queryItemValue(QL1S("q")); - KUrl dirUrl = KUrl(value); - (void)new KRun(dirUrl, rApp->mainWindow(), 0, dirUrl.isLocalFile()); - return; - } - - if (url.fileName() == QL1S("removeItem")) - { - int value = url.queryItemValue(QL1S("item")).toInt(); - rApp->downloadManager()->removeDownloadItem(value); - loadPageForUrl(KUrl("about:downloads")); - return; - } - } - - if (url == KUrl("about:bookmarks/edit")) - { - rApp->bookmarkManager()->slotEditBookmarks(); - return; - } - - - if (url == KUrl("about:favorites/save")) - { - saveFavorites(); - return; - } - - - loadPageForUrl(url); -} - - -void NewTabPage::loadPageForUrl(const KUrl &url, const QString & filter) -{ - // webFrame can be null. See bug:282092 - QWebFrame *parentFrame = qobject_cast<QWebFrame *>(parent()); - if (!parentFrame) - { - kDebug() << "NULL PARENT FRAME: PAGE NOT LOADED"; - return; - } - - parentFrame->setHtml(m_html); - - m_root = parentFrame->documentElement().findFirst(QL1S("#content")); - - browsingMenu(url); - - QString title; - QByteArray encodedUrl = url.toEncoded(); - if (encodedUrl == QByteArray("about:favorites")) - { - favoritesPage(); - updateWindowIcon(); - title = i18n("Favorites"); - m_root.document().findFirst(QL1S("title")).setPlainText(title); - initJS(); - return; - } - else if (encodedUrl == QByteArray("about:closedTabs")) - { - closedTabsPage(); - updateWindowIcon(); - title = i18n("Closed Tabs"); - } - else if (encodedUrl == QByteArray("about:history")) - { - historyPage(filter); - updateWindowIcon(); - title = i18n("History"); - } - else if (encodedUrl == QByteArray("about:bookmarks")) - { - bookmarksPage(); - updateWindowIcon(); - title = i18n("Bookmarks"); - } - else if (encodedUrl == QByteArray("about:downloads")) - { - downloadsPage(filter); - updateWindowIcon(); - title = i18n("Downloads"); - } - else if (encodedUrl == QByteArray("about:tabs")) - { - tabsPage(); - updateWindowIcon(); - title = i18n("Tabs"); - } - - m_root.document().findFirst(QL1S("title")).setPlainText(title); -} - - -// ---------------------------------------------------------------------------- -// HIGH-LEVEL FUNCTIONS - - -void NewTabPage::browsingMenu(const KUrl ¤tUrl) -{ - QList<QWebElement> navItems; - - // Favorites - navItems.append(createLinkItem(i18n("Favorites"), - QL1S("about:favorites"), - QL1S("emblem-favorite"), - KIconLoader::Toolbar)); - - // Closed Tabs - navItems.append(createLinkItem(i18n("Closed Tabs"), - QL1S("about:closedTabs"), - QL1S("tab-close"), - KIconLoader::Toolbar)); - - // Bookmarks - navItems.append(createLinkItem(i18n("Bookmarks"), - QL1S("about:bookmarks"), - QL1S("bookmarks"), - KIconLoader::Toolbar)); - - // History - navItems.append(createLinkItem(i18n("History"), - QL1S("about:history"), - QL1S("view-history"), - KIconLoader::Toolbar)); - - // Downloads - navItems.append(createLinkItem(i18n("Downloads"), - QL1S("about:downloads"), - QL1S("download"), - KIconLoader::Toolbar)); - - // Tabs - navItems.append(createLinkItem(i18n("Tabs"), - QL1S("about:tabs"), - QL1S("tab-duplicate"), - KIconLoader::Toolbar)); - - Q_FOREACH(QWebElement it, navItems) - { - const QString aTagString(QL1C('a')); - const QString hrefAttributeString(QL1S("href")); - - if (it.findFirst(aTagString).attribute(hrefAttributeString) == currentUrl.toMimeDataString()) - it.addClass(QL1S("current")); - else if (currentUrl == QL1S("about:home") && it.findFirst(aTagString).attribute(hrefAttributeString) == QL1S("about:favorites")) - it.addClass(QL1S("current")); - m_root.document().findFirst(QL1S("#navigation")).appendInside(it); - } -} - - -void NewTabPage::favoritesPage() -{ - m_root.addClass(QL1S("favorites")); - - QWebElement add = createLinkItem(i18n("Add Favorite"), - QL1S("about:preview/add"), - QL1S("list-add"), - KIconLoader::Toolbar); - add.setAttribute(QL1S("class"), QL1S("right")); - m_root.document().findFirst("#actions").appendInside(add); - - QStringList names = ReKonfig::previewNames(); - QStringList urls = ReKonfig::previewUrls(); - - if (urls.isEmpty()) - { - m_root.addClass(QL1S("empty")); - m_root.setPlainText(i18n("You can add a favorite by clicking the \"Add Favorite\" button in the top-right corner of this page")); - return; - } - - for (int i = 0; i < urls.count() ; ++i) - { - KUrl url = KUrl(urls.at(i)); - - QWebElement prev = url.isEmpty() - ? emptyPreview(i) - : validPreview(i, url, QString::number(i + 1) + QL1S(" - ") + names.at(i)); - - m_root.appendInside(prev); - } -} - - -void NewTabPage::historyPage(const QString & filter) -{ - m_root.addClass(QL1S("history")); - - QWebElement searchForm = createFormItem(i18n("Search History"), QL1S("about:history/search")); - searchForm.setAttribute(QL1S("class"), QL1S("left")); - - m_root.document().findFirst(QL1S("#actions")).appendInside(searchForm); - - QWebElement clearHistory = createLinkItem(i18n("Clear History"), - QL1S("about:history/clear"), - QL1S("edit-clear"), - KIconLoader::Toolbar); - clearHistory.setAttribute(QL1S("class"), QL1S("right")); - m_root.document().findFirst(QL1S("#actions")).appendInside(clearHistory); - - HistoryTreeModel *model = rApp->historyManager()->historyTreeModel(); - UrlFilterProxyModel *proxy = new UrlFilterProxyModel(this); - proxy->setSourceModel(model); - - bool filterIsEmpty = filter.isEmpty(); - - if (!filterIsEmpty) - proxy->setFilterFixedString(filter); - - if (proxy->rowCount() == 0) - { - if (filterIsEmpty) - { - m_root.addClass(QL1S("empty")); - m_root.setPlainText(i18n("Your browsing history is empty")); - } - else - { - m_root.addClass(QL1S("empty")); - m_root.setPlainText(i18n("No matches for string %1 in history", filter)); - } - return; - } - - int i = 0; - const int maxTextSize = 103; - const int truncateSize = 100; - do - { - QModelIndex index = proxy->index(i, 0, QModelIndex()); - if (proxy->hasChildren(index)) - { - m_root.appendInside(markup(QL1S("h3"))); - m_root.lastChild().setPlainText(index.data().toString()); - - m_root.appendInside(markup(QL1S(".historyfolder"))); - QWebElement little = m_root.lastChild(); - for (int j = 0; j < proxy->rowCount(index); ++j) - { - QModelIndex son = proxy->index(j, 0, index); - KUrl u = son.data(HistoryModel::UrlStringRole).toUrl(); - - little.appendInside(son.data(HistoryModel::DateTimeRole).toDateTime().toString("hh:mm")); - little.appendInside(QL1S(" ")); - little.appendInside(markup(QL1S("img"))); - little.lastChild().setAttribute(QL1S("src"), rApp->iconManager()->iconPathForUrl(u)); - little.lastChild().setAttribute(QL1S("width"), QL1S("16")); - little.lastChild().setAttribute(QL1S("height"), QL1S("16")); - little.appendInside(QL1S(" ")); - little.appendInside(markup(QL1S("a"))); - little.lastChild().setAttribute(QL1S("href") , u.url()); - - QString shownUrl = son.data().toString(); - if (shownUrl.length() > maxTextSize) - { - shownUrl.truncate(truncateSize); - shownUrl += QL1S("..."); - } - little.lastChild().appendInside(shownUrl); - - little.appendInside(QL1S("<br />")); - } - } - i++; - if (filterIsEmpty && m_showFullHistory == false && (i == 2)) - { - m_root.appendInside(markup(QL1S("a"))); - m_root.lastChild().setAttribute(QL1S("class") , QL1S("greybox")); - m_root.lastChild().setAttribute(QL1S("href") , QL1S("about:history/showAllItems")); - m_root.lastChild().setPlainText(i18n("Show full History")); - return; - } - } - while (proxy->hasIndex(i , 0 , QModelIndex())); - - m_showFullHistory = false; -} - - -void NewTabPage::bookmarksPage() -{ - m_root.addClass(QL1S("bookmarks")); - - QWebElement editBookmarks = createLinkItem(i18n("Edit Bookmarks"), - QL1S("about:bookmarks/edit"), - QL1S("bookmarks-organize"), - KIconLoader::Toolbar); - editBookmarks.setAttribute(QL1S("class"), QL1S("right")); - m_root.document().findFirst(QL1S("#actions")).appendInside(editBookmarks); - - KBookmarkGroup bookGroup = rApp->bookmarkManager()->rootGroup(); - if (bookGroup.isNull()) - { - m_root.addClass(QL1S("empty")); - m_root.setPlainText(i18n("You have no bookmarks")); - return; - } - - KBookmark bookmark = bookGroup.first(); - - m_root.appendInside(markup(QL1S(".bookmarkfolder"))); - QWebElement rootFolder = m_root.lastChild(); - rootFolder.appendInside(markup(QL1S("h4"))); - rootFolder.lastChild().setPlainText(i18n("Unsorted")); - - while (!bookmark.isNull()) - { - createBookmarkItem(bookmark, rootFolder); - bookmark = bookGroup.next(bookmark); - } -} - - -void NewTabPage::closedTabsPage() -{ - m_root.addClass(QL1S("closedTabs")); - - QList<TabHistory> links = rApp->mainWindow()->mainView()->recentlyClosedTabs(); - - if (links.isEmpty()) - { - m_root.addClass(QL1S("empty")); - m_root.setPlainText(i18n("There are no recently closed tabs")); - return; - } - - for (int i = 0; i < links.count(); ++i) - { - TabHistory item = links.at(i); - QWebElement prev; - - if (item.url.isEmpty()) - continue; - - prev = closedTabPreview(i, item.url, item.title); - - prev.setAttribute(QL1S("id"), QL1S("preview") + QVariant(i).toString()); - - // hide controls - prev.findFirst(QL1S(".right")).setStyleProperty(QL1S("visibility"), QL1S("hidden")); - prev.findFirst(QL1S(".left")).setStyleProperty(QL1S("visibility"), QL1S("hidden")); - - m_root.appendInside(prev); - } -} - - -void NewTabPage::downloadsPage(const QString & filter) -{ - m_root.addClass(QL1S("downloads")); - - QWebElement searchForm = createFormItem(i18n("Search Downloads"), QL1S("about:downloads/search")); - searchForm.setAttribute(QL1S("class"), QL1S("left")); - m_root.document().findFirst(QL1S("#actions")).appendInside(searchForm); - - QWebElement clearDownloads = createLinkItem(i18n("Clear Downloads"), - QL1S("about:downloads/clear"), - QL1S("edit-clear"), - KIconLoader::Toolbar); - clearDownloads.setAttribute(QL1S("class"), QL1S("right")); - m_root.document().findFirst(QL1S("#actions")).appendInside(clearDownloads); - - DownloadList list = rApp->downloadManager()->downloads(); - - bool filterIsEmpty = filter.isEmpty(); - - if (list.isEmpty()) - { - m_root.addClass(QL1S("empty")); - m_root.setPlainText(i18n("There are no recently downloaded files to show")); - return; - } - - int i = 0; - - Q_FOREACH(DownloadItem * item, list) - { - KUrl u = item->destUrl(); - QString fName = u.fileName(); - - QString srcUrl = item->originUrl(); - - if (!filterIsEmpty) - { - if (!fName.contains(filter, Qt::CaseInsensitive) && !srcUrl.contains(filter, Qt::CaseInsensitive)) - continue; - } - - m_root.prependInside(markup(QL1S("div"))); - - QWebElement div = m_root.firstChild(); - div.addClass(QL1S("download")); - - QString dir = u.directory(); - QString file = dir + QL1C('/') + fName; - - KIconLoader *loader = KIconLoader::global(); - QString iconPath = QL1S("file://") + loader->iconPath(KMimeType::iconNameForUrl(u), KIconLoader::Desktop); - - div.appendInside(markup(QL1S("img"))); - div.lastChild().setAttribute(QL1S("src"), iconPath); - - div.appendInside(QL1S("<strong>") + fName + QL1S("</strong>")); - div.appendInside(QL1S(" - ")); - QString date = KGlobal::locale()->formatDateTime(item->dateTime(), KLocale::FancyLongDate); - div.appendInside(QL1S("<em>") + date + QL1S("</em>")); - div.appendInside(QL1S("<br />")); - - div.appendInside(QL1S("<a href=") + srcUrl + QL1C('>') + srcUrl + QL1S("</a>")); - div.appendInside(QL1S("<br />")); - - switch (item->state()) - { - case DownloadItem::KGetManaged: - div.appendInside(QL1S("<em>") + i18n("This download is managed by KGet. Check it to grab information about its state") + QL1S("</em>")); - break; - - case DownloadItem::Suspended: - div.appendInside(QL1S("<em>") + i18n("Suspended") + QL1S("</em>")); - break; - - case DownloadItem::Downloading: - div.appendInside(QL1S("<em>") + i18n("Downloading now...") + QL1S("</em>")); - break; - - case DownloadItem::Errors: - div.appendInside(QL1S("<em>") + i18nc("%1 = Error description", "Error: %1", item->errorString()) + QL1S("</em>")); - break; - - case DownloadItem::Done: - default: - if (QFile::exists(file)) - { - div.appendInside(markup(QL1S("a"))); - div.lastChild().setAttribute(QL1S("class"), QL1S("greylink")); - div.lastChild().setAttribute(QL1S("href"), QL1S("about:downloads/opendir?q=") + QL1S("file://") + dir); - div.lastChild().setPlainText(i18n("Open directory")); - - div.appendInside(QL1S(" - ")); - - div.appendInside(markup(QL1S("a"))); - div.lastChild().setAttribute(QL1S("class"), QL1S("greylink")); - div.lastChild().setAttribute(QL1S("href"), QL1S("file://") + file); - div.lastChild().setPlainText(i18n("Open file")); - } - else - { - div.appendInside(QL1S("<em>") + QL1S("Removed") + QL1S("</em>")); - } - - div.appendInside(QL1S(" - ")); - - div.appendInside(markup(QL1S("a"))); - div.lastChild().setAttribute(QL1S("class"), QL1S("greylink")); - div.lastChild().setAttribute(QL1S("href"), QL1S("about:downloads/removeItem?item=") + QString::number(i)); - div.lastChild().setPlainText(i18n("Remove from list")); - - break; - } - - i++; - } - - if (i == 0) - { - m_root.addClass(QL1S("empty")); - m_root.setPlainText(i18n("No matches for string %1 in downloads", filter)); - } -} - - -void NewTabPage::tabsPage() -{ - m_root.addClass(QL1S("tabs")); - - int wins = 0; - Q_FOREACH(const QWeakPointer<MainWindow> &wPointer, rApp->mainWindowList()) - { - m_root.appendInside(markup(QL1S("h3"))); - m_root.lastChild().setPlainText(i18n("Window")); - - MainWindow *w = wPointer.data(); - - const int tabCount = w->mainView()->count(); - for (int i = 0; i < tabCount; ++i) - { - KUrl url = w->mainView()->webTab(i)->url(); - - if (!WebSnap::existsImage(url)) - { - kDebug() << "image doesn't exist for url: " << url; - QPixmap preview = WebSnap::renderPagePreview(*w->mainView()->webTab(i)->page()); - QString path = WebSnap::imagePathFromUrl(url.url()); - preview.save(path); - } - QString name = w->mainView()->webTab(i)->view()->title(); - QWebElement prev; - - prev = tabPreview(wins, i, url, name); - - m_root.appendInside(prev); - } - - wins++; - } -} - - -// ---------------------------------------------------------------------------- -// LOW-LEVEL FUNCTIONS - - -QWebElement NewTabPage::emptyPreview(int index) -{ - QWebElement prev = markup(QL1S(".thumbnail")); - - prev.findFirst(QL1S(".preview img")).setAttribute(QL1S("src") , - QL1S("file:///") + KIconLoader::global()->iconPath("insert-image", KIconLoader::Desktop)); - prev.findFirst(QL1S("span a")).setPlainText(i18n("Set a Preview...")); - prev.findFirst(QL1S("a")).setAttribute(QL1S("href"), - QL1S("about:preview/modify/") + QVariant(index).toString()); - - setupPreview(prev, index, false); - - return prev; -} - - -void NewTabPage::reloadPreview(int index) -{ - QString id = QL1S("#preview") + QString::number(index); - QWebElement thumb = m_root.document().findFirst(id); - - QString urlString = ReKonfig::previewUrls().at(index); - QString nameString = ReKonfig::previewNames().at(index); - - QString title = checkTitle(QString::number(index + 1) + QL1S(" - ") + nameString); - - ThumbUpdater *t = new ThumbUpdater(thumb, urlString, title); - t->updateThumb(); -} - - -QWebElement NewTabPage::validPreview(int index, const KUrl &url, const QString &title) -{ - QWebElement prev = markup(QL1S(".thumbnail")); - - QString previewPath = WebSnap::existsImage(url) - ? QL1S("file://") + WebSnap::imagePathFromUrl(url) - : rApp->iconManager()->iconPathForUrl(url) - ; - - prev.findFirst(QL1S(".preview img")).setAttribute(QL1S("src") , previewPath); - prev.findFirst(QL1S("a")).setAttribute(QL1S("href"), url.toMimeDataString()); - prev.findFirst(QL1S("span a")).setAttribute(QL1S("href"), url.toMimeDataString()); - prev.findFirst(QL1S("span a")).setPlainText(checkTitle(title)); - - setupPreview(prev, index, true); - return prev; -} - - -QWebElement NewTabPage::tabPreview(int winIndex, int tabIndex, const KUrl &url, const QString &title) -{ - QWebElement prev = markup(QL1S(".thumbnail")); - QString previewPath = QL1S("file://") + WebSnap::imagePathFromUrl(url); - - QString href = QL1S("about:tabs/show?win=") + QString::number(winIndex) + QL1S("&tab=") + QString::number(tabIndex); - - prev.findFirst(QL1S(".preview img")).setAttribute(QL1S("src") , previewPath); - prev.findFirst(QL1S("a")).setAttribute(QL1S("href"), href); - prev.findFirst(QL1S("span a")).setAttribute(QL1S("href"), href); - prev.findFirst(QL1S("span a")).setPlainText(checkTitle(title)); - - setupTabPreview(prev, winIndex, tabIndex); - - prev.findFirst(QL1S(".right")).setStyleProperty(QL1S("visibility"), QL1S("visible")); - prev.findFirst(QL1S(".left")).setStyleProperty(QL1S("visibility"), QL1S("hidden")); - - return prev; -} - - -QWebElement NewTabPage::closedTabPreview(int index, const KUrl &url, const QString &title) -{ - QWebElement prev = markup(QL1S(".thumbnail")); - - QString previewPath = WebSnap::existsImage(url) - ? QL1S("file://") + WebSnap::imagePathFromUrl(url) - : rApp->iconManager()->iconPathForUrl(url) - ; - - QString href = QL1S("about:closedTabs/restore?tab=") + QString::number(index); - - prev.findFirst(QL1S(".preview img")).setAttribute(QL1S("src") , previewPath); - prev.findFirst(QL1S("a")).setAttribute(QL1S("href"), href); - prev.findFirst(QL1S("span a")).setAttribute(QL1S("href"), href); - prev.findFirst(QL1S("span a")).setPlainText(checkTitle(title)); - - setupPreview(prev, index, true); - return prev; -} - - -void NewTabPage::setupPreview(QWebElement e, int index, bool showControls) -{ - e.findFirst(QL1S(".right img")).setAttribute(QL1S("src"), - QL1S("file:///") + KIconLoader::global()->iconPath("edit-delete", KIconLoader::DefaultState)); - - e.findFirst(QL1S(".right")).setAttribute(QL1S("title"), i18n("Remove favorite")); - - e.findFirst(QL1S(".left img")).setAttribute(QL1S("src"), - QL1S("file:///") + KIconLoader::global()->iconPath("view-refresh", KIconLoader::DefaultState)); - - e.findFirst(QL1S(".left")).setAttribute(QL1S("title"), i18n("Reload thumbnail")); - - e.findFirst(QL1S(".left")).setAttribute(QL1S("href"), QL1S("about:preview/reload/") + QVariant(index).toString()); - e.findFirst(QL1S(".right")).setAttribute(QL1S("href"), QL1S("about:preview/remove/") + QVariant(index).toString()); - - e.setAttribute(QL1S("id"), QL1S("preview") + QVariant(index).toString()); - - if (showControls) - { - e.findFirst(QL1S(".right")).setStyleProperty(QL1S("visibility"), QL1S("visible")); - e.findFirst(QL1S(".left")).setStyleProperty(QL1S("visibility"), QL1S("visible")); - } -} - - -void NewTabPage::setupTabPreview(QWebElement e, int winIndex, int tabIndex) -{ - e.findFirst(QL1S(".right img")).setAttribute(QL1S("src"), - QL1S("file:///") + KIconLoader::global()->iconPath("edit-delete", KIconLoader::DefaultState)); - e.findFirst(QL1S(".right")).setAttribute(QL1S("title"), QL1S("Close Tab")); - - QString href = QL1S("about:tabs/remove?win=") + QString::number(winIndex) + QL1S("&tab=") + QString::number(tabIndex); - e.findFirst(QL1S(".right")).setAttribute(QL1S("href"), href); - - e.setAttribute(QL1S("id"), QL1S("win") + QString::number(winIndex) + QL1S("tab") + QString::number(tabIndex)); -} - - -void NewTabPage::removePreview(int index) -{ - QStringList names = ReKonfig::previewNames(); - QStringList urls = ReKonfig::previewUrls(); - - urls.removeAt(index); - names.removeAt(index); - - ReKonfig::setPreviewNames(names); - ReKonfig::setPreviewUrls(urls); - - loadPageForUrl(KUrl("about:favorites")); - - ReKonfig::self()->writeConfig(); -} - - -void NewTabPage::createBookmarkGroup(const KBookmark &bookmark, QWebElement parent) -{ - KBookmarkGroup group = bookmark.toGroup(); - KBookmark bm = group.first(); - - parent.appendInside(markup(QL1S(".bookmarkfolder"))); - QWebElement folder = parent.lastChild(); - folder.appendInside(markup(QL1S("h4"))); - folder.lastChild().setPlainText(group.fullText()); - - while (!bm.isNull()) - { - createBookmarkItem(bm, folder); - bm = group.next(bm); - } -} - - -void NewTabPage::createBookmarkItem(const KBookmark &bookmark, QWebElement parent) -{ - QString cacheDir = QL1S("file://") + KStandardDirs::locateLocal("cache" , "" , true); - QString icon = QL1S("file://") + KGlobal::dirs()->findResource("icon", "oxygen/16x16/mimetypes/text-html.png"); - - if (bookmark.isGroup()) - { - createBookmarkGroup(bookmark, m_root); - return; - } - else if (bookmark.isSeparator()) - { - kDebug() << "SEPARATOR"; - parent.appendInside(QL1S("<hr />")); - } - else - { - QString b = bookmark.icon(); - if (b.contains(QL1S("favicons"))) - icon = cacheDir + bookmark.icon() + QL1S(".png"); - - parent.appendInside(markup(QL1S("a"))); - QWebElement bookmarkElement = parent.lastChild(); - bookmarkElement.setAttribute(QL1S("href") , bookmark.url().prettyUrl()); - bookmarkElement.addClass("bookmark"); - - bookmarkElement.appendInside(markup(QL1S("img"))); - bookmarkElement.lastChild().setAttribute(QL1S("src") , icon); - bookmarkElement.lastChild().setAttribute(QL1S("width") , QL1S("16")); - bookmarkElement.lastChild().setAttribute(QL1S("height") , QL1S("16")); - bookmarkElement.appendInside(QL1S(" ")); - bookmarkElement.appendInside(checkTitle(bookmark.fullText(), 40)); - } -} - - -QString NewTabPage::checkTitle(const QString &title, int max) -{ - QString t(title); - if (t.length() > max) - { - t.truncate(max - 3); - t += QL1S("..."); - } - return t; -} - - -QWebElement NewTabPage::createLinkItem(const QString &title, const QString &urlString, const QString &iconPath, int groupOrSize) const -{ - const KIconLoader * const loader = KIconLoader::global(); - - QWebElement nav = markup(QL1S(".link")); - nav.findFirst(QL1S("a")).setAttribute(QL1S("href"), urlString); - nav.findFirst(QL1S("img")).setAttribute(QL1S("src"), QL1S("file://") + loader->iconPath(iconPath, groupOrSize)); - nav.findFirst(QL1S("span")).appendInside(title); - return nav; -} - - -QWebElement NewTabPage::createFormItem(const QString &title, const QString &urlString) const -{ - QWebElement form = markup(QL1S("form")); - - form.setAttribute(QL1S("method"), QL1S("GET")); - form.setAttribute(QL1S("action"), urlString); - - form.appendInside(markup(QL1S("input"))); - form.lastChild().setAttribute(QL1S("type"), QL1S("text")); - form.lastChild().setAttribute(QL1S("name"), QL1S("q")); - - form.appendInside(markup(QL1S("input"))); - form.lastChild().setAttribute(QL1S("type"), QL1S("submit")); - form.lastChild().setAttribute(QL1S("value"), title); - - return form; -} - - -void NewTabPage::updateWindowIcon() -{ - int currentIndex = rApp->mainWindow()->mainView()->currentIndex(); - rApp->mainWindow()->changeWindowIcon(currentIndex); -} - - -void NewTabPage::initJS() -{ - QWebFrame *parentFrame = qobject_cast<QWebFrame *>(parent()); - QString oldHTML = parentFrame->toHtml(); - - QString includes; - includes += QL1S("<head>"); - includes += QL1S("<script src=\"$DEFAULT_PATH/htmls/jquery-1.7.2.min.js\" type=\"text/javascript\"></script>"); - includes += QL1S("<script src=\"$DEFAULT_PATH/htmls/jquery-ui-1.8.20.custom.min.js\" type=\"text/javascript\"></script>"); - - QString htmlFilePath = KStandardDirs::locate("data", "rekonq/htmls/home.html"); - QString dataPath = QL1S("file://") + htmlFilePath; - dataPath.remove(QL1S("/htmls/home.html")); - - includes.replace(QL1S("$DEFAULT_PATH"), dataPath); - - oldHTML.replace(QL1S("<head>"), includes); - - QString javascript; - javascript += QL1S("<body>"); - javascript += QL1S("<script>"); - javascript += QL1S("$(function() {"); - javascript += QL1S(" $( \"#content\" ).sortable({"); - javascript += QL1S(" revert: true,"); - javascript += QL1S(" cursor: \"move\","); - javascript += QL1S(" distance: 30,"); - javascript += QL1S(" update: function(event, ui) { window.location.href = \"about:favorites/save\"; }"); - javascript += QL1S(" });"); - javascript += QL1S(" $( \".thumbnail\" ).disableSelection();"); - javascript += QL1S("});"); - javascript += QL1S("</script>"); - - oldHTML.replace(QL1S("<body>"), javascript); - - parentFrame->setHtml(oldHTML); -} - - -void NewTabPage::saveFavorites() -{ - QStringList names = ReKonfig::previewNames(); - QStringList urls = ReKonfig::previewUrls(); - - QStringList newNames = names; - QStringList newUrls = urls; - - QWebElementCollection coll = m_root.document().findAll(QL1S(".thumbnail")); - QList<QWebElement> list = coll.toList(); - - int i = 0; - - Q_FOREACH(QWebElement e, list) - { - if (!e.hasAttribute(QL1S("id"))) - continue; - - QString id = e.attribute(QL1S("id")); - kDebug() << "id: " << id; - int index = id.remove(QL1S("preview")).toInt(); - kDebug() << "INDEX: " << index; - - newNames.replace(i, names.at(index)); - newUrls.replace(i, urls.at(index)); - i++; - } - - ReKonfig::setPreviewNames(newNames); - ReKonfig::setPreviewUrls(newUrls); - - loadPageForUrl(KUrl("about:favorites")); -} diff --git a/src/newtabpage.h b/src/newtabpage.h deleted file mode 100644 index 1c8d423d..00000000 --- a/src/newtabpage.h +++ /dev/null @@ -1,125 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2009-2012 by Andrea Diamantini <adjam7 at gmail dot com> -* Copyright (C) 2010 by Matthieu Gicquel <matgic78 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 REKONQ_NEW_TAB_PAGE -#define REKONQ_NEW_TAB_PAGE - - -// Rekonq Includes -#include "rekonq_defines.h" - -// KDE Includes -#include <KUrl> - -// Qt Includes -#include <QObject> -#include <QString> -#include <QWebElement> - -// Forward Declarations -class KBookmark; -class QWebFrame; - - -class REKONQ_TESTS_EXPORT NewTabPage : public QObject -{ - Q_OBJECT - -public: - NewTabPage(QWebFrame *frame); - - /** - * This method takes an about: url and loads - * the corresponding part of the new tab page - */ - void generate(const KUrl &url = KUrl("about:home")); - -private: - // these are the "high-level" functions to build the new tab page. - // Basically, you call browsingMenu + one of the *Page methods - // to load a page - void browsingMenu(const KUrl ¤tUrl); - - void favoritesPage(); - void historyPage(const QString & filter = QString()); - void bookmarksPage(); - void closedTabsPage(); - void downloadsPage(const QString & filter = QString()); - void tabsPage(); - - void loadPageForUrl(const KUrl &url, const QString & filter = QString()); - - // -------------------------------------------------------------------------- - // "low-level" functions - // we use these to create the pages over - - // Previews handling - QWebElement emptyPreview(int index); - QWebElement validPreview(int index, const KUrl &url, const QString &title); - QWebElement tabPreview(int winIndex, int tabIndex, const KUrl &url, const QString &title); - QWebElement closedTabPreview(int index, const KUrl &url, const QString &title); - - void reloadPreview(int index); - void removePreview(int index); - - void setupPreview(QWebElement e, int index, bool showControls); - void setupTabPreview(QWebElement e, int winIndex, int tabIndex); - - void createBookmarkItem(const KBookmark &bookmark, QWebElement parent); - void createBookmarkGroup(const KBookmark &bookmark, QWebElement parent); - - QWebElement createLinkItem(const QString &title, const QString &urlString, const QString &iconPath, int groupOrSize) const; - QWebElement createFormItem(const QString &title, const QString &urlString) const; - - /** - * This function helps to get faster a new markup of one type, - * it isn't easy to create one with QWebElement. - * - * It gets it in the #models div of home.html. - * It works for all elements defined here. - * - */ - inline QWebElement markup(const QString &selector) const - { - return m_root.document().findFirst("#models > " + selector).clone(); - } - - QString checkTitle(const QString &title, int max = 20); - - void updateWindowIcon(); - - void initJS(); - void saveFavorites(); - -private: - QString m_html; - QWebElement m_root; - - bool m_showFullHistory; -}; - -#endif // REKONQ_NEW_TAB_PAGE diff --git a/src/opensearch/opensearchengine.cpp b/src/opensearch/opensearchengine.cpp deleted file mode 100644 index 28027828..00000000 --- a/src/opensearch/opensearchengine.cpp +++ /dev/null @@ -1,314 +0,0 @@ -/* ============================================================ -* -* 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-2011 by Lionel Chauvin <megabigbug@yahoo.fr> -* Copyright (C) 2010-2011 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" -#include "opensearchengine.moc" - -// Qt Includes -#include <QtCore/QRegExp> -#include <QtCore/QFile> -#include <QtCore/QFileInfo> -#include <QtCore/QDateTime> - -// KDE Includes -#include <KStandardDirs> - - -OpenSearchEngine::OpenSearchEngine(QObject *parent) - : QObject(parent) - , m_parser(0) -{ -} - - -OpenSearchEngine::~OpenSearchEngine() -{ - if (m_parser) - { - delete m_parser; - } -} - - -QString OpenSearchEngine::parseTemplate(const QString &searchTerm, const QString &searchTemplate) -{ - QString language = QLocale().name(); - // Simple conversion to RFC 3066. - language = language.replace(QL1C('_'), QL1C('-')); - QString country = language; - country = (country.remove(0, country.indexOf(QL1C('-')) + 1)).toLower(); - const int firstDashPosition = country.indexOf(QL1C('-')); - if (firstDashPosition >= 0) - country = country.mid(firstDashPosition + 1); - - QString result = searchTemplate; - result.replace(QL1S("{count}"), QL1S("20")); - result.replace(QL1S("{startIndex}"), QL1S("0")); - result.replace(QL1S("{startPage}"), QL1S("0")); - result.replace(QL1S("{language}"), language); - result.replace(QL1S("{country}"), country.toLower()); - 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()) - { - return KUrl(); - } - - KUrl retVal = KUrl::fromEncoded(parseTemplate(searchTerm, m_searchUrlTemplate).toUtf8()); - - 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()) - { - return KUrl(); - } - - KUrl retVal = KUrl::fromEncoded(parseTemplate(searchTerm, m_suggestionsUrlTemplate).toUtf8()); - - 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; -} - - -void OpenSearchEngine::setSuggestionParser(SuggestionParser *parser) -{ - m_parser = parser; -} - - -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 - && m_description == other.m_description - && m_imageUrl == other.m_imageUrl - && m_searchUrlTemplate == other.m_searchUrlTemplate - && m_suggestionsUrlTemplate == other.m_suggestionsUrlTemplate - && m_searchParameters == other.m_searchParameters - && m_suggestionsParameters == other.m_suggestionsParameters); -} - - -bool OpenSearchEngine::operator<(const OpenSearchEngine &other) const -{ - return (m_name < other.m_name); -} - - -ResponseList OpenSearchEngine::parseSuggestion(const QString &searchTerm, const QByteArray &resp) -{ - if (!searchTerm.isEmpty() && !resp.isEmpty()) - { - QFile file(suggestionPathFor(searchTerm)); - if (file.open(QIODevice::WriteOnly | QIODevice::Text)) - { - file.write(resp, resp.size()); - file.close(); - } - } - - return parseSuggestion(resp); -} - - -ResponseList OpenSearchEngine::parseSuggestion(const QByteArray &resp) -{ - if (!m_parser) - return ResponseList(); - - if (resp.isEmpty()) - return ResponseList(); - - return m_parser->parse(resp); -} - - -QString OpenSearchEngine::type() -{ - return m_parser->type(); -} - - -QString OpenSearchEngine::suggestionPathFor(const QString &searchTerm) -{ - return KStandardDirs::locateLocal("cache", QL1S("opensearch/") + m_name + QL1S("/") + searchTerm, true); -} - - -bool OpenSearchEngine::hasCachedSuggestionsFor(const QString &searchTerm) -{ - QFileInfo info(suggestionPathFor(searchTerm)); - return info.exists() && info.lastModified().daysTo(QDateTime::currentDateTime()) < 7; -} - - -ResponseList OpenSearchEngine::cachedSuggestionsFor(const QString &searchTerm) -{ - QFile file(suggestionPathFor(searchTerm)); - if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) - return ResponseList(); - - QByteArray resp; - while (!file.atEnd()) - { - resp += file.readLine(); - } - return parseSuggestion(resp); -} diff --git a/src/opensearch/opensearchengine.h b/src/opensearch/opensearchengine.h deleted file mode 100644 index cc826aec..00000000 --- a/src/opensearch/opensearchengine.h +++ /dev/null @@ -1,122 +0,0 @@ -/* ============================================================ -* -* 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-2011 by Lionel Chauvin <megabigbug@yahoo.fr> -* Copyright (C) 2010-2011 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 - - -// Rekonq Includes -#include "rekonq_defines.h" - -// Local Includes -#include "suggestionparser.h" - -// KDE Includes -#include <KUrl> - -// Qt Includes -#include <QtCore/QPair> -#include <QtGui/QImage> - - -class OpenSearchEngine : public QObject -{ - Q_OBJECT - -public: - typedef QPair<QString, QString> Parameter; - - OpenSearchEngine(QObject *parent = 0); - ~OpenSearchEngine(); - - QString name() const; - void setName(const QString &name); - - QString description() const; - void setDescription(const QString &description); - - QString searchUrlTemplate() const; - void setSearchUrlTemplate(const QString &searchUrl); - KUrl searchUrl(const QString &searchTerm) const; - - bool providesSuggestions() const; - - QString suggestionsUrlTemplate() const; - void setSuggestionsUrlTemplate(const QString &suggestionsUrl); - KUrl suggestionsUrl(const QString &searchTerm) const; - - QList<Parameter> searchParameters() const; - void setSearchParameters(const QList<Parameter> &searchParameters); - - QList<Parameter> suggestionsParameters() const; - void setSuggestionsParameters(const QList<Parameter> &suggestionsParameters); - - void setSuggestionParser(SuggestionParser *parser); - - QString imageUrl() const; - void setImageUrl(const QString &url); - - QImage image() const; - void setImage(const QImage &image); - - bool isValid() const; - - bool operator==(const OpenSearchEngine &other) const; - bool operator<(const OpenSearchEngine &other) const; - - ResponseList parseSuggestion(const QString &searchTerm, const QByteArray &response); - - static QString parseTemplate(const QString &searchTerm, const QString &searchTemplate); - - QString type(); - - bool hasCachedSuggestionsFor(const QString &searchTerm); - - ResponseList cachedSuggestionsFor(const QString &searchTerm); - -private: - QString m_name; - QString m_description; - - QString m_imageUrl; - QImage m_image; - - QString m_searchUrlTemplate; - QString m_suggestionsUrlTemplate; - QList<Parameter> m_searchParameters; - QList<Parameter> m_suggestionsParameters; - - SuggestionParser *m_parser; - - QString suggestionPathFor(const QString &searchTerm); - - ResponseList parseSuggestion(const QByteArray &resp); -}; - -#endif // OPENSEARCHENGINE_H diff --git a/src/opensearch/opensearchmanager.cpp b/src/opensearch/opensearchmanager.cpp deleted file mode 100644 index 5fad35ac..00000000 --- a/src/opensearch/opensearchmanager.cpp +++ /dev/null @@ -1,358 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2009 by Fredy Yanardi <fyanardi@gmail.com> -* Copyright (C) 2010-2011 by Lionel Chauvin <megabigbug@yahoo.fr> -* Copyright (C) 2010-2012 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" - -// Local Includes -#include "application.h" -#include "opensearchengine.h" -#include "opensearchreader.h" -#include "opensearchwriter.h" - -// KDE Includes -#include <KGlobal> -#include <KStandardDirs> -#include <KUrl> -#include <kio/scheduler.h> -#include <KService> -#include <KDE/KMessageBox> -#include <KUriFilterData> -#include <KConfigGroup> - -// Qt Includes -#include <QFile> -#include <QFileInfo> -#include <QDBusMessage> -#include <QDBusConnection> - - -OpenSearchManager::OpenSearchManager(QObject *parent) - : QObject(parent) - , m_activeEngine(0) - , m_currentJob(0) -{ - m_state = IDLE; - loadEngines(); -} - - -OpenSearchManager::~OpenSearchManager() -{ - qDeleteAll(m_engineCache); - m_engineCache.clear(); - m_engines.clear(); -} - - -void OpenSearchManager::setSearchProvider(const QString &searchProvider) -{ - m_activeEngine = 0; - - if (!m_engineCache.contains(searchProvider)) - { - const QString fileName = KGlobal::dirs()->findResource("data", "rekonq/opensearch/" + trimmedEngineName(searchProvider) + ".xml"); - kDebug() << searchProvider << " trimmed name: " << trimmedEngineName(searchProvider) << " file name path: " << fileName; - if (fileName.isEmpty()) - { - return; - } - QFile file(fileName); - - if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) - { - return; - } - - OpenSearchReader reader; - OpenSearchEngine *engine = reader.read(&file); - - if (engine) - { - m_engineCache.insert(searchProvider, engine); - } - else - { - return; - } - } - - m_activeEngine = m_engineCache.value(searchProvider); -} - - -bool OpenSearchManager::isSuggestionAvailable() -{ - return m_activeEngine != 0; -} - - -void OpenSearchManager::addOpenSearchEngine(const KUrl &url, const QString &title, const QString &shortcut) -{ - m_shortcut = shortcut; - m_title = trimmedEngineName(title); - - if (m_state != IDLE) - { - idleJob(); - } - - m_currentJob = KIO::get(url, KIO::NoReload, KIO::HideProgressInfo); - m_jobUrl = url; - m_state = REQ_DESCRIPTION; - connect(m_currentJob, SIGNAL(data(KIO::Job*, QByteArray)), this, SLOT(dataReceived(KIO::Job*, QByteArray))); - connect(m_currentJob, SIGNAL(result(KJob*)), this, SLOT(jobFinished(KJob*))); -} - - -void OpenSearchManager::requestSuggestion(const QString &searchText) -{ - if (!m_activeEngine) - return; - - if (m_state != IDLE) - { - // NOTE: - // changing OpenSearchManager behavior - // using idleJob here lets opensearchmanager to start another search, while - // if we want in any case lets it finish its previous job we can just return here. - idleJob(); - } - - if (m_activeEngine->hasCachedSuggestionsFor(searchText)) - { - emit suggestionsReceived(searchText, m_activeEngine->cachedSuggestionsFor(searchText)); - } - else - { - KUrl url = m_activeEngine->suggestionsUrl(searchText); - _typedText = searchText; - m_currentJob = KIO::get(url, KIO::NoReload, KIO::HideProgressInfo); - m_state = REQ_SUGGESTION; - connect(m_currentJob, SIGNAL(data(KIO::Job*, QByteArray)), this, SLOT(dataReceived(KIO::Job*, QByteArray))); - connect(m_currentJob, 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() && m_state == REQ_DESCRIPTION) - { - OpenSearchReader reader; - OpenSearchEngine *engine = reader.read(m_jobData); - if (engine) - { - m_engineCache.insert(m_title, engine); - m_engines.insert(m_jobUrl, m_shortcut); - saveEngines(); - - QString path; - if (engine->providesSuggestions()) - { - // save opensearch description only if it provides suggestions - OpenSearchWriter writer; - path = KGlobal::dirs()->findResource("data", "rekonq/opensearch/"); - QFile file(path + trimmedEngineName(engine->name()) + ".xml"); - writer.write(&file, engine); - - // save desktop file here - QString searchUrl = OpenSearchEngine::parseTemplate("\\{@}", engine->searchUrlTemplate()); - m_currentJob = NULL; - - path = KGlobal::mainComponent().dirs()->saveLocation("services", "searchproviders/"); - KConfig _service(path + m_title + ".desktop", KConfig::SimpleConfig); - KConfigGroup service(&_service, "Desktop Entry"); - service.writeEntry("Type", "Service"); - service.writeEntry("ServiceTypes", "SearchProvider"); - service.writeEntry("Name", m_title); - service.writeEntry("Query", searchUrl); - service.writeEntry("Keys", m_shortcut); - // TODO charset - service.writeEntry("Charset", "" /* provider->charset() */); - // we might be overwriting a hidden entry - service.writeEntry("Hidden", false); - service.sync(); - - // Update filters in running applications... - QDBusMessage msg = QDBusMessage::createSignal("/", "org.kde.KUriFilterPlugin", "configure"); - QDBusConnection::sessionBus().send(msg); - - emit openSearchEngineAdded(engine->name()); - } - } - else - { - kFatal() << "Error while adding new open search engine"; - } - - idleJob(); - return; - } - - // Do NOT parse if job had same errors or the typed string is empty - if (job->error() || _typedText.isEmpty()) - { - emit suggestionsReceived(_typedText, ResponseList()); - m_state = IDLE; - return; // just silently return - } - - if (m_state == REQ_SUGGESTION) - { - ResponseList suggestionsList; - if (isSuggestionAvailable()) - { - suggestionsList = m_activeEngine->parseSuggestion(_typedText, m_jobData); - } - emit suggestionsReceived(_typedText, suggestionsList); - idleJob(); - return; - } -} - - -void OpenSearchManager::loadEngines() -{ - QFile file(KStandardDirs::locate("appdata", "opensearch/db_opensearch.json")); - if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) - { - return; - } - - QString fileContent = QString::fromUtf8(file.readAll()); - QScriptEngine reader; - if (!reader.canEvaluate(fileContent)) - { - return; - } - - QScriptValue responseParts = reader.evaluate(fileContent); - QVariantList list; - qScriptValueToSequence(responseParts, list); - QStringList l; - Q_FOREACH(const QVariant & e, list) - { - l = e.toStringList(); - m_engines.insert(KUrl(l.first()), l.last()); - } - file.close(); -} - - -void OpenSearchManager::saveEngines() -{ - QFile file(KStandardDirs::locateLocal("appdata", "opensearch/db_opensearch.json")); - if (!file.open(QIODevice::WriteOnly)) - { - return; - } - QTextStream out(&file); - out << "["; - int i = 0; - QList<KUrl> urls = m_engines.keys(); - Q_FOREACH(const KUrl & url, urls) - { - out << "[\"" << url.url() << "\",\"" << m_engines.value(url) << "\"]"; - i++; - if (i != urls.size()) - { - out << ",\n"; - } - } - out << "]\n"; - file.close(); -} - - -void OpenSearchManager::removeDeletedEngines() -{ - KService::Ptr service; - Q_FOREACH(const KUrl & url, m_engines.keys()) - { - service = KService::serviceByDesktopPath(QString("searchproviders/%1.desktop").arg(m_engines.value(url))); - if (!service) - { - QString path = KStandardDirs::locateLocal("appdata", "opensearch/" + trimmedEngineName(m_engines.value(url)) + ".xml"); - QFile::remove(path + trimmedEngineName(m_engines.value(url)) + ".xml"); - m_engines.remove(url); - } - } - saveEngines(); -} - - -bool OpenSearchManager::engineExists(const KUrl &url) -{ - return m_engines.contains(url); -} - - -QString OpenSearchManager::trimmedEngineName(const QString &engineName) const -{ - QString trimmed; - QString::ConstIterator constIter = engineName.constBegin(); - while (constIter != engineName.constEnd()) - { - if (constIter->isSpace()) - { - trimmed.append('_'); - } - else - { - if (*constIter != '.') - { - trimmed.append(constIter->toLower()); - } - } - constIter++; - } - - return trimmed; -} - - -void OpenSearchManager::idleJob() -{ - if (m_currentJob) - { - disconnect(m_currentJob); - m_currentJob->kill(); - } - - m_jobData.clear(); - m_state = IDLE; -} diff --git a/src/opensearch/opensearchmanager.h b/src/opensearch/opensearchmanager.h deleted file mode 100644 index 3f99a06e..00000000 --- a/src/opensearch/opensearchmanager.h +++ /dev/null @@ -1,125 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2009 by Fredy Yanardi <fyanardi@gmail.com> -* Copyright (C) 2010-2011 by Lionel Chauvin <megabigbug@yahoo.fr> -* Copyright (C) 2010-2012 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 - - -// Rekonq Includes -#include "rekonq_defines.h" - -// Local Includes -#include "suggestionparser.h" - -// KDE Includes -#include <kio/jobclasses.h> - -// Qt Includes -#include <QObject> - -// Forward Declarations -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. - */ -class OpenSearchManager : public QObject -{ - Q_OBJECT - - enum STATE - { - REQ_SUGGESTION, - REQ_DESCRIPTION, - IDLE - }; - -public: - /** - * Constructor - */ - explicit OpenSearchManager(QObject *parent = 0); - - virtual ~OpenSearchManager(); - - void setSearchProvider(const QString &searchProvider); - - /** - * Check whether a search suggestion engine is available for the given search provider - * @param searchProvider the queried search provider - */ - bool isSuggestionAvailable(); - - bool engineExists(const KUrl &url); - -public Q_SLOTS: - /** - * Ask the specific suggestion engine to request for suggestion for the search text - * - * @param searchText the text to be queried to the suggestion service - */ - void requestSuggestion(const QString &searchText); - void addOpenSearchEngine(const KUrl &url, const QString &title, const QString &shortcut); - void removeDeletedEngines(); - -private Q_SLOTS: - void dataReceived(KIO::Job *job, const QByteArray &data); - void jobFinished(KJob *job); - -Q_SIGNALS: - void suggestionsReceived(const QString &text, const ResponseList &suggestion); - void openSearchEngineAdded(const QString &name); - -private: - QString trimmedEngineName(const QString &engineName) const; - void loadEngines(); - void saveEngines(); - void idleJob(); - - // QString substitutueSearchText(const QString &searchText, const QString &requestURL) const; - QByteArray m_jobData; - QMap<QString, OpenSearchEngine*> m_engineCache; - QMap<KUrl, QString> m_engines; - - OpenSearchEngine *m_activeEngine; - STATE m_state; - - KIO::TransferJob *m_currentJob; - KUrl m_jobUrl; - - QString _typedText; - - QString m_shortcut; - QString m_title; -}; - -#endif // OPENSEARCHMANAGER_H diff --git a/src/opensearch/opensearchreader.cpp b/src/opensearch/opensearchreader.cpp deleted file mode 100644 index a4f43b7a..00000000 --- a/src/opensearch/opensearchreader.cpp +++ /dev/null @@ -1,194 +0,0 @@ -/* ============================================================ -* -* 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-2011 by Lionel Chauvin <megabigbug@yahoo.fr> -* Copyright (C) 2010-2011 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" -#include "suggestionparser.h" - -// KDE Includes -#include <KLocalizedString> - -// Qt Includes -#include <QIODevice> - - -OpenSearchReader::OpenSearchReader() - : QXmlStreamReader() -{ -} - - -OpenSearchEngine *OpenSearchReader::read(const QByteArray &data) -{ - clear(); - addData(data); - - return read(); -} - - -OpenSearchEngine *OpenSearchReader::read(QIODevice *device) -{ - clear(); - - if (!device->isOpen()) - { - device->open(QIODevice::ReadOnly); - } - - setDevice(device); - return read(); -} - - -OpenSearchEngine *OpenSearchReader::read() -{ - OpenSearchEngine *engine = new OpenSearchEngine(); - - while (!isStartElement() && !atEnd()) - { - readNext(); - } - - if (name() != QL1S("OpenSearchDescription") - || namespaceUri() != QL1S("http://a9.com/-/spec/opensearch/1.1/") - ) - { - kDebug() << "The file is not an OpenSearch 1.1 file: " << name(); - raiseError(i18n("The file is not an OpenSearch 1.1 file.")); - return engine; - } - - while (!(isEndElement() && name() == QL1S("OpenSearchDescription")) && !atEnd()) - { - readNext(); - - if (!isStartElement()) - continue; - - // ShortName - if (name() == QL1S("ShortName")) - { - engine->setName(readElementText()); - continue; - } - - // Description - if (name() == QL1S("Description")) - { - engine->setDescription(readElementText()); - continue; - } - - // Url - if (name() == QL1S("Url")) - { - QString type = attributes().value(QL1S("type")).toString(); - QString url = attributes().value(QL1S("template")).toString(); - - if (url.isEmpty()) - continue; - - QList<OpenSearchEngine::Parameter> parameters; - - readNext(); - - while (!(isEndElement() && name() == QL1S("Url"))) - { - if (!isStartElement() - || (name() != QL1S("Param") - && name() != QL1S("Parameter"))) - { - readNext(); - continue; - } - - QString key = attributes().value(QL1S("name")).toString(); - QString value = attributes().value(QL1S("value")).toString(); - - if (!key.isEmpty() && !value.isEmpty()) - { - parameters.append(OpenSearchEngine::Parameter(key, value)); - } - - while (!isEndElement()) - { - readNext(); - } - } - - if (type == QL1S("text/html")) - { - engine->setSearchUrlTemplate(url); - engine->setSearchParameters(parameters); - } - else - { - if (engine->suggestionsUrlTemplate().isEmpty() - && type == QL1S("application/x-suggestions+json")) //note: xml is preferred - { - engine->setSuggestionsUrlTemplate(url); - engine->setSuggestionsParameters(parameters); - engine->setSuggestionParser(new JSONParser()); - } - else if (type == QL1S("application/x-suggestions+xml")) - { - engine->setSuggestionsUrlTemplate(url); - engine->setSuggestionsParameters(parameters); - engine->setSuggestionParser(new XMLParser()); - } - } - - continue; - } - - // Image - if (name() == QL1S("Image")) - { - engine->setImageUrl(readElementText()); - continue; - } - - // 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/opensearch/opensearchreader.h b/src/opensearch/opensearchreader.h deleted file mode 100644 index d1c644ae..00000000 --- a/src/opensearch/opensearchreader.h +++ /dev/null @@ -1,55 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2009 by Jakub Wieczorek <faw217@gmail.com> -* Copyright (C) 2010-2011 by Lionel Chauvin <megabigbug@yahoo.fr> -* Copyright (C) 2010-2011 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 <QXmlStreamReader> - -// Forward Declarations -class OpenSearchEngine; - - -class OpenSearchReader : public QXmlStreamReader -{ -public: - OpenSearchReader(); - - OpenSearchEngine *read(const QByteArray &data); - OpenSearchEngine *read(QIODevice *device); - -private: - OpenSearchEngine *read(); -}; - -#endif // OPENSEARCHREADER_H diff --git a/src/opensearch/opensearchwriter.cpp b/src/opensearch/opensearchwriter.cpp deleted file mode 100644 index 0b50ca6a..00000000 --- a/src/opensearch/opensearchwriter.cpp +++ /dev/null @@ -1,130 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2009 by Jakub Wieczorek <faw217@gmail.com> -* Copyright (C) 2010-2011 by Lionel Chauvin <megabigbug@yahoo.fr> -* Copyright (C) 2010-2011 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" - -// Qt Includes -#include <QtCore/QIODevice> - - -OpenSearchWriter::OpenSearchWriter() - : QXmlStreamWriter() -{ - setAutoFormatting(true); -} - - -bool OpenSearchWriter::write(QIODevice *device, OpenSearchEngine *engine) -{ - if (!engine) - return false; - - if (!device->isOpen()) - device->open(QIODevice::WriteOnly); - - setDevice(device); - write(engine); - return true; -} - - -void OpenSearchWriter::write(OpenSearchEngine *engine) -{ - writeStartDocument(); - writeStartElement(QL1S("OpenSearchDescription")); - writeDefaultNamespace(QL1S("http://a9.com/-/spec/opensearch/1.1/")); - - if (!engine->name().isEmpty()) - { - writeTextElement(QL1S("ShortName"), engine->name()); - } - - if (!engine->description().isEmpty()) - { - writeTextElement(QL1S("Description"), engine->description()); - } - - if (!engine->searchUrlTemplate().isEmpty()) - { - writeStartElement(QL1S("Url")); - writeAttribute(QL1S("method"), QL1S("get")); - writeAttribute(QL1S("template"), engine->searchUrlTemplate()); - - 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(QL1S("p:Parameter")); - writeAttribute(QL1S("name"), i->first); - writeAttribute(QL1S("value"), i->second); - writeEndElement(); - } - } - - writeEndElement(); - } - - if (!engine->suggestionsUrlTemplate().isEmpty()) - { - writeStartElement(QL1S("Url")); - writeAttribute(QL1S("method"), QL1S("get")); - writeAttribute(QL1S("type"), engine->type()); - writeAttribute(QL1S("template"), engine->suggestionsUrlTemplate()); - - 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(QL1S("p:Parameter")); - writeAttribute(QL1S("name"), i->first); - writeAttribute(QL1S("value"), i->second); - writeEndElement(); - } - } - - writeEndElement(); - } - - if (!engine->imageUrl().isEmpty()) - writeTextElement(QL1S("Image"), engine->imageUrl()); - - writeEndElement(); - writeEndDocument(); -} diff --git a/src/opensearch/opensearchwriter.h b/src/opensearch/opensearchwriter.h deleted file mode 100644 index 525044b9..00000000 --- a/src/opensearch/opensearchwriter.h +++ /dev/null @@ -1,56 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2009 by Jakub Wieczorek <faw217@gmail.com> -* Copyright (C) 2010-2011 by Lionel Chauvin <megabigbug@yahoo.fr> -* Copyright (C) 2010-2011 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: - OpenSearchWriter(); - - bool write(QIODevice *device, OpenSearchEngine *engine); - -private: - void write(OpenSearchEngine *engine); -}; - -#endif - diff --git a/src/opensearch/searchengine.cpp b/src/opensearch/searchengine.cpp deleted file mode 100644 index 2614b603..00000000 --- a/src/opensearch/searchengine.cpp +++ /dev/null @@ -1,157 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2008-2012 by Andrea Diamantini <adjam7 at gmail dot com> -* Copyright (C) 2009-2011 by Lionel Chauvin <megabigbug@yahoo.fr> -* -* -* 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/>. -* -* ============================================================ */ - - -//local includes -#include "searchengine.h" -#include "application.h" -#include "iconmanager.h" - -// Auto Includes -#include "rekonq.h" - -//KDE includes -#include <KConfigGroup> -#include <KServiceTypeTrader> - - -struct SearchEnginePrivate -{ - SearchEnginePrivate() : isLoaded(false) {} - bool isLoaded; - QString delimiter; - KService::List favorites; - KService::Ptr defaultEngine; -}; - - -K_GLOBAL_STATIC(SearchEnginePrivate, d) - - -void SearchEngine::reload() -{ - KConfig config("kuriikwsfilterrc"); - KConfigGroup cg = config.group("General"); - - // load delimiter - d->delimiter = cg.readEntry("KeywordDelimiter", ":"); - - // load favorite engines - QStringList favoriteEngines; -#if KDE_IS_VERSION(4,9,0) - favoriteEngines = cg.readEntry("PreferredWebShortcuts", favoriteEngines); -#else - favoriteEngines = cg.readEntry("FavoriteSearchEngines", favoriteEngines); -#endif - - KService::List favorites; - KService::Ptr service; - Q_FOREACH(const QString & engine, favoriteEngines) - { - service = KService::serviceByDesktopPath(QString("searchproviders/%1.desktop").arg(engine)); - if (service) - { - QUrl url = service->property("Query").toUrl(); - rApp->iconManager()->downloadIconFromUrl(url); - - favorites << service; - } - } - d->favorites = favorites; - - // load default engine - QString dse; -#if KDE_IS_VERSION(4,9,0) - dse = cg.readEntry("DefaultWebShortcut"); -#else - dse = cg.readEntry("DefaultSearchEngine"); -#endif - d->defaultEngine = KService::serviceByDesktopPath(QString("searchproviders/%1.desktop").arg(dse)); - - d->isLoaded = true; -} - - -QString SearchEngine::delimiter() -{ - if (!d->isLoaded) - reload(); - - return d->delimiter; -} - - -KService::List SearchEngine::favorites() -{ - if (!d->isLoaded) - reload(); - - return d->favorites; -} - - -KService::Ptr SearchEngine::defaultEngine() -{ - if (!d->isLoaded) - reload(); - - return d->defaultEngine; -} - - -KService::Ptr SearchEngine::fromString(const QString &text) -{ - KService::List providers = KServiceTypeTrader::self()->query("SearchProvider"); - int i = 0; - bool found = false; - KService::Ptr service; - while (!found && i < providers.size()) - { - QStringList list = providers.at(i)->property("Keys").toStringList(); - Q_FOREACH(const QString & key, list) - { - const QString searchPrefix = key + delimiter(); - if (text.startsWith(searchPrefix)) - { - service = providers.at(i); - found = true; - } - } - i++; - } - - return service; -} - - -QString SearchEngine::buildQuery(KService::Ptr engine, const QString &text) -{ - if (!engine) - return QString(); - QString query = engine->property("Query").toString(); - query = query.replace("\\{@}", KUrl::toPercentEncoding(text)); - return query; -} diff --git a/src/opensearch/searchengine.h b/src/opensearch/searchengine.h deleted file mode 100644 index 21678e9d..00000000 --- a/src/opensearch/searchengine.h +++ /dev/null @@ -1,59 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2008-2012 by Andrea Diamantini <adjam7 at gmail dot com> -* Copyright (C) 2009-2011 by Lionel Chauvin <megabigbug@yahoo.fr> -* -* -* 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 SEARCHENGINE_H -#define SEARCHENGINE_H - - -// Rekonq Includes -#include "rekonq_defines.h" - -// KDE Includes -#include <KService> - -//Qt Includes -#include <QString> - - -namespace SearchEngine -{ -void reload(); - -QString delimiter(); - -KService::Ptr defaultEngine(); - -KService::List favorites(); - -KService::Ptr fromString(const QString &text); - -QString buildQuery(KService::Ptr engine, const QString &text); - -QString extractQuery(const QString &text); -} - -#endif diff --git a/src/opensearch/suggestionparser.cpp b/src/opensearch/suggestionparser.cpp deleted file mode 100644 index 3c5350bf..00000000 --- a/src/opensearch/suggestionparser.cpp +++ /dev/null @@ -1,147 +0,0 @@ -/* ============================================================ - * - * This file is a part of the rekonq project - * - * Copyright (C) 2010-2011 by Lionel Chauvin <megabigbug@yahoo.fr> - * Copyright (C) 2010-2011 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 "suggestionparser.h" - -// Qt Includes -#include<QByteArray> -#include<QStringList> - - -ResponseList SuggestionParser::parse(const QByteArray &) -{ - return ResponseList(); -} - - -SuggestionParser::~SuggestionParser() -{ -} - - -ResponseList XMLParser::parse(const QByteArray &resp) -{ - ResponseList rlist; - - m_reader.clear(); - m_reader.addData(resp); - - while (!m_reader.atEnd() && !m_reader.hasError()) - { - m_reader.readNext(); - - if (m_reader.isStartDocument()) - continue; - - if (m_reader.isStartElement() && m_reader.name() == QL1S("Item")) - { - QString title; - QString description; - QString url; - QString image; - int image_width = 0; - int image_height = 0; - - m_reader.readNext(); - - while (!(m_reader.isEndElement() && m_reader.name() == QL1S("Item"))) - { - if (m_reader.isStartElement()) - { - - if (m_reader.name() == QL1S("Text")) - title = m_reader.readElementText(); - if (m_reader.name() == QL1S("Url")) - url = m_reader.readElementText(); - - if (m_reader.name() == QL1S("Image")) - { - image = m_reader.attributes().value("source").toString(); - image_width = m_reader.attributes().value("width").toString().toInt(); - image_height = m_reader.attributes().value("height").toString().toInt(); - } - - if (m_reader.name() == QL1S("Description")) - description = m_reader.readElementText(); - } - - m_reader.readNext(); - } - rlist << Response(title, description, url, image, image_width, image_height); - } - } - - return rlist; -} - - -ResponseList JSONParser::parse(const QByteArray &resp) -{ - QString response = QString::fromLocal8Bit(resp); - response = response.trimmed(); - - if (response.isEmpty()) - { - // RESPONSE IS EMPTY - return ResponseList(); - } - - if (!response.startsWith(QL1C('[')) - || !response.endsWith(QL1C(']')) - ) - { - // RESPONSE is NOT well FORMED - return ResponseList(); - } - - // Evaluate the JSON response using QtScript. - if (!m_reader.canEvaluate(response)) - { - // m_reader cannot evaluate the response - return ResponseList(); - } - - QScriptValue responseParts = m_reader.evaluate(response); - - if (!responseParts.property(1).isArray()) - { - // RESPONSE is not an array - return ResponseList(); - } - - ResponseList rlist; - QStringList responsePartsList; - qScriptValueToSequence(responseParts.property(1), responsePartsList); - - Q_FOREACH(const QString & s, responsePartsList) - { - rlist << Response(s); - } - - return rlist; -} diff --git a/src/opensearch/suggestionparser.h b/src/opensearch/suggestionparser.h deleted file mode 100644 index 01ec7c98..00000000 --- a/src/opensearch/suggestionparser.h +++ /dev/null @@ -1,118 +0,0 @@ -/* ============================================================ - * - * This file is a part of the rekonq project - * - * Copyright (C) 2010-2011 by Lionel Chauvin <megabigbug@yahoo.fr> - * Copyright (C) 2010-2011 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 SUGGESTIONPARSER_H -#define SUGGESTIONPARSER_H - - -// Rekonq Includes -#include "rekonq_defines.h" - -// Qt Includes -#include <QtCore/QList> -#include <QtCore/QXmlStreamReader> - -#include <QtScript/QScriptEngine> - - -class Response -{ -public: - QString title; - QString description; - QString url; - QString image; - int image_width; - int image_height; - - Response(const Response &item) : title(item.title), - description(item.description), - url(item.url), - image(item.image), - image_width(item.image_width), - image_height(item.image_height) - - {}; - - explicit Response(const QString &_title = QString(), - const QString &_description = QString(), - const QString &_url = QString(), - const QString &_image = QString(), - const int &_image_width = 0, - const int &_image_height = 0) : title(_title), - description(_description), - url(_url), - image(_image), - image_width(_image_width), - image_height(_image_height) - {}; -}; - - -// ----------------------------------------------------------------- - - -typedef QList <Response> ResponseList; - - -class SuggestionParser -{ -public: - virtual ~SuggestionParser(); - virtual ResponseList parse(const QByteArray &resp); - virtual QString type() = 0; -}; - - -class XMLParser : public SuggestionParser -{ -protected: - QXmlStreamReader m_reader; - -public: - ResponseList parse(const QByteArray &resp); - inline QString type() - { - return QL1S("application/x-suggestions+xml"); - } -}; - - -class JSONParser : public SuggestionParser -{ -private: - QScriptEngine m_reader; - -public: - ResponseList parse(const QByteArray &resp); - inline QString type() - { - return QL1S("application/x-suggestions+json"); - } -}; - -#endif //SUGGESTIONPARSER_H diff --git a/src/paneltreeview.cpp b/src/paneltreeview.cpp deleted file mode 100644 index 21fc01c8..00000000 --- a/src/paneltreeview.cpp +++ /dev/null @@ -1,185 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2010 by Yoann Laissus <yoann dot laissus at gmail dot com> -* Copyright (C) 2012 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 "paneltreeview.h" -#include "paneltreeview.moc" - -// Local Includes -#include "application.h" - -// KDE Includes -#include <KUrl> - -// Qt Includes -#include <QClipboard> -#include <QMouseEvent> - - -PanelTreeView::PanelTreeView(QWidget *parent) - : QTreeView(parent) -{ - connect(this, SIGNAL(itemHovered(QString)), parent, SIGNAL(itemHovered(QString))); - connect(this, SIGNAL(openUrl(KUrl, Rekonq::OpenType)), parent, SIGNAL(openUrl(KUrl, Rekonq::OpenType))); - setMouseTracking(true); - setExpandsOnDoubleClick(false); -} - - -void PanelTreeView::mousePressEvent(QMouseEvent *event) -{ - const QModelIndex index = indexAt(event->pos()); - bool expanded = isExpanded(index); - - QTreeView::mousePressEvent(event); - - // A change of an item expansion is handle by mouseReleaseEvent() - // So toggle again the item - if (expanded != isExpanded(index)) - setExpanded(index, !isExpanded(index)); - - if (!index.isValid()) - { - clearSelection(); - setCurrentIndex(QModelIndex()); - - if (event->button() == Qt::RightButton) - emit contextMenuEmptyRequested(event->pos()); - return; - } - - if (event->button() == Qt::RightButton) - { - if (model()->rowCount(index) == 0) - { - // An empty group needs to be handle by the panels - emit contextMenuItemRequested(event->pos()); - } - else - { - emit contextMenuGroupRequested(event->pos()); - } - } -} - - -void PanelTreeView::mouseReleaseEvent(QMouseEvent *event) -{ - QTreeView::mouseReleaseEvent(event); - - const QModelIndex index = indexAt(event->pos()); - if (!index.isValid()) - return; - - if (event->button() == Qt::MidButton || event->modifiers() == Qt::ControlModifier) - emit openUrl(qVariantValue< KUrl >(index.data(Qt::UserRole)), Rekonq::NewTab); - - else if (event->button() == Qt::LeftButton) - { - if (model()->rowCount(index) == 0) - emit openUrl(qVariantValue< KUrl >(index.data(Qt::UserRole))); - else - setExpanded(index, !isExpanded(index)); - } -} - - -void PanelTreeView::keyPressEvent(QKeyEvent *event) -{ - QTreeView::keyPressEvent(event); - QModelIndex index = currentIndex(); - - if (!index.isValid()) - return; - - if (event->key() == Qt::Key_Return) - { - if (model()->rowCount(index) == 0) - openUrl(qVariantValue< KUrl >(index.data(Qt::UserRole))); - else - setExpanded(index, !isExpanded(index)); - } - - else if (event->key() == Qt::Key_Delete) - { - emit delKeyPressed(); - } -} - - -void PanelTreeView::mouseMoveEvent(QMouseEvent *event) -{ - QTreeView::mouseMoveEvent(event); - const QModelIndex index = indexAt(event->pos()); - if (!index.isValid()) - { - emit itemHovered(""); - return; - } - emit itemHovered(qVariantValue< KUrl >(index.data(Qt::UserRole)).url()); -} - - -void PanelTreeView::openInCurrentTab() -{ - QModelIndex index = currentIndex(); - if (!index.isValid()) - return; - - emit openUrl(qVariantValue< KUrl >(index.data(Qt::UserRole))); -} - - -void PanelTreeView::copyToClipboard() -{ - QModelIndex index = currentIndex(); - if (!index.isValid()) - return; - - QClipboard *cb = QApplication::clipboard(); - cb->setText(qVariantValue< KUrl >(index.data(Qt::UserRole)).url()); -} - - -void PanelTreeView::openInNewTab() -{ - QModelIndex index = currentIndex(); - if (!index.isValid()) - return; - - emit openUrl(qVariantValue< KUrl >(index.data(Qt::UserRole)), Rekonq::NewTab); -} - - -void PanelTreeView::openInNewWindow() -{ - QModelIndex index = currentIndex(); - if (!index.isValid()) - return; - - emit openUrl(qVariantValue< KUrl >(index.data(Qt::UserRole)), Rekonq::NewWindow); -} diff --git a/src/paneltreeview.h b/src/paneltreeview.h deleted file mode 100644 index 1b640310..00000000 --- a/src/paneltreeview.h +++ /dev/null @@ -1,69 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2010-2011 by Yoann Laissus <yoann dot laissus at gmail dot com> -* Copyright (C) 2012 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 PANELTREEVIEW_H -#define PANELTREEVIEW_H - -// Rekonq Includes -#include "rekonq_defines.h" - -// Qt Includes -#include <QTreeView> - -// Forward Declarations -class KUrl; - - -class REKONQ_TESTS_EXPORT PanelTreeView : public QTreeView -{ - Q_OBJECT - -public: - PanelTreeView(QWidget *parent = 0); - -Q_SIGNALS: - void openUrl(const KUrl &, const Rekonq::OpenType & = Rekonq::CurrentTab); - void itemHovered(const QString &); - void delKeyPressed(); - void contextMenuItemRequested(const QPoint &pos); - void contextMenuGroupRequested(const QPoint &pos); - void contextMenuEmptyRequested(const QPoint &pos); - -public Q_SLOTS: - void copyToClipboard(); - void openInCurrentTab(); - void openInNewTab(); - void openInNewWindow(); - -protected: - void mouseReleaseEvent(QMouseEvent *event); - void mousePressEvent(QMouseEvent *event); - void mouseMoveEvent(QMouseEvent *event); - void keyPressEvent(QKeyEvent *event); -}; - -#endif // PANELTREEVIEW_H diff --git a/src/previewselectorbar.cpp b/src/previewselectorbar.cpp deleted file mode 100644 index b743e3c9..00000000 --- a/src/previewselectorbar.cpp +++ /dev/null @@ -1,132 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2010 by Matthieu Gicquel <matgic78 at gmail dot com> -* Copyright (C) 2010-2012 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 "previewselectorbar.h" -#include "previewselectorbar.moc" - -// Auto Includes -#include "rekonq.h" - -// Local Include -#include "application.h" -#include "mainwindow.h" -#include "webpage.h" -#include "webtab.h" -#include "websnap.h" - -// KDE Includes -#include <KIcon> -#include <KLocalizedString> - -// Qt Includes -#include <QAction> - - -PreviewSelectorBar::PreviewSelectorBar(int index, QWidget* parent) - : KMessageWidget(parent) - , m_previewIndex(index) - , m_insertAction(0) -{ - setMessageType(KMessageWidget::Information); - - QSize sz = size(); - sz.setWidth(qobject_cast<QWidget *>(parent)->size().width()); - resize(sz); - - setCloseButtonVisible(false); - - setText(i18n("Please open up the webpage you want to add as favorite")); - - m_insertAction = new QAction(KIcon("insert-image"), i18n("Set to This Page"), this); - connect(m_insertAction, SIGNAL(triggered(bool)), this, SLOT(clicked())); - addAction(m_insertAction); -} - - -void PreviewSelectorBar::verifyUrl() -{ - - if (rApp->mainWindow()->currentTab()->page()->mainFrame()->url().scheme() != "about") - { - m_insertAction->setEnabled(true); - m_insertAction->setToolTip(""); - } - else - { - m_insertAction->setEnabled(false); - m_insertAction->setToolTip(i18n("You cannot add this webpage as favorite")); - } -} - - -void PreviewSelectorBar::loadProgress() -{ - m_insertAction->setEnabled(false); - m_insertAction->setToolTip(i18n("Page is loading...")); -} - - -void PreviewSelectorBar::loadFinished() -{ - m_insertAction->setEnabled(true); - m_insertAction->setToolTip(""); - - verifyUrl(); -} - - -void PreviewSelectorBar::clicked() -{ - WebPage *page = rApp->mainWindow()->currentTab()->page(); - - if (page) - { - KUrl url = page->mainFrame()->url(); - QStringList names = ReKonfig::previewNames(); - QStringList urls = ReKonfig::previewUrls(); - - //cleanup the previous image from the cache (useful to refresh the snapshot) - QFile::remove(WebSnap::imagePathFromUrl(urls.at(m_previewIndex))); - QPixmap preview = WebSnap::renderPagePreview(*page); - preview.save(WebSnap::imagePathFromUrl(url)); - - urls.replace(m_previewIndex, url.toMimeDataString()); - names.replace(m_previewIndex, page->mainFrame()->title()); - - ReKonfig::setPreviewNames(names); - ReKonfig::setPreviewUrls(urls); - - ReKonfig::self()->writeConfig(); - - - page->mainFrame()->load(KUrl("about:favorites")); - } - - animatedHide(); - deleteLater(); -} diff --git a/src/previewselectorbar.h b/src/previewselectorbar.h deleted file mode 100644 index fa54303d..00000000 --- a/src/previewselectorbar.h +++ /dev/null @@ -1,67 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2010 by Matthieu Gicquel <matgic78 at gmail dot com> -* Copyright (C) 2010-2012 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 PREVIEWSELECTORBAR_H -#define PREVIEWSELECTORBAR_H - - -// Rekonq Includes -#include "rekonq_defines.h" - -// KDE Includes -#include <KMessageWidget> - -// Forward Declarations -class QAction; - - -class REKONQ_TESTS_EXPORT PreviewSelectorBar : public KMessageWidget -{ - Q_OBJECT - -public: - PreviewSelectorBar(int index, QWidget *parent); - - inline void setIndex(int index) - { - m_previewIndex = index; - } - -private Q_SLOTS: - void clicked(); - - void loadProgress(); - void loadFinished(); - - void verifyUrl(); - -private: - int m_previewIndex; - QAction *m_insertAction; -}; - -#endif // PREVIEWSELECTORBAR_H diff --git a/src/protocolhandler.cpp b/src/protocolhandler.cpp deleted file mode 100644 index 186b93d3..00000000 --- a/src/protocolhandler.cpp +++ /dev/null @@ -1,386 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2010-2012 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 "protocolhandler.h" -#include "protocolhandler.moc" - -// Auto Includes -#include "rekonq.h" - -// Local Includes -#include "application.h" -#include "historymanager.h" -#include "mainview.h" -#include "mainwindow.h" -#include "newtabpage.h" -#include "urlbar.h" -#include "webpage.h" -#include "webtab.h" - -// KDE Includes -#include <KIO/Job> -#include <KDirLister> -#include <KLocale> -#include <KLocalizedString> -#include <KMessageBox> -#include <KProcess> -#include <KStandardDirs> -#include <KToolInvocation> -#include <KProtocolInfo> -#include <KRun> - -// Qt Includes -#include <QNetworkRequest> -#include <QWebFrame> -#include <QTextDocument> - - -static bool fileItemListLessThan(const KFileItem &s1, const KFileItem &s2) -{ - return s1.name().toLower() < s2.name().toLower(); -} - - -static KFileItemList sortFileList(const KFileItemList &list) -{ - KFileItemList orderedList, dirList, fileList; - - // order dirs before files.. - Q_FOREACH(const KFileItem & item, list) - { - if (item.isDir()) - dirList << item; - else - fileList << item; - } - qStableSort(dirList.begin(), dirList.end(), fileItemListLessThan); - qStableSort(fileList.begin(), fileList.end(), fileItemListLessThan); - - orderedList << dirList; - orderedList << fileList; - - return orderedList; -} - - -// ------------------------------------------------------------------------------------------- - - -ProtocolHandler::ProtocolHandler(QObject *parent) - : QObject(parent) - , _lister(new KDirLister(this)) - , _frame(0) -{ - _lister->setMainWindow(rApp->mainWindow()); -} - - -bool ProtocolHandler::preHandling(const QNetworkRequest &request, QWebFrame *frame) -{ - _url = request.url(); - _frame = frame; - - // javascript handling - if (_url.protocol() == QL1S("javascript")) - { - QString scriptSource = _url.authority(); - if (scriptSource.isEmpty()) - { - // if javascript:<code here> then authority() returns - // an empty string. Extract the source manually - // Use the prettyUrl() since that is unencoded - - // 11 is length of 'javascript:' - // fromPercentEncoding() is used to decode all the % encoded - // characters to normal, so that it is treated as valid javascript - scriptSource = QUrl::fromPercentEncoding(_url.url().mid(11).toAscii()); - if (scriptSource.isEmpty()) - return false; - } - - QVariant result = frame->evaluateJavaScript(scriptSource); - return true; - } - - // "about" handling - if (_url.protocol() == QL1S("about")) - { - QByteArray encodedUrl = _url.toEncoded(); - // let webkit manage the about:blank url... - if (encodedUrl.startsWith(QByteArray("about:blank"))) - { - return false; - } - - if (encodedUrl == QByteArray("about:home")) - { - switch (ReKonfig::newTabStartPage()) - { - case 0: // favorites - _url = KUrl("about:favorites"); - break; - case 1: // closed tabs - _url = KUrl("about:closedTabs"); - break; - case 2: // bookmarks - _url = KUrl("about:bookmarks"); - break; - case 3: // history - _url = KUrl("about:history"); - break; - case 4: // downloads - _url = KUrl("about:downloads"); - break; - case 5: // tabs - _url = KUrl("about:tabs"); - default: // unuseful - break; - } - } - - WebPage *page = qobject_cast<WebPage *>(frame->page()); - page->setIsOnRekonqPage(true); - - NewTabPage p(frame); - p.generate(_url); - - return true; - } - - // "mailto" handling: It needs to be handled both in preHandling (mail url launched) - // and in postHandling (mail links clicked) - if (_url.protocol() == QL1S("mailto")) - { - KToolInvocation::invokeMailer(_url); - return true; - } - - // "apt" handling - // NOTE: this is a stupid workaround to ensure apt protocol works - if (_url.protocol() == QL1S("apt")) - { - kDebug() << "APT URL: " << _url; - (void)new KRun(_url, rApp->mainWindow(), 0, _url.isLocalFile()); - return true; - } - - // let webkit try to load a known (or missing) protocol... - if (KProtocolInfo::isKnownProtocol(_url)) - return false; - - // Error Message, for those protocols we cannot handle - KMessageBox::error(rApp->mainWindow(), i18nc("@info", "rekonq does not know how to handle this protocol: %1", _url.protocol())); - - return true; -} - - -bool ProtocolHandler::postHandling(const QNetworkRequest &request, QWebFrame *frame) -{ - _url = request.url(); - _frame = frame; - - // "http(s)" (fast) handling - if (_url.protocol() == QL1S("http") || _url.protocol() == QL1S("https")) - return false; - - // "mailto" handling: It needs to be handled both here(mail links clicked) - // and in prehandling (mail url launched) - if (_url.protocol() == QL1S("mailto")) - { - KToolInvocation::invokeMailer(_url); - return true; - } - - // "ftp" handling. A little bit "hard" handling this. Hope I found - // the best solution. - // My idea is: webkit cannot handle in any way ftp. So we have surely to return true here. - // We start trying to guess what the url represent: it's a dir? show its contents (and download them). - // it's a file? download it. It's another thing? beat me, but I don't know what to do... - if (_url.protocol() == QL1S("ftp")) - { - KIO::StatJob *job = KIO::stat(_url); - connect(job, SIGNAL(result(KJob*)), this, SLOT(slotMostLocalUrlResult(KJob*))); - return true; - } - - // "file" handling. This is quite trivial :) - if (_url.protocol() == QL1S("file")) - { - QFileInfo fileInfo(_url.path()); - if (fileInfo.isDir()) - { - connect(_lister, SIGNAL(newItems(KFileItemList)), this, SLOT(showResults(KFileItemList))); - _lister->openUrl(_url); - - return true; - } - - return false; - } - - // we cannot handle this protocol in any way. - // Try KRunning it... - if (KProtocolInfo::isKnownProtocol(_url)) - { - (void)new KRun(_url, rApp->mainWindow(), 0, _url.isLocalFile()); - return true; - } - - return false; -} - - -// --------------------------------------------------------------------------------------------------------------------------- - - -void ProtocolHandler::showResults(const KFileItemList &list) -{ - if (!_lister->rootItem().isNull() && _lister->rootItem().isReadable() && _lister->rootItem().isFile()) - { - emit downloadUrl(_lister->rootItem().url()); - } - else - { - QString html = dirHandling(list); - _frame->setHtml(html); - qobject_cast<WebPage *>(_frame->page())->setIsOnRekonqPage(true); - - rApp->mainWindow()->mainView()->currentUrlBar()->setQUrl(_url); - rApp->mainWindow()->currentTab()->setFocus(); - rApp->historyManager()->addHistoryEntry(_url, _url.prettyUrl()); - } -} - - -QString ProtocolHandler::dirHandling(const KFileItemList &list) -{ - if (!_lister) - { - return QString("rekonq error, sorry :("); - } - - // let me modify it.. - KUrl rootUrl = _url; - - // display "rekonq info" page - QString infoFilePath = KStandardDirs::locate("data", "rekonq/htmls/rekonqinfo.html"); - QFile file(infoFilePath); - - bool isOpened = file.open(QIODevice::ReadOnly); - if (!isOpened) - { - return QString("rekonq error, sorry :("); - } - - // 1. default data path - QString dataPath = QL1S("file://") + infoFilePath; - dataPath.remove(QL1S("/htmls/rekonqinfo.html")); - - // 2. title - QString title = _url.prettyUrl(); - - // 3. main content - QString msg = i18nc("%1=an URL", "<h2>Index of %1</h2>", _url.prettyUrl()); - - - if (rootUrl.cd("..")) - { - QString path = rootUrl.prettyUrl(); - QString uparrow = KIconLoader::global()->iconPath("arrow-up", KIconLoader::Small); - msg += "<img src=\"file://" + uparrow + "\" alt=\"up-arrow\" />"; - msg += "<a href=\"" + path + "\">" + i18n("Up to higher level directory") + "</a><br /><br />"; - } - - msg += QL1S("<table width=\"95%\" align=\"center\">"); - msg += QL1S("<tr>"); - msg += QL1S("<th align=\"left\">") + i18n("Name") + QL1S("</th>"); - msg += QL1S("<th align=\"center\">") + i18n("Size") + QL1S("</th>"); - msg += QL1S("<th align=\"right\">") + i18n("Last Modified") + QL1S("</th>"); - msg += QL1S("</tr>"); - - KFileItemList orderedList = sortFileList(list); - Q_FOREACH(const KFileItem & item, orderedList) - { - msg += QL1S("<tr>"); - QString fullPath = Qt::escape(item.url().prettyUrl()); - - QString iconName = item.iconName(); - QString icon = QString("file://") + KIconLoader::global()->iconPath(iconName, KIconLoader::Small); - - msg += QL1S("<td width=\"70%\">"); - msg += QL1S("<img src=\"") + icon + QL1S("\" alt=\"") + iconName + QL1S("\" /> "); - msg += QL1S("<a href=\"") + fullPath + QL1S("\">") + Qt::escape(item.name()) + QL1S("</a>"); - msg += QL1S("</td>"); - - msg += QL1S("<td align=\"right\">"); - if (item.isFile()) - { - msg += KGlobal::locale()->formatByteSize(item.size(), 1); - } - msg += QL1S("</td>"); - - msg += QL1S("<td align=\"right\">"); - msg += item.timeString(); - msg += QL1S("</td>"); - - msg += QL1S("</tr>"); - } - msg += QL1S("</table>"); - - // done. Replace variables and show it - QString html = QL1S(file.readAll()); - - html.replace(QL1S("$DEFAULT_PATH"), dataPath); - html.replace(QL1S("$PAGE_TITLE"), title); - html.replace(QL1S("$MAIN_CONTENT"), msg); - - return html; -} - - -void ProtocolHandler::slotMostLocalUrlResult(KJob *job) -{ - if (job->error()) - { - kDebug() << "JOB ERROR: " << job->errorString(); - // TODO - } - else - { - KIO::StatJob *statJob = static_cast<KIO::StatJob*>(job); - KIO::UDSEntry entry = statJob->statResult(); - if (entry.isDir()) - { - connect(_lister, SIGNAL(newItems(KFileItemList)), this, SLOT(showResults(KFileItemList))); - _lister->openUrl(_url); - } - else - { - emit downloadUrl(_url); - } - } -} diff --git a/src/protocolhandler.h b/src/protocolhandler.h deleted file mode 100644 index f35fdcc6..00000000 --- a/src/protocolhandler.h +++ /dev/null @@ -1,83 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2010-2012 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 PROTOCOL_HANDLER_H -#define PROTOCOL_HANDLER_H - - -// Rekonq Includes -#include "rekonq_defines.h" - -// KDE Includes -#include <KUrl> - -// Qt Includes -#include <QObject> - -// Forward Declarations -class KDirLister; -class KFileItemList; -class KJob; - -class QNetworkRequest; -class QWebFrame; - - -class REKONQ_TESTS_EXPORT ProtocolHandler : public QObject -{ - Q_OBJECT - -public: - ProtocolHandler(QObject *parent = 0); - - /** - * This function handles all the protocols that have to be handled before - * WebKit does - */ - bool preHandling(const QNetworkRequest &request, QWebFrame *frame); - - /** - * This function handles all the protocols that have to be handled after - * WebKit tried to - */ - bool postHandling(const QNetworkRequest &request, QWebFrame *frame); - -Q_SIGNALS: - void downloadUrl(const KUrl &); - -private Q_SLOTS: - void showResults(const KFileItemList &); - void slotMostLocalUrlResult(KJob *); - -private: - QString dirHandling(const KFileItemList &list); - - KDirLister *_lister; - QWebFrame *_frame; - KUrl _url; -}; - -#endif // PROTOCOL_HANDLER_H diff --git a/src/qwebkitplatformplugin.h b/src/qwebkitplatformplugin.h deleted file mode 100644 index a1f25fdb..00000000 --- a/src/qwebkitplatformplugin.h +++ /dev/null @@ -1,201 +0,0 @@ -/* - * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies) - * Copyright (C) 2012 by Lindsay Mathieson <lindsay dot mathieson at gmail dot com> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library 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. - * - */ - -#ifndef QWEBKITPLATFORMPLUGIN_H -#define QWEBKITPLATFORMPLUGIN_H - -/* - * Warning: The contents of this file is not part of the public QtWebKit API - * and may be changed from version to version or even be completely removed. -*/ - -#if defined(WTF_USE_QT_MULTIMEDIA) && WTF_USE_QT_MULTIMEDIA -#include <QMediaPlayer> -#endif -#include <QtCore/QObject> -#include <QtCore/QRect> -#include <QtCore/QUrl> -#include <QtGui/QColor> -#include <QtGui/QFont> - -class QWebSelectData -{ -public: - virtual ~QWebSelectData() {} - - enum ItemType { Option, Group, Separator }; - - virtual ItemType itemType(int) const = 0; - virtual QString itemText(int index) const = 0; - virtual QString itemToolTip(int index) const = 0; - virtual bool itemIsEnabled(int index) const = 0; - virtual bool itemIsSelected(int index) const = 0; - virtual int itemCount() const = 0; - virtual bool multiple() const = 0; - virtual QColor backgroundColor() const = 0; - virtual QColor foregroundColor() const = 0; - virtual QColor itemBackgroundColor(int index) const = 0; - virtual QColor itemForegroundColor(int index) const = 0; -}; - -class QWebSelectMethod : public QObject -{ - Q_OBJECT -public: - virtual ~QWebSelectMethod() {} - - virtual void show(const QWebSelectData&) = 0; - virtual void hide() = 0; - virtual void setGeometry(const QRect&) = 0; - virtual void setFont(const QFont&) = 0; - -Q_SIGNALS: - void selectItem(int index, bool allowMultiplySelections, bool shift); - void didHide(); -}; - -class QWebNotificationData -{ -public: - virtual ~QWebNotificationData() {} - - virtual const QString title() const = 0; - virtual const QString message() const = 0; - virtual const QUrl iconUrl() const = 0; - virtual const QUrl openerPageUrl() const = 0; -}; - -class QWebNotificationPresenter : public QObject -{ - Q_OBJECT -public: - QWebNotificationPresenter() {} - virtual ~QWebNotificationPresenter() {} - - virtual void showNotification(const QWebNotificationData*) = 0; - -Q_SIGNALS: - void notificationClosed(); - void notificationClicked(); -}; - -class QWebHapticFeedbackPlayer: public QObject -{ - Q_OBJECT -public: - QWebHapticFeedbackPlayer() {} - virtual ~QWebHapticFeedbackPlayer() {} - - enum HapticStrength - { - None, Weak, Medium, Strong - }; - - enum HapticEvent - { - Press, Release - }; - - virtual void playHapticFeedback(const HapticEvent, const QString& hapticType, const HapticStrength) = 0; -}; - -class QWebTouchModifier : public QObject -{ - Q_OBJECT -public: - virtual ~QWebTouchModifier() {} - - enum PaddingDirection - { - Up, Right, Down, Left - }; - - virtual unsigned hitTestPaddingForTouch(const PaddingDirection) const = 0; -}; - -#if defined(WTF_USE_QT_MULTIMEDIA) && WTF_USE_QT_MULTIMEDIA -class QWebFullScreenVideoHandler : public QObject -{ - Q_OBJECT -public: - QWebFullScreenVideoHandler() {} - virtual ~QWebFullScreenVideoHandler() {} - virtual bool requiresFullScreenForVideoPlayback() const = 0; - -Q_SIGNALS: - void fullScreenClosed(); - -public Q_SLOTS: - virtual void enterFullScreen(QMediaPlayer*) = 0; - virtual void exitFullScreen() = 0; -}; -#endif - -class QWebSpellChecker : public QObject -{ - Q_OBJECT -public: - struct GrammarDetail - { - int location; - int length; - QStringList guesses; - QString userDescription; - }; - - virtual bool isContinousSpellCheckingEnabled() const = 0; - virtual void toggleContinousSpellChecking() = 0; - - virtual void learnWord(const QString& word) = 0; - virtual void ignoreWordInSpellDocument(const QString& word) = 0; - virtual void checkSpellingOfString(const QString& word, int* misspellingLocation, int* misspellingLength) = 0; - virtual QString autoCorrectSuggestionForMisspelledWord(const QString& word) = 0; - virtual void guessesForWord(const QString& word, const QString& context, QStringList& guesses) = 0; - - virtual bool isGrammarCheckingEnabled() = 0; - virtual void toggleGrammarChecking() = 0; - virtual void checkGrammarOfString(const QString&, QList<GrammarDetail>&, int* badGrammarLocation, int* badGrammarLength) = 0; -}; - -class QWebKitPlatformPlugin -{ -public: - virtual ~QWebKitPlatformPlugin() {} - - enum Extension - { - MultipleSelections, - Notifications, - Haptics, - TouchInteraction, - FullScreenVideoPlayer, - SpellChecker - }; - - virtual bool supportsExtension(Extension) const = 0; - virtual QObject* createExtension(Extension) const = 0; -}; - -QT_BEGIN_NAMESPACE -Q_DECLARE_INTERFACE(QWebKitPlatformPlugin, "com.nokia.Qt.WebKit.PlatformPlugin/1.9"); -QT_END_NAMESPACE - -#endif // QWEBKITPLATFORMPLUGIN_H diff --git a/src/rekonq.kcfg b/src/rekonq.kcfg deleted file mode 100644 index 18dea24e..00000000 --- a/src/rekonq.kcfg +++ /dev/null @@ -1,294 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE kcfg SYSTEM "http://www.kde.org/standards/kcfg/1.0/kcfg.dtd"> -<kcfg xmlns="http://www.kde.org/standards/kcfg/1.0" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://www.kde.org/standards/kcfg/1.0 - http://www.kde.org/standards/kcfg/1.0/kcfg.xsd" > - -<!-- Includes --> -<include>QtWebKit</include> -<include>QDateTime</include> -<include>KUrl</include> -<include>KGlobalSettings</include> - -<kcfgfile name="rekonqrc" /> - -<!-- Miscellaneuos (not config UI) settings --> -<group name="misc"> - <entry name="FirstExecution" type="Bool"> - <default>true</default> - </entry> - <entry name="showHistoryPanel" type="Bool"> - <default>false</default> - </entry> - <entry name="showBookmarksPanel" type="Bool"> - <default>false</default> - </entry> - <entry name="walletBlackList" type="StringList"> - <default></default> - </entry> - <entry name="recoverOnCrash" type="Int"> - <default>0</default> - </entry> - <entry name="createDesktopAppShortcut" type="Bool"> - <default>true</default> - </entry> - <entry name="createMenuAppShortcut" type="Bool"> - <default>false</default> - </entry> - <entry name="checkDefaultSearchEngine" type="Bool"> - <default>true</default> - </entry> - <entry name="clearHistory" type="Bool"> - <default>true</default> - </entry> - <entry name="clearDownloads" type="Bool"> - <default>true</default> - </entry> - <entry name="clearCookies" type="Bool"> - <default>true</default> - </entry> - <entry name="clearCachedPages" type="Bool"> - <default>true</default> - </entry> - <entry name="clearWebIcons" type="Bool"> - <default>true</default> - </entry> - <entry name="clearHomePageThumbs" type="Bool"> - <default>true</default> - </entry> -</group> - - -<!-- New Tab Page Settings --> -<group name="NewTabPage"> - <entry name="previewNames" type="StringList"> - <default>KDE Homepage,rekonq site</default> - </entry> - <entry name="previewUrls" type="StringList"> - <default>http://www.kde.org/,http://rekonq.kde.org/</default> - </entry> -</group> - - -<!-- General Settings --> -<group name="General"> - <entry name="startupBehaviour" type="Int"> - <default>1</default> - </entry> - <entry name="useNewTabPage" type="Bool"> - <default>false</default> - </entry> - <entry name="homePage" type="String"> - <default>http://www.kde.org/</default> - </entry> - <entry name="downloadPath" type="Url"> - <default code="true">KGlobalSettings::downloadPath()</default> - </entry> - <entry name="askDownloadPath" type="Bool"> - <default>false</default> - </entry> - <entry name="kgetDownload" type="Bool"> - <default>false</default> - </entry> - <entry name="kgetList" type="Bool"> - <default>false</default> - </entry> -</group> - - -<!-- Tabs Settings --> -<group name="Tabs"> - <!-- xxx --> - <entry name="newTabsBehaviour" type="Int"> - <default>0</default> - </entry> - <entry name="newTabStartPage" type="Int"> - <default>0</default> - </entry> - <!-- xxx --> - <entry name="hoveringTabOption" type="Int"> - <default>0</default> - </entry> - <!-- xxx --> - <entry name="alwaysShowTabBar" type="Bool"> - <default>true</default> - </entry> - <entry name="openLinksInNewWindow" type="Bool"> - <default>false</default> - </entry> - <entry name="openExternalLinksInNewWindow" type="Bool"> - <default>false</default> - </entry> - <entry name="lastTabClosesWindow" type="Bool"> - <default>false</default> - </entry> - <entry name="openNewTabsInBackground" type="Bool"> - <default>true</default> - </entry> - <entry name="openNewTabsNearCurrent" type="Bool"> - <default>false</default> - </entry> - <entry name="closeTabSelectPrevious" type="Bool"> - <default>false</default> - </entry> - <entry name="animatedTabHighlighting" type="Bool"> - <default>true</default> - </entry> -</group> - - -<!-- Fonts Settings --> -<group name="Appearance"> - <entry name="standardFontFamily" type="String"> - <default code="true">KGlobalSettings::generalFont().family()</default> - </entry> - <entry name="fixedFontFamily" type="String"> - <default code="true">KGlobalSettings::fixedFont().family()</default> - </entry> - <entry name="serifFontFamily" type="String"> - <default code="true">QWebSettings::globalSettings()->fontFamily(QWebSettings::SerifFont)</default> - </entry> - <entry name="sansSerifFontFamily" type="String"> - <default code="true">QWebSettings::globalSettings()->fontFamily(QWebSettings::SansSerifFont)</default> - </entry> - <entry name="cursiveFontFamily" type="String"> - <default code="true">QWebSettings::globalSettings()->fontFamily(QWebSettings::CursiveFont)</default> - </entry> - <entry name="fantasyFontFamily" type="String"> - <default code="true">QWebSettings::globalSettings()->fontFamily(QWebSettings::FantasyFont)</default> - </entry> - <entry name="defaultFontSize" type="Int"> - <default>12</default> - </entry> - <entry name="minFontSize" type="Int"> - <default>7</default> - </entry> - <entry name="defaultEncoding" type="String"> - <default>ISO 8859-1</default> - </entry> - <entry name="userCSS" type="Url"> - <default></default> - </entry> -</group> - - -<!-- Privacy Settings --> -<group name="Privacy"> - <entry name="javascriptCanOpenWindows" type="Bool"> - <default>false</default> - </entry> - <entry name="javascriptCanAccessClipboard" type="Bool"> - <default>false</default> - </entry> - <entry name="expireHistory" type="Int"> - <default>0</default> - </entry> - <entry name="passwordSavingEnabled" type="Bool"> - <default>true</default> - </entry> -</group> - - -<!-- WebKit Settings --> -<group name="Webkit"> - <!-- xxx --> - <entry name="javascriptEnabled" type="Bool"> - <default>true</default> - </entry> - <!-- xxx --> - <entry name="pluginsEnabled" type="Int"> - <default>0</default> - </entry> - <!-- xxx --> - <entry name="offlineStorageDatabaseEnabled" type="Bool"> - <default>false</default> - </entry> - <entry name="offlineWebApplicationCacheEnabled" type="Bool"> - <default>false</default> - </entry> - <entry name="localStorageEnabled" type="Bool"> - <default>false</default> - </entry> - <!-- xxx --> - <entry name="javaEnabled" type="Bool"> - <default>true</default> - </entry> - <entry name="webGL" type="Bool"> - <default>false</default> - </entry> - <entry name="spatialNavigation" type="Bool"> - <default>false</default> - </entry> - <entry name="frameFlattening" type="Bool"> - <default>false</default> - </entry> - <entry name="dnsPrefetch" type="Bool"> - <default>true</default> - </entry> - <entry name="printElementBackgrounds" type="Bool"> - <default>true</default> - </entry> -</group> - -<!-- Advanced Settings --> -<group name="Advanced"> - <entry name="hScrollWheelHistory" type="Bool"> - <default>false</default> - </entry> - <entry name="enableViShortcuts" type="Bool"> - <default>false</default> - </entry> - <entry name="accessKeysEnabled" type="Bool"> - <default>false</default> - </entry> - <entry name="smoothScrolling" type="Bool"> - <default>true</default> - </entry> - <entry name="useFavicon" type="Bool"> - <default>false</default> - </entry> - <entry name="middleClickAction" type="Int"> - <default>2</default> - </entry> - <entry name="automaticSpellChecking" type="Bool"> - <default>true</default> - </entry> -</group> - - -<!-- Sync Settings --> -<group name="Sync"> - <entry name="syncEnabled" type="Bool"> - <default>false</default> - </entry> - <entry name="syncBookmarks" type="Bool"> - <default>false</default> - </entry> - <entry name="syncHistory" type="Bool"> - <default>false</default> - </entry> - <entry name="syncPasswords" type="Bool"> - <default>false</default> - </entry> - <entry name="syncType" type="Int"> - <default>0</default> - </entry> - <entry name="syncHost" type="String"> - <default></default> - </entry> - <entry name="syncUser" type="String"> - <default></default> - </entry> - <entry name="syncPass" type="String"> - <default></default> - </entry> - <entry name="syncPath" type="String"> - <default></default> - </entry> - <entry name="syncPort" type="Int"> - <default>21</default> - </entry> -</group> - -</kcfg> diff --git a/src/rekonq.kcfgc b/src/rekonq.kcfgc deleted file mode 100644 index 50a9817d..00000000 --- a/src/rekonq.kcfgc +++ /dev/null @@ -1,5 +0,0 @@ -File=rekonq.kcfg -ClassName=ReKonfig -Singleton=true -Mutators=true -UseEnumTypes=true diff --git a/src/rekonq_defines.h b/src/rekonq_defines.h deleted file mode 100644 index e01fa964..00000000 --- a/src/rekonq_defines.h +++ /dev/null @@ -1,117 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2007 David Faure <faure@kde.org> -* Copyright (C) 2009-2011 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 REKONQ_DEFINES_H -#define REKONQ_DEFINES_H - - -// ---------------------------------------------------------------------------------------------------- -// UNIT TESTS NEED - -/* needed for KDE_EXPORT and KDE_IMPORT macros */ -#include <kdemacros.h> - -/* Classes from the rekonq application, which are exported only for unit tests */ -#ifndef REKONQ_TESTS_EXPORT -/* We are building this library */ -#define REKONQ_TESTS_EXPORT KDE_EXPORT -#else -/* We are using this library */ -#define REKONQ_TESTS_EXPORT KDE_IMPORT -#endif - - -// ---------------------------------------------------------------------------------------------------- -// DEFINES - -#define QL1S(x) QLatin1String(x) -#define QL1C(x) QLatin1Char(x) - -#ifndef ASSERT_NOT_REACHED -# ifndef QT_NO_DEBUG -# define ASSERT_NOT_REACHED(msg) qt_assert(#msg,__FILE__,__LINE__); kDebug() << #msg -# else -# define ASSERT_NOT_REACHED(msg) kDebug() << #msg -# endif -#endif //ASSERT_NOT_REACHED - -// ---------------------------------------------------------------------------------------------------- -// ENUMS - -namespace Rekonq -{ - -/** -* @short notifying message status -* Different message status -*/ -enum Notify -{ - Success, ///< url successfully (down)loaded - Error, ///< url failed to (down)load - Download, ///< downloading url - Info, ///< information - Url ///< url string shown (default) -}; - -/** -* @short Open link options -* Different modes of opening new tab -*/ -enum OpenType -{ - CurrentTab, ///< open url in current tab - NewTab, ///< open url according to users settings - NewFocusedTab, ///< open url in new tab and focus it - NewBackGroundTab, ///< open url in new background tab - NewWindow ///< open url in new window -}; - -/** -* @short data to be synced -* Different data we can sync -*/ -enum SyncData -{ - Bookmarks, - History, - Passwords -}; - -} - - -// ---------------------------------------------------------------------------------------------------- -// INCLUDES - -#include <KDebug> - - - -// ---------------------------------------------------------------------------------------------------- - -#endif // REKONQ_DEFINES_H diff --git a/src/rekonqmenu.cpp b/src/rekonqmenu.cpp deleted file mode 100644 index a5cea784..00000000 --- a/src/rekonqmenu.cpp +++ /dev/null @@ -1,99 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2011 by Peter Penz <peter.penz19@gmail.com> -* Copyright (C) 2012 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 "rekonqmenu.h" -#include "rekonqmenu.moc" - -// Qt Includes -#include <QApplication> -#include <QDesktopWidget> -#include <QWidget> - - -RekonqMenu::RekonqMenu(QWidget *parent) - : KMenu(parent) -{ -} - - -void RekonqMenu::setButtonWidget(QWidget *w) -{ - m_button = w; -} - - -void RekonqMenu::showEvent(QShowEvent* event) -{ - KMenu::showEvent(event); - - if (!m_button) - return; - - // Adjust the position of the menu to be shown within the - // rekonq window to reduce the cases that sub-menus might overlap - // the right screen border. - QPoint pos; - if (layoutDirection() == Qt::RightToLeft) - { - pos = m_button->mapToGlobal(QPoint(0, m_button->height())); - } - else - { - pos = m_button->mapToGlobal(QPoint(m_button->width(), m_button->height())); - pos.rx() -= width(); - } - - // Assure that the menu is not shown outside the screen boundaries and - // that it does not overlap with the parent button. - const QRect screen = QApplication::desktop()->screenGeometry(QCursor::pos()); - if (pos.x() < screen.x()) - { - pos.rx() = screen.x(); - } - else - { - if (pos.x() + width() > screen.x() + screen.width()) - { - pos.rx() = screen.x() + screen.width() - width(); - } - } - - if (pos.y() < screen.y()) - { - pos.ry() = screen.y(); - } - else - { - if (pos.y() + height() > screen.y() + screen.height()) - { - pos.ry() = m_button->mapToGlobal(QPoint(0, 0)).y() + height(); - } - } - - move(pos); -} diff --git a/src/rekonqmenu.h b/src/rekonqmenu.h deleted file mode 100644 index 8bda008b..00000000 --- a/src/rekonqmenu.h +++ /dev/null @@ -1,64 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2011 by Peter Penz <peter.penz19@gmail.com> -* Copyright (C) 2012 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 REKONQ_MENU_H -#define REKONQ_MENU_H - - -// Rekonq Includes -#include "rekonq_defines.h" - -// KDE Includes -#include <KMenu> - -// Forward Declarations -class QWidget; - - -/** - * Menu shown inside rekonq window. - * Inspired by Dolphin solution. - * - */ -class REKONQ_TESTS_EXPORT RekonqMenu : public KMenu -{ - Q_OBJECT - -public: - RekonqMenu(QWidget *parent); - - void setButtonWidget(QWidget *); - -protected: - virtual void showEvent(QShowEvent* event); - -private: - QWidget *m_button; -}; - -#endif // REKONQ_MENU_H diff --git a/src/rekonqui.rc b/src/rekonqui.rc deleted file mode 100644 index 1c6f26a5..00000000 --- a/src/rekonqui.rc +++ /dev/null @@ -1,155 +0,0 @@ -<?xml version="1.0"?> -<!DOCTYPE gui SYSTEM "kpartgui.dtd"> -<gui name="rekonq" version="61"> - -<!--- =========== Rekonq Menu ============= --> -<Menu name="rekonqMenu" noMerge="1"> - <Action name="new_tab" /> - <Action name="new_window" /> - <Action name="private_browsing" /> - <Separator/> - <Action name="file_open" /> - <Action name="file_save_as" /> - <Action name="file_print" /> - <Action name="edit_find" /> - <Action name="view_zoom" /> - <Separator/> - - <Menu name="toolsMenu" icon="preferences-other" noMerge="1"> - <text>&Tools</text> - <Action name="clear_private_data" /> - <Separator/> - <Action name="webapp_shortcut" /> - <Action name="web_inspector" /> - <Action name="page_source" /> - <Action name="net_analyzer" /> - <Action name="set_editable" /> - <Separator/> - <Action name="useragent" /> - <Action name="sync" /> - <Action name="adblock" /> - </Menu> - - <Separator/> - <Action name="show_history_panel" /> - <Action name="show_bookmarks_toolbar" /> - <Action name="show_bookmarks_panel" /> - <Action name="fullscreen" /> - <Separator/> - - <Menu name="help" icon="help-browser"> - <text>&Help</text> - <Action name="help_contents"/> - <Action name="help_whats_this"/> - <Separator weakSeparator="1"/> - <Action name="help_report_bug"/> - <Separator weakSeparator="1"/> - <Action name="switch_application_language"/> - <Separator weakSeparator="1"/> - <Action name="help_about_app"/> - <Action name="help_about_kde"/> - </Menu> - - <Action name="options_configure" /> -</Menu> -<!--- ====================================== --> - - -<MenuBar> - <!-- ============ FILE menu =========== --> - <Menu name="file" noMerge="1"><text>&File</text> - <Action name="file_open" /> - <Action name="open_location" /> - <Separator/> - <Action name="new_tab" /> - <Action name="close_tab" /> - <Separator/> - <Action name="file_save_as" /> - <Separator/> - <Action name="file_print_preview" /> - <Action name="file_print" /> - <Separator/> - <Action name="file_quit" /> - </Menu> - - <!-- ============ EDIT menu =========== --> - <Menu name="edit" noMerge="1"><text>&Edit</text> - <Action name="edit_undo" /> - <Action name="edit_redo" /> - <Separator/> - <Action name="edit_cut" /> - <Action name="edit_copy" /> - <Action name="edit_paste" /> - <Separator/> - <Action name="edit_find" /> - <Action name="edit_find_next" /> - <Action name="edit_find_prev" /> - </Menu> - - <!-- ============ VIEW menu =========== --> - <Menu name="view" noMerge="1"><text>&View</text> - <Action name="view_redisplay" /> - <Action name="go_home" /> - <Separator/> - <Action name="bigger_font" /> - <Action name="normal_font" /> - <Action name="smaller_font" /> - <Separator/> - <Action name="page_source" /> - </Menu> - - <!-- ============ GO menu =========== --> - <Menu name="go" deleted="true"> - </Menu> - - <!-- ============ HISTORY menu =========== --> - <Action name="history" ><text>Hi&story</text> - </Action> - - <!-- ============ BOOKMARKS menu =========== --> - <Action name="bookmarksActionMenu" ><text>&Bookmarks</text> - </Action> - - <!-- ============ TOOLS menu =========== --> - <Menu name="tools" noMerge="1"><text>&Tools</text> - <Action name="web_inspector" /> - <Action name="private_browsing" /> - <Action name="clear_private_data" /> - <Action name="page_source" /> - <Action name="net_analyzer" /> - <Action name="set_editable" /> - <Separator/> - <Action name="useragent" /> - <Action name="adblock" /> - </Menu> - - <!-- ============ SETTINGS menu =========== --> - <Menu name="settings" noMerge="1"><text>&Settings</text> - <Action name="options_show_menubar" /> - <Merge name="StandardToolBarMenuHandler" /> - <Merge/> - <Separator/> - <Action name="fullscreen" /> - <Separator/> - <Action name="options_configure_keybinding" /> - <Action name="options_configure_toolbars" /> - <Action name="options_configure" /> - </Menu> -</MenuBar> - -<!-- ============ Main ToolBar =========== --> -<ToolBar name="mainToolBar" position="top" iconText="iconOnly" newline="true" noMerge="1"> -<text>Main Toolbar</text> - <Action name="go_back" /> - <Action name="go_forward" /> - <Action name="url_bar" /> - <Action name="load_stop_reload" /> - <Action name="rekonq_tools" /> -</ToolBar> - -<!-- ============ Bookmarks ToolBar =========== --> -<ToolBar noEdit="true" iconText="icontextright" fullWidth="true" name="bookmarkToolBar" iconSize="16" newline="true"> - <text>Bookmark Toolbar</text> -</ToolBar> - -</gui> diff --git a/src/searchenginebar.cpp b/src/searchenginebar.cpp deleted file mode 100644 index 441facf7..00000000 --- a/src/searchenginebar.cpp +++ /dev/null @@ -1,93 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2012 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 "searchenginebar.h" -#include "searchenginebar.moc" - -// Auto Includes -#include "rekonq.h" - -// KDE Includes -#include <KIcon> -#include <KIconLoader> -#include <KAction> -#include <KLocalizedString> - -// Qt Includes -#include <QProcess> - - -SearchEngineBar::SearchEngineBar(QWidget *parent) - : KMessageWidget(parent) -{ - connect(this, SIGNAL(accepted()), this, SLOT(hideAndDelete())); - connect(this, SIGNAL(accepted()), this, SLOT(slotAccepted())); - - connect(this, SIGNAL(rejected()), this, SLOT(hideAndDelete())); - connect(this, SIGNAL(rejected()), this, SLOT(slotRejected())); - - setMessageType(KMessageWidget::Information); - - QSize sz = size(); - sz.setWidth(qobject_cast<QWidget *>(parent)->size().width()); - resize(sz); - - setCloseButtonVisible(false); - - setText(i18n("You don't have a default search engine set. Without it, rekonq will not show proper url suggestions.")); - - KAction *acceptAction = new KAction(i18n("Set it"), this); - connect(acceptAction, SIGNAL(triggered(bool)), this, SIGNAL(accepted())); - addAction(acceptAction); - - KAction *rejectAction = new KAction(i18n("Ignore"), this); - connect(rejectAction, SIGNAL(triggered(bool)), this, SIGNAL(rejected())); - addAction(rejectAction); -} - - -void SearchEngineBar::hideAndDelete() -{ - animatedHide(); - deleteLater(); -} - - -void SearchEngineBar::slotAccepted() -{ - QProcess *proc = new QProcess(parent()); - QStringList args; - args << QL1S("ebrowsing"); - proc->start(QL1S("kcmshell4"), args); -} - - -void SearchEngineBar::slotRejected() -{ - // Remember users choice - ReKonfig::setCheckDefaultSearchEngine(false); -} diff --git a/src/searchenginebar.h b/src/searchenginebar.h deleted file mode 100644 index 7ee1f90c..00000000 --- a/src/searchenginebar.h +++ /dev/null @@ -1,55 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2012 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 SEARCH_ENGINE_BAR_H -#define SEARCH_ENGINE_BAR_H - -// Rekonq Includes -#include "rekonq_defines.h" - -// KDE Includes -#include <KMessageWidget> - - -class REKONQ_TESTS_EXPORT SearchEngineBar : public KMessageWidget -{ - Q_OBJECT - -public: - explicit SearchEngineBar(QWidget *parent); - -private Q_SLOTS: - void hideAndDelete(); - void slotAccepted(); - void slotRejected(); - -Q_SIGNALS: - void accepted(); - void rejected(); -}; - - -#endif // SEARCH_ENGINE_BAR_H diff --git a/src/sessionmanager.cpp b/src/sessionmanager.cpp deleted file mode 100644 index b825ac28..00000000 --- a/src/sessionmanager.cpp +++ /dev/null @@ -1,298 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2009-2012 by Andrea Diamantini <adjam7 at gmail dot com> -* Copyright (C) 2009 by Yoram Bar-Haim <<yoram.b at zend dot com> -* Copyright (C) 2009-2011 by Lionel Chauvin <megabigbug@yahoo.fr> -* -* -* 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 "sessionmanager.h" -#include "sessionmanager.moc" - -// Local Includes -#include "application.h" -#include "historymanager.h" -#include "mainview.h" -#include "mainwindow.h" -#include "webtab.h" - -// KDE Includes -#include <KStandardDirs> - -// Qt Includes -#include <QFile> - - -// Only used internally -bool readSessionDocument(QDomDocument & document, const QString & sessionFilePath) -{ - QFile sessionFile(sessionFilePath); - - if (!sessionFile.exists()) - return false; - - if (!sessionFile.open(QFile::ReadOnly)) - { - kDebug() << "Unable to open session file" << sessionFile.fileName(); - return false; - } - - if (!document.setContent(&sessionFile, false)) - { - kDebug() << "Unable to parse session file" << sessionFile.fileName(); - return false; - } - - return true; -} - - -int loadViewTabs(MainView *mv, QDomElement & window, bool checkViewExists) -{ - int currentTab = 0; - - for (unsigned int tabNo = 0; tabNo < window.elementsByTagName("tab").length(); tabNo++) - { - QDomElement tab = window.elementsByTagName("tab").at(tabNo).toElement(); - if (tab.hasAttribute("currentTab")) - currentTab = tabNo; - - WebView * view = 0; - if (tabNo == 0 && checkViewExists) - view = mv->webTab(0)->view(); - else - view = mv->newWebTab()->view(); - - QDomCDATASection historySection = tab.firstChild().toCDATASection(); - QByteArray history = QByteArray::fromBase64(historySection.data().toAscii()); - - QDataStream readingStream(&history, QIODevice::ReadOnly); - readingStream >> *(view->history()); - - // Get sure about urls and/or pdf are loaded - KUrl u = KUrl(tab.attribute("url")); - view->load(u); - } - - return currentTab; -} - - -// --------------------------------------------------------------------- - - -SessionManager::SessionManager(QObject *parent) - : QObject(parent) - , m_safe(true) - , m_isSessionEnabled(false) -{ - m_sessionFilePath = KStandardDirs::locateLocal("appdata" , "session"); -} - - -void SessionManager::saveSession() -{ - if (!m_isSessionEnabled || !m_safe) - return; - - m_safe = false; - - kDebug() << "SAVING SESSION..."; - - QFile sessionFile(m_sessionFilePath); - if (!sessionFile.open(QFile::WriteOnly | QFile::Truncate)) - { - kDebug() << "Unable to open session file" << sessionFile.fileName(); - return; - } - MainWindowList wl = rApp->mainWindowList(); - QDomDocument document("session"); - QDomElement session = document.createElement("session"); - document.appendChild(session); - - Q_FOREACH(const QWeakPointer<MainWindow> &w, wl) - { - MainView *mv = w.data()->mainView(); - QDomElement window = document.createElement("window"); - int tabInserted = 0; - - window.setAttribute("name", w.data()->objectName()); - - for (signed int tabNo = 0; tabNo < mv->count(); tabNo++) - { - KUrl u = mv->webTab(tabNo)->url(); - - tabInserted++; - QDomElement tab = document.createElement("tab"); - tab.setAttribute("title", mv->webTab(tabNo)->view()->title()); // redundant, but needed for closedSites() - // as there's not way to read out the historyData - tab.setAttribute("url", u.url()); - if (mv->currentIndex() == tabNo) - { - tab.setAttribute("currentTab", 1); - } - QByteArray history; - QDataStream historyStream(&history, QIODevice::ReadWrite); - historyStream << *(mv->webTab(tabNo)->view()->history()); - QDomCDATASection historySection = document.createCDATASection(history.toBase64()); - - tab.appendChild(historySection); - window.appendChild(tab); - } - if (tabInserted > 0) - session.appendChild(window); - } - - QTextStream TextStream(&sessionFile); - document.save(TextStream, 2); - sessionFile.close(); - - m_safe = true; - return; -} - - -bool SessionManager::restoreSessionFromScratch() -{ - QDomDocument document("session"); - - if (!readSessionDocument(document, m_sessionFilePath)) - return false; - - for (unsigned int winNo = 0; winNo < document.elementsByTagName("window").length(); winNo++) - { - QDomElement window = document.elementsByTagName("window").at(winNo).toElement(); - - MainView *mv = rApp->newMainWindow(false)->mainView(); - - int currentTab = loadViewTabs(mv, window, false); - - mv->setCurrentIndex(currentTab); - } - - return true; -} - - -void SessionManager::restoreCrashedSession() -{ - QDomDocument document("session"); - - if (!readSessionDocument(document, m_sessionFilePath)) - return; - - for (unsigned int winNo = 0; winNo < document.elementsByTagName("window").length(); winNo++) - { - QDomElement window = document.elementsByTagName("window").at(winNo).toElement(); - - MainView *mv = (winNo == 0) ? rApp->mainWindow()->mainView() : rApp->newMainWindow()->mainView(); - - bool useCurrentTab = (!mv->currentWebTab()->url().isValid() || (mv->currentWebTab()->url().protocol() == QL1S("about"))); - int currentTab = loadViewTabs(mv, window, useCurrentTab); - - mv->setCurrentIndex(currentTab); - } - - setSessionManagementEnabled(true); -} - - -int SessionManager::restoreSavedSession() -{ - QDomDocument document("session"); - - if (!readSessionDocument(document, m_sessionFilePath)) - return 0; - - unsigned int winNo; - - for (winNo = 0; winNo < document.elementsByTagName("window").length(); winNo++) - { - QDomElement window = document.elementsByTagName("window").at(winNo).toElement(); - - MainView *mv = rApp->newMainWindow()->mainView(); - - int currentTab = loadViewTabs(mv, window, true); - - mv->setCurrentIndex(currentTab); - } - - return winNo; -} - - -bool SessionManager::restoreMainWindow(MainWindow* window) -{ - QDomDocument document("session"); - - if (!readSessionDocument(document, m_sessionFilePath)) - return false; - - unsigned int winNo; - - for (winNo = 0; winNo < document.elementsByTagName("window").length(); winNo++) - { - QDomElement savedWindowElement = document.elementsByTagName("window").at(winNo).toElement(); - - if (window->objectName() != savedWindowElement.attribute("name", "")) - continue; - - MainView *mv = window->mainView(); - - int currentTab = loadViewTabs(mv, savedWindowElement, false); - - mv->setCurrentIndex(currentTab); - - return true; - } - - return false; -} - - -QList<TabHistory> SessionManager::closedSites() -{ - QList<TabHistory> list; - QDomDocument document("session"); - - if (!readSessionDocument(document, m_sessionFilePath)) - return list; - - for (unsigned int tabNo = 0; tabNo < document.elementsByTagName("tab").length(); tabNo++) - { - QDomElement tab = document.elementsByTagName("tab").at(tabNo).toElement(); - - TabHistory tabHistory; - - tabHistory.title = tab.attribute("title"); - tabHistory.url = tab.attribute("url"); - - QDomCDATASection historySection = tab.firstChild().toCDATASection(); - tabHistory.history = QByteArray::fromBase64(historySection.data().toAscii()); - - list << tabHistory; - } - - return list; -} diff --git a/src/sessionmanager.h b/src/sessionmanager.h deleted file mode 100644 index 810d9b5c..00000000 --- a/src/sessionmanager.h +++ /dev/null @@ -1,87 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2009-2012 by Andrea Diamantini <adjam7 at gmail dot com> -* Copyright (C) 2009 by Yoram Bar-Haim <<yoram.b at zend dot com> -* Copyright (C) 2009-2011 by Lionel Chauvin <megabigbug@yahoo.fr> -* -* -* 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 SESSION_MANAGER_H -#define SESSION_MANAGER_H - - -// Rekonq Includes -#include "rekonq_defines.h" - -// Qt Includes -#include <QObject> -#include <QString> - -// Forward Declarations -class TabHistory; -class MainWindow; - -/** - * Session Management: Needs clean up :) - */ -class REKONQ_TESTS_EXPORT SessionManager : public QObject -{ - Q_OBJECT -public: - SessionManager(QObject *parent = 0); - - inline void setSessionManagementEnabled(bool on) - { - m_isSessionEnabled = on; - } - - QList<TabHistory> closedSites(); - - // This method restores session - // while turning back from Private mode - int restoreSavedSession(); - - // This method restores a single MainWindow - bool restoreMainWindow(MainWindow * window); - -public Q_SLOTS: - // This method restores session - // on restart when restore at startup is chosen - bool restoreSessionFromScratch(); - -private Q_SLOTS: - void saveSession(); - - // This method restores session - // after a crash - void restoreCrashedSession(); - -private: - QString m_sessionFilePath; - - bool m_safe; - bool m_isSessionEnabled; -}; - - -#endif // SESSION_MANAGER_H diff --git a/src/settings/advancedwidget.cpp b/src/settings/advancedwidget.cpp deleted file mode 100644 index 73c889dc..00000000 --- a/src/settings/advancedwidget.cpp +++ /dev/null @@ -1,70 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2012 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/>. -* -* ============================================================ */ - - -// Local Includes -#include "advancedwidget.h" -#include "advancedwidget.moc" - -// Qt Includes -#include <QProcess> - - -AdvancedWidget::AdvancedWidget(QWidget *parent) - : QWidget(parent) - , _changed(false) -{ - setupUi(this); - - connect(proxyButton, SIGNAL(clicked()), this, SLOT(launchProxySettings())); -} - - -void AdvancedWidget::save() -{ -} - - -bool AdvancedWidget::changed() -{ - return _changed; -} - - -void AdvancedWidget::hasChanged() -{ - _changed = true; - emit changed(true); -} - - -void AdvancedWidget::launchProxySettings() -{ - QString program = QL1S("kcmshell4"); - QStringList arguments; - arguments << QL1S("proxy"); - QProcess *proc = new QProcess(this); - proc->start(program, arguments); -} diff --git a/src/settings/advancedwidget.h b/src/settings/advancedwidget.h deleted file mode 100644 index c9509c9d..00000000 --- a/src/settings/advancedwidget.h +++ /dev/null @@ -1,62 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2012 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 ADVANCED_WIDGET_H -#define ADVANCED_WIDGET_H - - -// Rekonq Includes -#include "rekonq_defines.h" - -// Ui Includes -#include "ui_settings_advanced.h" - -// Qt Includes -#include <QWidget> - - -class AdvancedWidget : public QWidget, private Ui::advanced -{ - Q_OBJECT - -public: - AdvancedWidget(QWidget *parent = 0); - - void save(); - bool changed(); - -Q_SIGNALS: - void changed(bool); - -private Q_SLOTS: - void hasChanged(); - void launchProxySettings(); - -private: - bool _changed; -}; - -#endif // ADVANCED_WIDGET_H diff --git a/src/settings/appearancewidget.cpp b/src/settings/appearancewidget.cpp deleted file mode 100644 index 42c9db14..00000000 --- a/src/settings/appearancewidget.cpp +++ /dev/null @@ -1,119 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2010-2011 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 "appearancewidget.h" -#include "appearancewidget.moc" - -// Auto Includes -#include "rekonq.h" - -// KDE Includes -#include <KGlobal> -#include <KCharsets> - -AppearanceWidget::AppearanceWidget(QWidget *parent) - : QWidget(parent) - , _changed(false) -{ - setupUi(this); - - fixedFontChooser->setOnlyFixed(true); - - standardFontChooser->setCurrentFont(QFont(ReKonfig::standardFontFamily())); - fixedFontChooser->setCurrentFont(QFont(ReKonfig::fixedFontFamily())); - serifFontChooser->setCurrentFont(QFont(ReKonfig::serifFontFamily())); - sansSerifFontChooser->setCurrentFont(QFont(ReKonfig::sansSerifFontFamily())); - cursiveFontChooser->setCurrentFont(QFont(ReKonfig::cursiveFontFamily())); - fantasyFontChooser->setCurrentFont(QFont(ReKonfig::fantasyFontFamily())); - - connect(standardFontChooser, SIGNAL(currentFontChanged(QFont)), this, SLOT(hasChanged())); - connect(fixedFontChooser, SIGNAL(currentFontChanged(QFont)), this, SLOT(hasChanged())); - connect(serifFontChooser, SIGNAL(currentFontChanged(QFont)), this, SLOT(hasChanged())); - connect(sansSerifFontChooser, SIGNAL(currentFontChanged(QFont)), this, SLOT(hasChanged())); - connect(cursiveFontChooser, SIGNAL(currentFontChanged(QFont)), this, SLOT(hasChanged())); - connect(fantasyFontChooser, SIGNAL(currentFontChanged(QFont)), this, SLOT(hasChanged())); - - populateEncodingMenu(); -} - - -void AppearanceWidget::save() -{ - ReKonfig::setStandardFontFamily(standardFontChooser->currentFont().family()); - ReKonfig::setFixedFontFamily(fixedFontChooser->currentFont().family()); - ReKonfig::setSerifFontFamily(serifFontChooser->currentFont().family()); - ReKonfig::setSansSerifFontFamily(sansSerifFontChooser->currentFont().family()); - ReKonfig::setCursiveFontFamily(cursiveFontChooser->currentFont().family()); - ReKonfig::setFantasyFontFamily(fantasyFontChooser->currentFont().family()); -} - - -bool AppearanceWidget::changed() -{ - return _changed; -} - - -void AppearanceWidget::hasChanged() -{ - _changed = true; - emit changed(true); -} - - -bool AppearanceWidget::isDefault() -{ - bool def = true; - - // TODO: implement me!! - - return def; -} - - -void AppearanceWidget::populateEncodingMenu() -{ - encodingCombo->setEditable(false); - QStringList encodings = KGlobal::charsets()->availableEncodingNames(); - encodingCombo->addItems(encodings); - - encodingCombo->setWhatsThis(i18n("Select the default encoding to be used; normally, you will be fine with 'Use language encoding' " - "and should not have to change this.")); - - connect(encodingCombo, SIGNAL(activated(QString)), this, SLOT(setEncoding(QString))); - connect(encodingCombo, SIGNAL(activated(QString)), this, SLOT(hasChanged())); - - QString enc = ReKonfig::defaultEncoding(); - int indexOfEnc = encodings.indexOf(enc); - encodingCombo->setCurrentIndex(indexOfEnc); -} - - -void AppearanceWidget::setEncoding(const QString &enc) -{ - ReKonfig::setDefaultEncoding(enc); -} diff --git a/src/settings/appearancewidget.h b/src/settings/appearancewidget.h deleted file mode 100644 index 86f6d66a..00000000 --- a/src/settings/appearancewidget.h +++ /dev/null @@ -1,65 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2010-2011 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 APPEARANCE_WIDGET_H -#define APPEARANCE_WIDGET_H - - -// Rekonq Includes -#include "rekonq_defines.h" - -// Ui Includes -#include "ui_settings_appearance.h" - -// Qt Includes -#include <QtGui/QWidget> - - -class AppearanceWidget : public QWidget, private Ui::appearance -{ - Q_OBJECT - -public: - AppearanceWidget(QWidget *parent = 0); - - void save(); - bool changed(); - bool isDefault(); - -Q_SIGNALS: - void changed(bool); - -private Q_SLOTS: - void hasChanged(); - void setEncoding(const QString &); - -private: - void populateEncodingMenu(); - - bool _changed; -}; - -#endif // APPEARANCE_WIDGET_H diff --git a/src/settings/generalwidget.cpp b/src/settings/generalwidget.cpp deleted file mode 100644 index 439aa5f3..00000000 --- a/src/settings/generalwidget.cpp +++ /dev/null @@ -1,130 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2010-2012 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 "generalwidget.h" -#include "generalwidget.moc" - -// Auto Includes -#include "rekonq.h" - -// Local Includes -#include "application.h" -#include "mainwindow.h" -#include "webtab.h" - -//KDE Includes -#include <kstandarddirs.h> -#include <KUrlRequester> - - -GeneralWidget::GeneralWidget(QWidget *parent) - : QWidget(parent) - , _changed(false) -{ - setupUi(this); - - connect(setHomeToCurrentPageButton, SIGNAL(clicked()), this, SLOT(setHomeToCurrentPage())); - - disableHomeSettings(ReKonfig::useNewTabPage()); - - connect(kcfg_useNewTabPage, SIGNAL(toggled(bool)), this, SLOT(disableHomeSettings(bool))); - - checkKGetPresence(); - - connect(kcfg_homePage, SIGNAL(editingFinished()), this, SLOT(fixHomePageURL())); - - kcfg_downloadPath->setMode(KFile::Directory); - - askDownloadYes->setChecked(ReKonfig::askDownloadPath()); - askDownloadNo->setChecked(!ReKonfig::askDownloadPath()); - - kcfg_downloadPath->setEnabled(!ReKonfig::askDownloadPath()); - connect(askDownloadNo, SIGNAL(toggled(bool)), kcfg_downloadPath, SLOT(setEnabled(bool))); - connect(askDownloadNo, SIGNAL(toggled(bool)), this, SLOT(hasChanged())); -} - - -void GeneralWidget::save() -{ - ReKonfig::setAskDownloadPath(askDownloadYes->isChecked()); - - _changed = false; -} - - -bool GeneralWidget::changed() -{ - return _changed; -} - - -void GeneralWidget::hasChanged() -{ - _changed = true; - emit changed(true); -} - - -void GeneralWidget::setHomeToCurrentPage() -{ - MainWindow *mw = rApp->mainWindow(); - WebTab *webTab = mw->currentTab(); - if (webTab) - { - kcfg_homePage->setText(webTab->url().prettyUrl()); - } -} - - -void GeneralWidget::disableHomeSettings(bool b) -{ - kcfg_homePage->setEnabled(!b); - setHomeToCurrentPageButton->setEnabled(!b); -} - - -void GeneralWidget::checkKGetPresence() -{ - if (KStandardDirs::findExe("kget").isNull()) - { - kcfg_kgetDownload->setDisabled(true); - kcfg_kgetList->setDisabled(true); - kcfg_kgetDownload->setToolTip(i18n("Install KGet to enable rekonq to use it as download manager")); - } - else - { - kcfg_kgetDownload->setDisabled(false); - kcfg_kgetList->setDisabled(false); - } -} - - -void GeneralWidget::fixHomePageURL() -{ - QString fixedURL = QUrl::fromUserInput(kcfg_homePage->text()).toString(); - kcfg_homePage->setText(fixedURL); -} diff --git a/src/settings/generalwidget.h b/src/settings/generalwidget.h deleted file mode 100644 index 3170f7b2..00000000 --- a/src/settings/generalwidget.h +++ /dev/null @@ -1,62 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2010-2012 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 GENERAL_WIDGET_H -#define GENERAL_WIDGET_H - - -// Ui Includes -#include "ui_settings_general.h" - -// Qt Includes -#include <QtGui/QWidget> - - -class GeneralWidget : public QWidget, private Ui::general -{ - Q_OBJECT - -public: - GeneralWidget(QWidget *parent = 0); - - void save(); - bool changed(); - void checkKGetPresence(); - -Q_SIGNALS: - void changed(bool); - -private Q_SLOTS: - void hasChanged(); - void setHomeToCurrentPage(); - void disableHomeSettings(bool); - void fixHomePageURL(); - -private: - bool _changed; -}; - -#endif // GENERAL_WIDGET_H diff --git a/src/settings/networkwidget.cpp b/src/settings/networkwidget.cpp deleted file mode 100644 index c2988eb1..00000000 --- a/src/settings/networkwidget.cpp +++ /dev/null @@ -1,100 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2010-2011 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 "networkwidget.h" -#include "networkwidget.moc" - -// KDE Includes -#include <KTabWidget> -#include <KCModuleInfo> - -// Qt Includes -#include <QVBoxLayout> - - -NetworkWidget::NetworkWidget(QWidget *parent) - : QWidget(parent) - , _cacheModule(0) - , _cookiesModule(0) - , _proxyModule(0) - , _changed(false) -{ - QVBoxLayout *l = new QVBoxLayout(this); - l->setMargin(0); - l->setSpacing(0); - - KTabWidget *tabWidget = new KTabWidget(this); - l->addWidget(tabWidget); - - KCModuleInfo cacheInfo("cache.desktop"); - _cacheModule = new KCModuleProxy(cacheInfo, parent); - tabWidget->addTab(_cacheModule, i18n(cacheInfo.moduleName().toUtf8())); - - KCModuleInfo cookiesInfo("cookies.desktop"); - _cookiesModule = new KCModuleProxy(cookiesInfo, parent); - tabWidget->addTab(_cookiesModule, i18n(cookiesInfo.moduleName().toUtf8())); - - KCModuleInfo proxyInfo("proxy.desktop"); - _proxyModule = new KCModuleProxy(proxyInfo, parent); - tabWidget->addTab(_proxyModule, i18n(proxyInfo.moduleName().toUtf8())); - - connect(_cacheModule, SIGNAL(changed(bool)), this, SLOT(hasChanged())); - connect(_cookiesModule, SIGNAL(changed(bool)), this, SLOT(hasChanged())); - connect(_proxyModule, SIGNAL(changed(bool)), this, SLOT(hasChanged())); -} - - -NetworkWidget::~NetworkWidget() -{ - delete _cacheModule; - delete _cookiesModule; - delete _proxyModule; -} - - -void NetworkWidget::save() -{ - _cookiesModule->save(); - _proxyModule->save(); - _cacheModule->save(); - - _changed = false; - emit changed(false); -} - - -void NetworkWidget::hasChanged() -{ - _changed = true; - emit changed(true); -} - - -bool NetworkWidget::changed() -{ - return _changed; -} diff --git a/src/settings/networkwidget.h b/src/settings/networkwidget.h deleted file mode 100644 index 74a0e312..00000000 --- a/src/settings/networkwidget.h +++ /dev/null @@ -1,63 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2010-2011 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 NETWORK_WIDGET_H -#define NETWORK_WIDGET_H - - -// KDE Includes -#include <KCModuleProxy> - -// Qt Includes -#include <QWidget> - - -class NetworkWidget : public QWidget -{ - Q_OBJECT - -public: - NetworkWidget(QWidget *parent = 0); - ~NetworkWidget(); - - void save(); - bool changed(); - -Q_SIGNALS: - void changed(bool); - -private Q_SLOTS: - void hasChanged(); - -private: - KCModuleProxy *_cacheModule; - KCModuleProxy *_cookiesModule; - KCModuleProxy *_proxyModule; - - bool _changed; -}; - -#endif // NETWORK_WIDGET_H diff --git a/src/settings/passexceptionswidget.cpp b/src/settings/passexceptionswidget.cpp deleted file mode 100644 index fe20e711..00000000 --- a/src/settings/passexceptionswidget.cpp +++ /dev/null @@ -1,73 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2012 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 "passexceptionswidget.h" -#include "passexceptionswidget.moc" - -// Auto Includes -#include "rekonq.h" - - -PassExWidget::PassExWidget(QWidget *parent) - : QWidget(parent) -{ - setupUi(this); - - setAttribute(Qt::WA_DeleteOnClose, true); - - connect(removeOneButton, SIGNAL(clicked()), this, SLOT(removeOne())); - connect(removeAllButton, SIGNAL(clicked()), this, SLOT(removeAll())); - - QStringList exList = ReKonfig::walletBlackList(); - Q_FOREACH(const QString & str, exList) - { - QListWidgetItem *item = new QListWidgetItem(str, listWidget); - listWidget->addItem(item); - } -} - - -void PassExWidget::removeOne() -{ - const int currentRow(listWidget->currentRow()); - if (currentRow == -1) - return; - QString item = listWidget->takeItem(currentRow)->text(); - - QStringList exList = ReKonfig::walletBlackList(); - exList.removeOne(item); - ReKonfig::setWalletBlackList(exList); -} - - -void PassExWidget::removeAll() -{ - listWidget->clear(); - - QStringList clearList; - ReKonfig::setWalletBlackList(clearList); -} diff --git a/src/settings/passexceptionswidget.h b/src/settings/passexceptionswidget.h deleted file mode 100644 index 6b02c4e6..00000000 --- a/src/settings/passexceptionswidget.h +++ /dev/null @@ -1,53 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2012 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 PASS_EX_WIDGET_H -#define PASS_EX_WIDGET_H - - -// Rekonq Includes -#include "rekonq_defines.h" - -// Ui Includes -#include "ui_password_exceptions.h" - -// Qt Includes -#include <QWidget> - - -class PassExWidget : public QWidget, private Ui::PassExceptions -{ - Q_OBJECT - -public: - PassExWidget(QWidget *parent = 0); - -private Q_SLOTS: - void removeOne(); - void removeAll(); -}; - -#endif // PASS_EX_WIDGET_H diff --git a/src/settings/password_exceptions.ui b/src/settings/password_exceptions.ui deleted file mode 100644 index 97cf621b..00000000 --- a/src/settings/password_exceptions.ui +++ /dev/null @@ -1,55 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<ui version="4.0"> - <class>PassExceptions</class> - <widget class="QWidget" name="PassExceptions"> - <property name="geometry"> - <rect> - <x>0</x> - <y>0</y> - <width>400</width> - <height>300</height> - </rect> - </property> - <property name="windowTitle"> - <string>Password Exceptions</string> - </property> - <layout class="QVBoxLayout" name="verticalLayout"> - <item> - <widget class="QListWidget" name="listWidget"/> - </item> - <item> - <layout class="QHBoxLayout" name="horizontalLayout"> - <item> - <spacer name="horizontalSpacer"> - <property name="orientation"> - <enum>Qt::Horizontal</enum> - </property> - <property name="sizeHint" stdset="0"> - <size> - <width>40</width> - <height>20</height> - </size> - </property> - </spacer> - </item> - <item> - <widget class="QPushButton" name="removeOneButton"> - <property name="text"> - <string>Remove one</string> - </property> - </widget> - </item> - <item> - <widget class="QPushButton" name="removeAllButton"> - <property name="text"> - <string>Remove all</string> - </property> - </widget> - </item> - </layout> - </item> - </layout> - </widget> - <resources/> - <connections/> -</ui> diff --git a/src/settings/privacywidget.cpp b/src/settings/privacywidget.cpp deleted file mode 100644 index 46774a63..00000000 --- a/src/settings/privacywidget.cpp +++ /dev/null @@ -1,135 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2012 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 "privacywidget.h" -#include "privacywidget.moc" - -// Local Includes -#include "passexceptionswidget.h" - -// Auto Includes -#include "rekonq.h" - -// KDE Includes -#include <KDialog> -#include <KPushButton> - -// Qt Includes -#include <QProcess> - - -PrivacyWidget::PrivacyWidget(QWidget *parent) - : QWidget(parent) - , _changed(false) -{ - setupUi(this); - - reload(); - - // DO NOT TRACK - KConfigGroup cg = KConfigGroup(KSharedConfig::openConfig("kioslaverc", KConfig::NoGlobals), QString()); - doNotTrackCheckBox->setChecked(cg.readEntry("DoNotTrack", false)); - connect(doNotTrackCheckBox, SIGNAL(clicked()), this, SLOT(hasChanged())); - - // CACHE & COOKIES - connect(cacheButton, SIGNAL(clicked()), this, SLOT(launchCacheSettings())); - connect(cookiesButton, SIGNAL(clicked()), this, SLOT(launchCookieSettings())); - - // PASSWORDS - connect(managePassExceptionsButton, SIGNAL(clicked()), this, SLOT(showPassExceptions())); -} - - -void PrivacyWidget::save() -{ - KConfigGroup cg = KConfigGroup(KSharedConfig::openConfig("kioslaverc", KConfig::NoGlobals), QString()); - cg.writeEntry("DoNotTrack", doNotTrackCheckBox->isChecked()); - cg.sync(); - - reload(); -} - - -void PrivacyWidget::reload() -{ - bool b = ReKonfig::javascriptEnabled(); - - kcfg_javascriptCanAccessClipboard->setEnabled(b); - kcfg_javascriptCanOpenWindows->setEnabled(b); - - if (b) - { - kcfg_javascriptCanOpenWindows->setToolTip(i18n("If enabled, JavaScript programs are allowed to open new windows.")); - kcfg_javascriptCanAccessClipboard->setToolTip(i18n("If enabled, JavaScript programs are allowed to read from and to write to the clipboard.")); - } - else - { - QString str = i18n("Javascript is NOT enabled, cannot change these settings"); - kcfg_javascriptCanOpenWindows->setToolTip(str); - kcfg_javascriptCanAccessClipboard->setToolTip(str); - } -} - - -bool PrivacyWidget::changed() -{ - return _changed; -} - - -void PrivacyWidget::hasChanged() -{ - _changed = true; - emit changed(true); -} - - -void PrivacyWidget::launchCacheSettings() -{ - QString program = QL1S("kcmshell4"); - QStringList arguments; - arguments << QL1S("cache"); - QProcess *proc = new QProcess(this); - proc->start(program, arguments); -} - - -void PrivacyWidget::launchCookieSettings() -{ - QString program = QL1S("kcmshell4"); - QStringList arguments; - arguments << QL1S("cookies"); - QProcess *proc = new QProcess(this); - proc->start(program, arguments); -} - - -void PrivacyWidget::showPassExceptions() -{ - PassExWidget *widg = new PassExWidget; - widg->show(); -} diff --git a/src/settings/privacywidget.h b/src/settings/privacywidget.h deleted file mode 100644 index 229cb7df..00000000 --- a/src/settings/privacywidget.h +++ /dev/null @@ -1,67 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2012 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 PRIVACY_WIDGET_H -#define PRIVACY_WIDGET_H - - -// Rekonq Includes -#include "rekonq_defines.h" - -// Ui Includes -#include "ui_settings_privacy.h" - -// Qt Includes -#include <QWidget> - - -class PrivacyWidget : public QWidget, private Ui::privacy -{ - Q_OBJECT - -public: - PrivacyWidget(QWidget *parent = 0); - - void save(); - void reload(); - - bool changed(); - -Q_SIGNALS: - void changed(bool); - -private Q_SLOTS: - void hasChanged(); - - void launchCacheSettings(); - void launchCookieSettings(); - void showPassExceptions(); - -private: - bool _changed; -}; - -#endif // PRIVACY_WIDGET_H diff --git a/src/settings/settings_advanced.ui b/src/settings/settings_advanced.ui deleted file mode 100644 index 03891e2c..00000000 --- a/src/settings/settings_advanced.ui +++ /dev/null @@ -1,172 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<ui version="4.0"> - <class>advanced</class> - <widget class="QWidget" name="advanced"> - <property name="geometry"> - <rect> - <x>0</x> - <y>0</y> - <width>555</width> - <height>440</height> - </rect> - </property> - <layout class="QVBoxLayout" name="verticalLayout_3"> - <item> - <widget class="QGroupBox" name="groupBox_2"> - <property name="title"> - <string>Proxy</string> - </property> - <layout class="QHBoxLayout" name="horizontalLayout"> - <item> - <widget class="QLabel" name="label"> - <property name="text"> - <string>Rekonq is using your system's proxy settings</string> - </property> - </widget> - </item> - <item> - <spacer name="horizontalSpacer"> - <property name="orientation"> - <enum>Qt::Horizontal</enum> - </property> - <property name="sizeHint" stdset="0"> - <size> - <width>60</width> - <height>20</height> - </size> - </property> - </spacer> - </item> - <item> - <widget class="QPushButton" name="proxyButton"> - <property name="text"> - <string>Change them!</string> - </property> - <property name="icon"> - <iconset theme="preferences-system-network"> - <normaloff/> - </iconset> - </property> - </widget> - </item> - </layout> - </widget> - </item> - <item> - <widget class="QGroupBox" name="groupBox"> - <property name="title"> - <string>Misc</string> - </property> - <layout class="QVBoxLayout" name="verticalLayout"> - <item> - <widget class="QCheckBox" name="kcfg_hScrollWheelHistory"> - <property name="text"> - <string>Use horizontal scroll wheel to go through web history</string> - </property> - </widget> - </item> - <item> - <widget class="QCheckBox" name="kcfg_useFavicon"> - <property name="text"> - <string>Use favicon of the current website as window icon</string> - </property> - </widget> - </item> - <item> - <widget class="QCheckBox" name="kcfg_smoothScrolling"> - <property name="toolTip"> - <string>Scroll pages with an eye candy effect</string> - </property> - <property name="text"> - <string>Enable smooth scrolling</string> - </property> - <property name="checked"> - <bool>true</bool> - </property> - </widget> - </item> - <item> - <widget class="QCheckBox" name="kcfg_enableViShortcuts"> - <property name="text"> - <string>Enable Vi-like navigation shortcuts</string> - </property> - </widget> - </item> - <item> - <widget class="QCheckBox" name="kcfg_accessKeysEnabled"> - <property name="text"> - <string>Enable keyboard navigation using the Ctrl key</string> - </property> - </widget> - </item> - <item> - <layout class="QHBoxLayout" name="horizontalLayout_3"> - <item> - <widget class="QLabel" name="label_11"> - <property name="text"> - <string>Middle click should:</string> - </property> - <property name="alignment"> - <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set> - </property> - </widget> - </item> - <item> - <widget class="QComboBox" name="kcfg_middleClickAction"> - <item> - <property name="text"> - <string>Auto-scroll</string> - </property> - </item> - <item> - <property name="text"> - <string>Load Clipboard URL</string> - </property> - </item> - <item> - <property name="text"> - <string>Do Nothing</string> - </property> - </item> - </widget> - </item> - </layout> - </item> - <item> - <widget class="QCheckBox" name="kcfg_automaticSpellChecking"> - <property name="text"> - <string>Automatic Spell Check</string> - </property> - </widget> - </item> - </layout> - </widget> - </item> - <item> - <spacer name="verticalSpacer"> - <property name="orientation"> - <enum>Qt::Vertical</enum> - </property> - <property name="sizeHint" stdset="0"> - <size> - <width>20</width> - <height>155</height> - </size> - </property> - </spacer> - </item> - </layout> - </widget> - <tabstops> - <tabstop>proxyButton</tabstop> - <tabstop>kcfg_hScrollWheelHistory</tabstop> - <tabstop>kcfg_useFavicon</tabstop> - <tabstop>kcfg_smoothScrolling</tabstop> - <tabstop>kcfg_enableViShortcuts</tabstop> - <tabstop>kcfg_accessKeysEnabled</tabstop> - <tabstop>kcfg_middleClickAction</tabstop> - <tabstop>kcfg_automaticSpellChecking</tabstop> - </tabstops> - <resources/> - <connections/> -</ui> diff --git a/src/settings/settings_appearance.ui b/src/settings/settings_appearance.ui deleted file mode 100644 index b0232089..00000000 --- a/src/settings/settings_appearance.ui +++ /dev/null @@ -1,284 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<ui version="4.0"> - <class>appearance</class> - <widget class="QWidget" name="appearance"> - <property name="geometry"> - <rect> - <x>0</x> - <y>0</y> - <width>570</width> - <height>562</height> - </rect> - </property> - <property name="windowTitle"> - <string>Appearance</string> - </property> - <layout class="QVBoxLayout" name="verticalLayout"> - <item> - <widget class="QGroupBox" name="groupBox"> - <property name="title"> - <string>Fonts</string> - </property> - <layout class="QVBoxLayout" name="verticalLayout_2"> - <item> - <layout class="QGridLayout" name="gridLayout"> - <item row="0" column="0"> - <widget class="QLabel" name="label"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Maximum" vsizetype="Preferred"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="minimumSize"> - <size> - <width>150</width> - <height>0</height> - </size> - </property> - <property name="text"> - <string>Standard font:</string> - </property> - <property name="alignment"> - <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> - </property> - </widget> - </item> - <item row="1" column="0"> - <widget class="QLabel" name="label_2"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Maximum" vsizetype="Preferred"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="minimumSize"> - <size> - <width>150</width> - <height>0</height> - </size> - </property> - <property name="text"> - <string>Fixed font:</string> - </property> - <property name="alignment"> - <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> - </property> - </widget> - </item> - <item row="2" column="0"> - <widget class="QLabel" name="label_3"> - <property name="text"> - <string>Serif font:</string> - </property> - <property name="alignment"> - <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> - </property> - </widget> - </item> - <item row="0" column="1"> - <widget class="KFontComboBox" name="standardFontChooser"/> - </item> - <item row="3" column="0"> - <widget class="QLabel" name="label_6"> - <property name="text"> - <string>Sans Serif font:</string> - </property> - <property name="alignment"> - <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> - </property> - </widget> - </item> - <item row="1" column="1"> - <widget class="KFontComboBox" name="fixedFontChooser"/> - </item> - <item row="2" column="1"> - <widget class="KFontComboBox" name="serifFontChooser"/> - </item> - <item row="3" column="1"> - <widget class="KFontComboBox" name="sansSerifFontChooser"/> - </item> - <item row="4" column="0"> - <widget class="QLabel" name="label_7"> - <property name="text"> - <string>Cursive font:</string> - </property> - <property name="alignment"> - <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> - </property> - </widget> - </item> - <item row="4" column="1"> - <widget class="KFontComboBox" name="cursiveFontChooser"/> - </item> - <item row="5" column="0"> - <widget class="QLabel" name="label_8"> - <property name="text"> - <string>Fantasy font:</string> - </property> - <property name="alignment"> - <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> - </property> - </widget> - </item> - <item row="5" column="1"> - <widget class="KFontComboBox" name="fantasyFontChooser"/> - </item> - </layout> - </item> - </layout> - </widget> - </item> - <item> - <widget class="QGroupBox" name="groupBox_2"> - <property name="title"> - <string>Font size</string> - </property> - <layout class="QGridLayout" name="gridLayout_2"> - <item row="0" column="0"> - <widget class="QLabel" name="label_9"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="minimumSize"> - <size> - <width>150</width> - <height>0</height> - </size> - </property> - <property name="text"> - <string>Default font size:</string> - </property> - <property name="alignment"> - <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> - </property> - </widget> - </item> - <item row="0" column="1"> - <widget class="KIntNumInput" name="kcfg_defaultFontSize"/> - </item> - <item row="1" column="0"> - <widget class="QLabel" name="label_4"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="minimumSize"> - <size> - <width>150</width> - <height>0</height> - </size> - </property> - <property name="text"> - <string>Minimal font size:</string> - </property> - <property name="alignment"> - <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> - </property> - </widget> - </item> - <item row="1" column="1"> - <widget class="KIntNumInput" name="kcfg_minFontSize"/> - </item> - </layout> - </widget> - </item> - <item> - <widget class="QGroupBox" name="groupBox_4"> - <property name="title"> - <string>Character Encoding</string> - </property> - <layout class="QHBoxLayout" name="horizontalLayout_2"> - <item> - <widget class="QLabel" name="label_10"> - <property name="text"> - <string>Default character encoding:</string> - </property> - </widget> - </item> - <item> - <widget class="KComboBox" name="encodingCombo"/> - </item> - </layout> - </widget> - </item> - <item> - <widget class="QGroupBox" name="groupBox_3"> - <property name="title"> - <string>Custom Style Sheet</string> - </property> - <layout class="QFormLayout" name="formLayout_3"> - <property name="fieldGrowthPolicy"> - <enum>QFormLayout::ExpandingFieldsGrow</enum> - </property> - <item row="0" column="0"> - <widget class="QLabel" name="label_5"> - <property name="minimumSize"> - <size> - <width>150</width> - <height>0</height> - </size> - </property> - <property name="text"> - <string>Path to custom CSS file:</string> - </property> - <property name="alignment"> - <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> - </property> - </widget> - </item> - <item row="0" column="1"> - <widget class="KUrlRequester" name="kcfg_userCSS"> - <property name="filter"> - <string>*.css</string> - </property> - </widget> - </item> - </layout> - </widget> - </item> - <item> - <spacer name="verticalSpacer_3"> - <property name="orientation"> - <enum>Qt::Vertical</enum> - </property> - <property name="sizeHint" stdset="0"> - <size> - <width>20</width> - <height>149</height> - </size> - </property> - </spacer> - </item> - </layout> - </widget> - <customwidgets> - <customwidget> - <class>KFontComboBox</class> - <extends>KComboBox</extends> - <header>kfontcombobox.h</header> - </customwidget> - <customwidget> - <class>KComboBox</class> - <extends>QComboBox</extends> - <header>kcombobox.h</header> - </customwidget> - <customwidget> - <class>KUrlRequester</class> - <extends>QFrame</extends> - <header>kurlrequester.h</header> - </customwidget> - <customwidget> - <class>KIntNumInput</class> - <extends>QWidget</extends> - <header>knuminput.h</header> - </customwidget> - </customwidgets> - <resources/> - <connections/> -</ui> diff --git a/src/settings/settings_general.ui b/src/settings/settings_general.ui deleted file mode 100644 index 7d4419b8..00000000 --- a/src/settings/settings_general.ui +++ /dev/null @@ -1,267 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<ui version="4.0"> - <class>general</class> - <widget class="QWidget" name="general"> - <property name="geometry"> - <rect> - <x>0</x> - <y>0</y> - <width>573</width> - <height>410</height> - </rect> - </property> - <property name="windowTitle"> - <string>General</string> - </property> - <layout class="QVBoxLayout" name="verticalLayout"> - <item> - <widget class="QGroupBox" name="groupBox_2"> - <property name="title"> - <string>Startup</string> - </property> - <layout class="QHBoxLayout" name="horizontalLayout_2"> - <item> - <widget class="QLabel" name="label"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Fixed" vsizetype="Preferred"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="minimumSize"> - <size> - <width>150</width> - <height>0</height> - </size> - </property> - <property name="layoutDirection"> - <enum>Qt::LeftToRight</enum> - </property> - <property name="text"> - <string>When starting rekonq:</string> - </property> - <property name="alignment"> - <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> - </property> - </widget> - </item> - <item> - <widget class="KComboBox" name="kcfg_startupBehaviour"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Expanding" vsizetype="Fixed"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <item> - <property name="text"> - <string>Open the Home Page</string> - </property> - </item> - <item> - <property name="text"> - <string>Open the New Tab Page</string> - </property> - </item> - <item> - <property name="text"> - <string>Restore the Last Opened Tabs</string> - </property> - </item> - </widget> - </item> - </layout> - </widget> - </item> - <item> - <widget class="QGroupBox" name="groupBox"> - <property name="title"> - <string>Home Page</string> - </property> - <layout class="QFormLayout" name="formLayout_2"> - <item row="1" column="0"> - <widget class="QLabel" name="label_2"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Fixed" vsizetype="Preferred"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="minimumSize"> - <size> - <width>150</width> - <height>0</height> - </size> - </property> - <property name="text"> - <string>Home page URL:</string> - </property> - <property name="alignment"> - <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> - </property> - </widget> - </item> - <item row="1" column="1"> - <widget class="KLineEdit" name="kcfg_homePage"> - <property name="enabled"> - <bool>true</bool> - </property> - <property name="sizePolicy"> - <sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - </widget> - </item> - <item row="2" column="1"> - <layout class="QHBoxLayout" name="horizontalLayout_3"> - <item> - <widget class="QPushButton" name="setHomeToCurrentPageButton"> - <property name="text"> - <string>Set to Current Page</string> - </property> - </widget> - </item> - <item> - <spacer name="horizontalSpacer"> - <property name="orientation"> - <enum>Qt::Horizontal</enum> - </property> - <property name="sizeHint" stdset="0"> - <size> - <width>40</width> - <height>20</height> - </size> - </property> - </spacer> - </item> - </layout> - </item> - <item row="0" column="1"> - <widget class="QCheckBox" name="kcfg_useNewTabPage"> - <property name="text"> - <string>Use the New Tab Page as home page</string> - </property> - </widget> - </item> - </layout> - </widget> - </item> - <item> - <widget class="QGroupBox" name="groupBox_4"> - <property name="title"> - <string>Download Manager</string> - </property> - <layout class="QVBoxLayout" name="verticalLayout_2"> - <item> - <layout class="QHBoxLayout" name="horizontalLayout"> - <item> - <widget class="QRadioButton" name="askDownloadNo"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Fixed" vsizetype="Preferred"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="minimumSize"> - <size> - <width>150</width> - <height>0</height> - </size> - </property> - <property name="text"> - <string>Save files to:</string> - </property> - </widget> - </item> - <item> - <widget class="KUrlRequester" name="kcfg_downloadPath"> - <property name="sizePolicy"> - <sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - </widget> - </item> - </layout> - </item> - <item> - <widget class="QRadioButton" name="askDownloadYes"> - <property name="text"> - <string>Always ask me where to save files</string> - </property> - </widget> - </item> - <item> - <spacer name="verticalSpacer_3"> - <property name="orientation"> - <enum>Qt::Vertical</enum> - </property> - <property name="sizeType"> - <enum>QSizePolicy::Fixed</enum> - </property> - <property name="sizeHint" stdset="0"> - <size> - <width>20</width> - <height>10</height> - </size> - </property> - </spacer> - </item> - <item> - <widget class="QCheckBox" name="kcfg_kgetDownload"> - <property name="text"> - <string>Use KGet for downloading files</string> - </property> - </widget> - </item> - <item> - <widget class="QCheckBox" name="kcfg_kgetList"> - <property name="whatsThis"> - <string>If enabled, rekonq will display an additional context menu entry, which, when selected, lists all available links of the current website in KGet.</string> - </property> - <property name="text"> - <string>List links with KGet</string> - </property> - </widget> - </item> - </layout> - </widget> - </item> - <item> - <spacer name="verticalSpacer"> - <property name="orientation"> - <enum>Qt::Vertical</enum> - </property> - <property name="sizeHint" stdset="0"> - <size> - <width>20</width> - <height>179</height> - </size> - </property> - </spacer> - </item> - </layout> - </widget> - <customwidgets> - <customwidget> - <class>KComboBox</class> - <extends>QComboBox</extends> - <header>kcombobox.h</header> - </customwidget> - <customwidget> - <class>KLineEdit</class> - <extends>QLineEdit</extends> - <header>klineedit.h</header> - </customwidget> - <customwidget> - <class>KUrlRequester</class> - <extends>QFrame</extends> - <header>kurlrequester.h</header> - </customwidget> - </customwidgets> - <resources/> - <connections/> -</ui> diff --git a/src/settings/settings_privacy.ui b/src/settings/settings_privacy.ui deleted file mode 100644 index 04f36bad..00000000 --- a/src/settings/settings_privacy.ui +++ /dev/null @@ -1,260 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<ui version="4.0"> - <class>privacy</class> - <widget class="QWidget" name="privacy"> - <property name="geometry"> - <rect> - <x>0</x> - <y>0</y> - <width>535</width> - <height>520</height> - </rect> - </property> - <layout class="QVBoxLayout" name="verticalLayout_7"> - <item> - <widget class="QGroupBox" name="groupBox_4"> - <property name="title"> - <string>Javascript</string> - </property> - <layout class="QVBoxLayout" name="verticalLayout_5"> - <item> - <widget class="QCheckBox" name="kcfg_javascriptCanOpenWindows"> - <property name="text"> - <string>Let Javascript open new windows</string> - </property> - </widget> - </item> - <item> - <widget class="QCheckBox" name="kcfg_javascriptCanAccessClipboard"> - <property name="text"> - <string>Let Javascript access clipboard</string> - </property> - </widget> - </item> - </layout> - </widget> - </item> - <item> - <widget class="QGroupBox" name="groupBox"> - <property name="title"> - <string>Tracking</string> - </property> - <layout class="QVBoxLayout" name="verticalLayout_3"> - <item> - <widget class="QCheckBox" name="doNotTrackCheckBox"> - <property name="text"> - <string>Tell websites you do not want to be tracked</string> - </property> - </widget> - </item> - </layout> - </widget> - </item> - <item> - <widget class="QGroupBox" name="groupBox_2"> - <property name="title"> - <string>History</string> - </property> - <layout class="QVBoxLayout" name="verticalLayout"> - <item> - <layout class="QHBoxLayout" name="horizontalLayout"> - <item> - <widget class="QLabel" name="label"> - <property name="text"> - <string>Remove history items:</string> - </property> - </widget> - </item> - <item> - <widget class="QComboBox" name="kcfg_expireHistory"> - <item> - <property name="text"> - <string>never</string> - </property> - </item> - <item> - <property name="text"> - <string>every 3 months</string> - </property> - </item> - <item> - <property name="text"> - <string>every month</string> - </property> - </item> - <item> - <property name="text"> - <string>every day</string> - </property> - </item> - <item> - <property name="text"> - <string>at application exit</string> - </property> - </item> - <item> - <property name="text"> - <string>don't even store them</string> - </property> - </item> - </widget> - </item> - </layout> - </item> - </layout> - </widget> - </item> - <item> - <widget class="QGroupBox" name="groupBox_5"> - <property name="title"> - <string>Passwords</string> - </property> - <layout class="QVBoxLayout" name="verticalLayout_4"> - <item> - <layout class="QHBoxLayout" name="horizontalLayout_2"> - <item> - <widget class="QCheckBox" name="kcfg_passwordSavingEnabled"> - <property name="text"> - <string>Remember passwords for sites</string> - </property> - </widget> - </item> - <item> - <spacer name="horizontalSpacer_3"> - <property name="orientation"> - <enum>Qt::Horizontal</enum> - </property> - <property name="sizeHint" stdset="0"> - <size> - <width>40</width> - <height>20</height> - </size> - </property> - </spacer> - </item> - <item> - <widget class="QPushButton" name="managePassExceptionsButton"> - <property name="text"> - <string>Manage Exceptions</string> - </property> - </widget> - </item> - </layout> - </item> - </layout> - </widget> - </item> - <item> - <widget class="QGroupBox" name="groupBox_3"> - <property name="title"> - <string>Cookies</string> - </property> - <layout class="QVBoxLayout" name="verticalLayout_2"> - <item> - <widget class="QLabel" name="label_2"> - <property name="text"> - <string>Rekonq is sharing cookies settings with all other KDE applications</string> - </property> - <property name="wordWrap"> - <bool>false</bool> - </property> - </widget> - </item> - <item> - <layout class="QHBoxLayout" name="horizontalLayout_3"> - <item> - <widget class="QPushButton" name="cookiesButton"> - <property name="text"> - <string>Manage Cookies</string> - </property> - <property name="icon"> - <iconset theme="preferences-web-browser-cookies"> - <normaloff/> - </iconset> - </property> - </widget> - </item> - <item> - <spacer name="horizontalSpacer"> - <property name="orientation"> - <enum>Qt::Horizontal</enum> - </property> - <property name="sizeHint" stdset="0"> - <size> - <width>40</width> - <height>20</height> - </size> - </property> - </spacer> - </item> - </layout> - </item> - </layout> - </widget> - </item> - <item> - <widget class="QGroupBox" name="groupBox_6"> - <property name="title"> - <string>Cache</string> - </property> - <layout class="QVBoxLayout" name="verticalLayout_6"> - <item> - <widget class="QLabel" name="label_4"> - <property name="text"> - <string>Rekonq is sharing cache settings with all other KDE applications</string> - </property> - <property name="wordWrap"> - <bool>false</bool> - </property> - </widget> - </item> - <item> - <layout class="QHBoxLayout" name="horizontalLayout_5"> - <item> - <widget class="QPushButton" name="cacheButton"> - <property name="text"> - <string>Manage Cache</string> - </property> - <property name="icon"> - <iconset theme="preferences-web-browser-cache"> - <normaloff/> - </iconset> - </property> - </widget> - </item> - <item> - <spacer name="horizontalSpacer_4"> - <property name="orientation"> - <enum>Qt::Horizontal</enum> - </property> - <property name="sizeHint" stdset="0"> - <size> - <width>40</width> - <height>20</height> - </size> - </property> - </spacer> - </item> - </layout> - </item> - </layout> - </widget> - </item> - <item> - <spacer name="verticalSpacer"> - <property name="orientation"> - <enum>Qt::Vertical</enum> - </property> - <property name="sizeHint" stdset="0"> - <size> - <width>20</width> - <height>135</height> - </size> - </property> - </spacer> - </item> - </layout> - </widget> - <resources/> - <connections/> -</ui> diff --git a/src/settings/settings_tabs.ui b/src/settings/settings_tabs.ui deleted file mode 100644 index 4e19545f..00000000 --- a/src/settings/settings_tabs.ui +++ /dev/null @@ -1,290 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<ui version="4.0"> - <class>tabs</class> - <widget class="QWidget" name="tabs"> - <property name="geometry"> - <rect> - <x>0</x> - <y>0</y> - <width>483</width> - <height>427</height> - </rect> - </property> - <property name="windowTitle"> - <string>Tabs</string> - </property> - <layout class="QVBoxLayout" name="verticalLayout"> - <item> - <widget class="QGroupBox" name="groupBox_3"> - <property name="title"> - <string>New Tab Behavior</string> - </property> - <layout class="QFormLayout" name="formLayout"> - <property name="fieldGrowthPolicy"> - <enum>QFormLayout::ExpandingFieldsGrow</enum> - </property> - <item row="0" column="0"> - <widget class="QLabel" name="label_4"> - <property name="minimumSize"> - <size> - <width>150</width> - <height>0</height> - </size> - </property> - <property name="text"> - <string>New tab opens:</string> - </property> - <property name="alignment"> - <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> - </property> - </widget> - </item> - <item row="0" column="1"> - <widget class="KComboBox" name="kcfg_newTabsBehaviour"> - <property name="enabled"> - <bool>true</bool> - </property> - <property name="sizePolicy"> - <sizepolicy hsizetype="Expanding" vsizetype="Fixed"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <item> - <property name="text"> - <string>New Tab Page</string> - </property> - </item> - <item> - <property name="text"> - <string>Blank Page</string> - </property> - </item> - <item> - <property name="text"> - <string comment="@item:inlistbox">Home Page</string> - </property> - </item> - </widget> - </item> - <item row="1" column="0"> - <widget class="QLabel" name="label_5"> - <property name="minimumSize"> - <size> - <width>150</width> - <height>0</height> - </size> - </property> - <property name="text"> - <string>New Tab Page starts with:</string> - </property> - <property name="alignment"> - <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> - </property> - </widget> - </item> - <item row="1" column="1"> - <widget class="KComboBox" name="kcfg_newTabStartPage"> - <property name="enabled"> - <bool>true</bool> - </property> - <property name="sizePolicy"> - <sizepolicy hsizetype="Expanding" vsizetype="Fixed"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <item> - <property name="text"> - <string>Favorites</string> - </property> - </item> - <item> - <property name="text"> - <string>Closed Tabs</string> - </property> - </item> - <item> - <property name="text"> - <string>Bookmarks</string> - </property> - </item> - <item> - <property name="text"> - <string>History</string> - </property> - </item> - <item> - <property name="text"> - <string>Downloads</string> - </property> - </item> - <item> - <property name="text"> - <string>Tabs</string> - </property> - </item> - </widget> - </item> - </layout> - </widget> - </item> - <item> - <widget class="QGroupBox" name="groupBox_4"> - <property name="title"> - <string>Tabbed Browsing</string> - </property> - <layout class="QVBoxLayout" name="verticalLayout_2"> - <item> - <layout class="QHBoxLayout" name="horizontalLayout"> - <item> - <widget class="QLabel" name="label_6"> - <property name="minimumSize"> - <size> - <width>150</width> - <height>0</height> - </size> - </property> - <property name="text"> - <string>When hovering a tab show:</string> - </property> - <property name="alignment"> - <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> - </property> - </widget> - </item> - <item> - <widget class="KComboBox" name="kcfg_hoveringTabOption"> - <property name="enabled"> - <bool>true</bool> - </property> - <property name="sizePolicy"> - <sizepolicy hsizetype="Expanding" vsizetype="Fixed"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <item> - <property name="text"> - <string>Tab Preview</string> - </property> - </item> - <item> - <property name="text"> - <string>Tab's Title in a Tooltip</string> - </property> - </item> - <item> - <property name="text"> - <string>Tab's URL in a Tooltip</string> - </property> - </item> - <item> - <property name="text"> - <string comment="@item:inlistbox">Nothing</string> - </property> - </item> - </widget> - </item> - </layout> - </item> - <item> - <spacer name="verticalSpacer_2"> - <property name="orientation"> - <enum>Qt::Vertical</enum> - </property> - <property name="sizeHint" stdset="0"> - <size> - <width>20</width> - <height>40</height> - </size> - </property> - </spacer> - </item> - <item> - <widget class="QCheckBox" name="kcfg_alwaysShowTabBar"> - <property name="text"> - <string>Always show tab bar</string> - </property> - </widget> - </item> - <item> - <widget class="QCheckBox" name="kcfg_openLinksInNewWindow"> - <property name="text"> - <string>Don't use tabs: open links in new windows</string> - </property> - </widget> - </item> - <item> - <widget class="QCheckBox" name="kcfg_openExternalLinksInNewWindow"> - <property name="text"> - <string>Open as new window when URL is called externally</string> - </property> - </widget> - </item> - <item> - <widget class="QCheckBox" name="kcfg_lastTabClosesWindow"> - <property name="text"> - <string>Closing last tab closes window</string> - </property> - </widget> - </item> - <item> - <widget class="QCheckBox" name="kcfg_openNewTabsInBackground"> - <property name="text"> - <string>Open new tabs in the background</string> - </property> - </widget> - </item> - <item> - <widget class="QCheckBox" name="kcfg_openNewTabsNearCurrent"> - <property name="text"> - <string>Open new tabs after currently active one</string> - </property> - </widget> - </item> - <item> - <widget class="QCheckBox" name="kcfg_closeTabSelectPrevious"> - <property name="text"> - <string>Activate previously used tab when closing the current one</string> - </property> - <property name="checked"> - <bool>false</bool> - </property> - </widget> - </item> - <item> - <widget class="QCheckBox" name="kcfg_animatedTabHighlighting"> - <property name="text"> - <string>Animated tab highlighting</string> - </property> - </widget> - </item> - </layout> - </widget> - </item> - <item> - <spacer name="verticalSpacer"> - <property name="orientation"> - <enum>Qt::Vertical</enum> - </property> - <property name="sizeHint" stdset="0"> - <size> - <width>20</width> - <height>120</height> - </size> - </property> - </spacer> - </item> - </layout> - </widget> - <customwidgets> - <customwidget> - <class>KComboBox</class> - <extends>QComboBox</extends> - <header>kcombobox.h</header> - </customwidget> - </customwidgets> - <resources/> - <connections/> -</ui> diff --git a/src/settings/settings_webkit.ui b/src/settings/settings_webkit.ui deleted file mode 100644 index 62f3bafd..00000000 --- a/src/settings/settings_webkit.ui +++ /dev/null @@ -1,200 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<ui version="4.0"> - <class>webkit</class> - <widget class="QWidget" name="webkit"> - <property name="geometry"> - <rect> - <x>0</x> - <y>0</y> - <width>503</width> - <height>514</height> - </rect> - </property> - <layout class="QVBoxLayout" name="verticalLayout_4"> - <item> - <widget class="QGroupBox" name="groupBox"> - <property name="title"> - <string>General</string> - </property> - <layout class="QVBoxLayout" name="verticalLayout_2"> - <item> - <widget class="QCheckBox" name="kcfg_javascriptEnabled"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Minimum" vsizetype="Fixed"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="text"> - <string>Enable JavaScript</string> - </property> - </widget> - </item> - <item> - <widget class="QCheckBox" name="kcfg_javaEnabled"> - <property name="text"> - <string>Load java applets</string> - </property> - </widget> - </item> - <item> - <widget class="QCheckBox" name="kcfg_webGL"> - <property name="text"> - <string>WebGL</string> - </property> - </widget> - </item> - <item> - <widget class="QCheckBox" name="kcfg_spatialNavigation"> - <property name="text"> - <string>Spatial Navigation</string> - </property> - </widget> - </item> - <item> - <widget class="QCheckBox" name="kcfg_frameFlattening"> - <property name="text"> - <string>Frame Flattening</string> - </property> - </widget> - </item> - <item> - <widget class="QCheckBox" name="kcfg_dnsPrefetch"> - <property name="text"> - <string>Prefetch DNS entries</string> - </property> - </widget> - </item> - <item> - <widget class="QCheckBox" name="kcfg_printElementBackgrounds"> - <property name="text"> - <string>Print element backgrounds</string> - </property> - </widget> - </item> - </layout> - </widget> - </item> - <item> - <widget class="QGroupBox" name="groupBox_3"> - <property name="enabled"> - <bool>true</bool> - </property> - <property name="sizePolicy"> - <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="title"> - <string>Plugins</string> - </property> - <layout class="QFormLayout" name="formLayout"> - <item row="0" column="0"> - <widget class="QLabel" name="label_2"> - <property name="enabled"> - <bool>true</bool> - </property> - <property name="sizePolicy"> - <sizepolicy hsizetype="Minimum" vsizetype="Minimum"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="minimumSize"> - <size> - <width>150</width> - <height>0</height> - </size> - </property> - <property name="text"> - <string>When loading web pages:</string> - </property> - <property name="alignment"> - <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> - </property> - </widget> - </item> - <item row="0" column="1"> - <widget class="KComboBox" name="kcfg_pluginsEnabled"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Expanding" vsizetype="Fixed"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <item> - <property name="text"> - <string>Autoload Plugins</string> - </property> - </item> - <item> - <property name="text"> - <string>Manually Load Plugins</string> - </property> - </item> - <item> - <property name="text"> - <string>Never Load Plugins</string> - </property> - </item> - </widget> - </item> - </layout> - </widget> - </item> - <item> - <widget class="QGroupBox" name="groupBox_4"> - <property name="title"> - <string>HTML 5</string> - </property> - <layout class="QVBoxLayout" name="verticalLayout_3"> - <item> - <widget class="QCheckBox" name="kcfg_offlineStorageDatabaseEnabled"> - <property name="text"> - <string>Offline storage database</string> - </property> - </widget> - </item> - <item> - <widget class="QCheckBox" name="kcfg_offlineWebApplicationCacheEnabled"> - <property name="text"> - <string>Offline web application cache</string> - </property> - </widget> - </item> - <item> - <widget class="QCheckBox" name="kcfg_localStorageEnabled"> - <property name="text"> - <string>Local Storage</string> - </property> - </widget> - </item> - </layout> - </widget> - </item> - <item> - <spacer name="verticalSpacer_2"> - <property name="orientation"> - <enum>Qt::Vertical</enum> - </property> - <property name="sizeHint" stdset="0"> - <size> - <width>20</width> - <height>40</height> - </size> - </property> - </spacer> - </item> - </layout> - </widget> - <customwidgets> - <customwidget> - <class>KComboBox</class> - <extends>QComboBox</extends> - <header>kcombobox.h</header> - </customwidget> - </customwidgets> - <resources/> - <connections/> -</ui> diff --git a/src/settings/settingsdialog.cpp b/src/settings/settingsdialog.cpp deleted file mode 100644 index 6629f10c..00000000 --- a/src/settings/settingsdialog.cpp +++ /dev/null @@ -1,232 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2008-2012 by Andrea Diamantini <adjam7 at gmail dot com> -* Copyright (C) 2009-2011 by Lionel Chauvin <megabigbug@yahoo.fr> -* -* -* 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 "settingsdialog.h" -#include "settingsdialog.moc" - -// Auto Includes -#include "rekonq.h" - -// Local Includes -#include "application.h" -#include "mainwindow.h" -#include "webtab.h" -#include "searchengine.h" -#include "opensearchmanager.h" - -// Widget Includes -#include "advancedwidget.h" -#include "appearancewidget.h" -#include "generalwidget.h" -#include "privacywidget.h" -#include "tabswidget.h" -#include "webkitwidget.h" - -// KDE Includes -#include <KConfig> -#include <KStandardDirs> -#include <KPageWidgetItem> -#include <KShortcutsEditor> -#include <KCModuleInfo> -#include <KCModuleProxy> - -// Qt Includes -#include <QtGui/QWidget> - - -class Private -{ -private: - Private(SettingsDialog *parent); - -private: - GeneralWidget *generalWidg; - TabsWidget *tabsWidg; - AppearanceWidget *appearanceWidg; - WebKitWidget *webkitWidg; - PrivacyWidget *privacyWidg; - AdvancedWidget *advancedWidg; - - KCModuleProxy *ebrowsingModule; - - KShortcutsEditor *shortcutsEditor; - - friend class SettingsDialog; -}; - - -Private::Private(SettingsDialog *parent) -{ - KPageWidgetItem *pageItem; - - // -- 1 - generalWidg = new GeneralWidget(parent); - generalWidg->layout()->setMargin(0); - pageItem = parent->addPage(generalWidg, i18n("General")); - pageItem->setIcon(KIcon("rekonq")); - - // -- 2 - tabsWidg = new TabsWidget(parent); - tabsWidg->layout()->setMargin(0); - pageItem = parent->addPage(tabsWidg, i18n("Tabs")); - pageItem->setIcon(KIcon("tab-duplicate")); - - // -- 3 - appearanceWidg = new AppearanceWidget(parent); - appearanceWidg->layout()->setMargin(0); - pageItem = parent->addPage(appearanceWidg, i18n("Appearance")); - pageItem->setIcon(KIcon("preferences-desktop-font")); - - // -- 4 - webkitWidg = new WebKitWidget(parent); - webkitWidg->layout()->setMargin(0); - pageItem = parent->addPage(webkitWidg, i18n("WebKit")); - QString webkitIconPath = KStandardDirs::locate("appdata", "pics/webkit-icon.png"); - KIcon webkitIcon = KIcon(QIcon(webkitIconPath)); - pageItem->setIcon(webkitIcon); - - // -- 5 - privacyWidg = new PrivacyWidget(parent); - privacyWidg->layout()->setMargin(0); - pageItem = parent->addPage(privacyWidg, i18n("Privacy")); - pageItem->setIcon(KIcon("view-media-artist")); - - // -- 6 - advancedWidg = new AdvancedWidget(parent); - advancedWidg->layout()->setMargin(0); - pageItem = parent->addPage(advancedWidg, i18n("Advanced")); - pageItem->setIcon(KIcon("applications-system")); - - // -- 7 - shortcutsEditor = new KShortcutsEditor(rApp->mainWindow()->actionCollection(), parent); - pageItem = parent->addPage(shortcutsEditor , i18n("Shortcuts")); - pageItem->setIcon(KIcon("configure-shortcuts")); - - // -- 8 - KCModuleInfo ebrowsingInfo("ebrowsing.desktop"); - ebrowsingModule = new KCModuleProxy(ebrowsingInfo, parent); - pageItem = parent->addPage(ebrowsingModule, i18n("Search Engines")); - KIcon wsIcon("edit-web-search"); - if (wsIcon.isNull()) - { - wsIcon = KIcon("preferences-web-browser-shortcuts"); - } - pageItem->setIcon(wsIcon); - - // WARNING - // remember wheh changing here that the smallest netbooks - // have a 1024x576 resolution. So DON'T bother that limits!! - parent->setMinimumSize(700, 525); -} - - -// ----------------------------------------------------------------------------------------------------- - - -SettingsDialog::SettingsDialog(QWidget *parent) - : KConfigDialog(parent, "rekonfig", ReKonfig::self()) - , d(new Private(this)) -{ - showButtonSeparator(false); - setWindowTitle(i18nc("Window title of the settings dialog", "Configure – rekonq")); - - // update buttons - connect(d->generalWidg, SIGNAL(changed(bool)), this, SLOT(updateButtons())); - connect(d->tabsWidg, SIGNAL(changed(bool)), this, SLOT(updateButtons())); - connect(d->appearanceWidg, SIGNAL(changed(bool)), this, SLOT(updateButtons())); - connect(d->webkitWidg, SIGNAL(changed(bool)), this, SLOT(updateButtons())); - connect(d->ebrowsingModule, SIGNAL(changed(bool)), this, SLOT(updateButtons())); - connect(d->advancedWidg, SIGNAL(changed(bool)), this, SLOT(updateButtons())); - connect(d->privacyWidg, SIGNAL(changed(bool)), this, SLOT(updateButtons())); - - connect(d->shortcutsEditor, SIGNAL(keyChange()), this, SLOT(updateButtons())); - - // save settings - connect(this, SIGNAL(applyClicked()), this, SLOT(saveSettings())); - connect(this, SIGNAL(okClicked()), this, SLOT(saveSettings())); - setHelp("Config-rekonq", "rekonq"); -} - - -SettingsDialog::~SettingsDialog() -{ - kDebug() << "bye bye settings..."; - delete d; -} - - -// we need this function to SAVE settings in rc file.. -void SettingsDialog::saveSettings() -{ - ReKonfig::self()->writeConfig(); - - d->generalWidg->save(); - d->tabsWidg->save(); - d->appearanceWidg->save(); - d->webkitWidg->save(); - d->advancedWidg->save(); - d->privacyWidg->save(); - d->shortcutsEditor->save(); - d->ebrowsingModule->save(); - - d->privacyWidg->reload(); - - SearchEngine::reload(); - rApp->opensearchManager()->removeDeletedEngines(); - - updateButtons(); - emit settingsChanged("ReKonfig"); -} - - -bool SettingsDialog::hasChanged() -{ - return KConfigDialog::hasChanged() - || d->generalWidg->changed() - || d->tabsWidg->changed() - || d->appearanceWidg->changed() - || d->webkitWidg->changed() - || d->advancedWidg->changed() - || d->privacyWidg->changed() - || d->ebrowsingModule->changed() - || d->shortcutsEditor->isModified(); - ; -} - - -bool SettingsDialog::isDefault() -{ - bool isDef = KConfigDialog::isDefault(); - - if (isDef) - { - // check our private widget values - isDef = d->appearanceWidg->isDefault(); - } - return isDef; -} diff --git a/src/settings/settingsdialog.h b/src/settings/settingsdialog.h deleted file mode 100644 index ad03602b..00000000 --- a/src/settings/settingsdialog.h +++ /dev/null @@ -1,63 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2008-2012 by Andrea Diamantini <adjam7 at gmail dot com> -* Copyright (C) 2009-2011 by Lionel Chauvin <megabigbug@yahoo.fr> -* -* -* 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 SETTINGS_DIALOG_H -#define SETTINGS_DIALOG_H - - -// Rekonq Includes -#include "rekonq_defines.h" - -// KDE Includes -#include <KConfigDialog> - -// Forward Declarations -class QWidget; -class Private; - - -class REKONQ_TESTS_EXPORT SettingsDialog : public KConfigDialog -{ - Q_OBJECT - -public: - SettingsDialog(QWidget *parent = 0); - ~SettingsDialog(); - - virtual bool hasChanged(); - -protected: - virtual bool isDefault(); - -private: - Private* const d; - -private Q_SLOTS: - void saveSettings(); -}; - -#endif // SETTINGS_DIALOG_H diff --git a/src/settings/tabswidget.cpp b/src/settings/tabswidget.cpp deleted file mode 100644 index 67829f82..00000000 --- a/src/settings/tabswidget.cpp +++ /dev/null @@ -1,52 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2010-2011 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/>. -* -* ============================================================ */ - - -// Local Includes -#include "tabswidget.h" -#include "tabswidget.moc" - - -TabsWidget::TabsWidget(QWidget *parent) - : QWidget(parent) - , _changed(false) -{ - setupUi(this); -} - - -void TabsWidget::save() -{ -} - -bool TabsWidget::changed() -{ - return _changed; -} - - -void TabsWidget::hasChanged() -{ -} diff --git a/src/settings/tabswidget.h b/src/settings/tabswidget.h deleted file mode 100644 index 056f030c..00000000 --- a/src/settings/tabswidget.h +++ /dev/null @@ -1,58 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2010-2011 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 TABS_WIDGET_H -#define TABS_WIDGET_H - - -// Ui Includes -#include "ui_settings_tabs.h" - -// Qt Includes -#include <QtGui/QWidget> - - -class TabsWidget : public QWidget, private Ui::tabs -{ - Q_OBJECT - -public: - TabsWidget(QWidget *parent = 0); - - void save(); - bool changed(); - -Q_SIGNALS: - void changed(bool); - -private Q_SLOTS: - void hasChanged(); - -private: - bool _changed; -}; - -#endif // TABS_WIDGET_H diff --git a/src/settings/webkitwidget.cpp b/src/settings/webkitwidget.cpp deleted file mode 100644 index 31224f05..00000000 --- a/src/settings/webkitwidget.cpp +++ /dev/null @@ -1,71 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2010-2011 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/>. -* -* ============================================================ */ - - -// Local Includes -#include "webkitwidget.h" -#include "webkitwidget.moc" - - -WebKitWidget::WebKitWidget(QWidget *parent) - : QWidget(parent) - , _changed(false) -{ - setupUi(this); - setWebSettingsToolTips(); -} - - -void WebKitWidget::save() -{ -} - - -bool WebKitWidget::changed() -{ - return _changed; -} - - -void WebKitWidget::hasChanged() -{ - _changed = true; - emit changed(true); -} - - -void WebKitWidget::setWebSettingsToolTips() -{ - kcfg_webGL->setToolTip(i18n("Enables WebGL technology")); - kcfg_spatialNavigation->setToolTip(i18n("Lets you navigating between focusable elements using arrow keys.")); - kcfg_frameFlattening->setToolTip(i18n("Flatten all the frames to become one scrollable page.")); - kcfg_dnsPrefetch->setToolTip(i18n("Specifies whether WebKit will try to prefetch DNS entries to speed up browsing.")); - kcfg_printElementBackgrounds->setToolTip(i18n("If enabled, background colors and images are also drawn when the page is printed.")); - kcfg_javascriptEnabled->setToolTip(i18n("Enables the execution of JavaScript programs.")); - kcfg_javaEnabled->setToolTip(i18n("Enables support for Java applets.")); - kcfg_offlineStorageDatabaseEnabled->setToolTip(i18n("Enables support for the HTML 5 offline storage feature.")); - kcfg_offlineWebApplicationCacheEnabled->setToolTip(i18n("Enables support for the HTML 5 web application cache feature.")); - kcfg_localStorageEnabled->setToolTip(i18n("Enables support for the HTML 5 local storage feature.")); -} diff --git a/src/settings/webkitwidget.h b/src/settings/webkitwidget.h deleted file mode 100644 index 1a41a6a1..00000000 --- a/src/settings/webkitwidget.h +++ /dev/null @@ -1,60 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2010-2011 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 WEBKIT_WIDGET_H -#define WEBKIT_WIDGET_H - - -// Ui Includes -#include "ui_settings_webkit.h" - -// Qt Includes -#include <QtGui/QWidget> - - -class WebKitWidget : public QWidget, private Ui::webkit -{ - Q_OBJECT - -public: - WebKitWidget(QWidget *parent = 0); - - void save(); - bool changed(); - -Q_SIGNALS: - void changed(bool); - -private Q_SLOTS: - void hasChanged(); - -private: - void setWebSettingsToolTips(); - - bool _changed; -}; - -#endif // WEBKIT_WIDGET_H diff --git a/src/sslinfo.ui b/src/sslinfo.ui deleted file mode 100644 index c1c67b47..00000000 --- a/src/sslinfo.ui +++ /dev/null @@ -1,392 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<ui version="4.0"> - <class>SslInfo</class> - <widget class="QWidget" name="SslInfo"> - <property name="geometry"> - <rect> - <x>0</x> - <y>0</y> - <width>539</width> - <height>459</height> - </rect> - </property> - <layout class="QVBoxLayout" name="verticalLayout_2"> - <item> - <widget class="QLabel" name="label"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Preferred" vsizetype="Minimum"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="text"> - <string><h2>Certificate Information</h2></string> - </property> - </widget> - </item> - <item> - <spacer name="verticalSpacer_6"> - <property name="orientation"> - <enum>Qt::Vertical</enum> - </property> - <property name="sizeHint" stdset="0"> - <size> - <width>20</width> - <height>40</height> - </size> - </property> - </spacer> - </item> - <item> - <layout class="QHBoxLayout" name="horizontalLayout"> - <item> - <widget class="QLabel" name="label_4"> - <property name="text"> - <string>Certificate Chain:</string> - </property> - </widget> - </item> - <item> - <widget class="QComboBox" name="comboBox"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Expanding" vsizetype="Fixed"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - </widget> - </item> - </layout> - </item> - <item> - <spacer name="verticalSpacer_4"> - <property name="orientation"> - <enum>Qt::Vertical</enum> - </property> - <property name="sizeHint" stdset="0"> - <size> - <width>20</width> - <height>40</height> - </size> - </property> - </spacer> - </item> - <item> - <widget class="QLabel" name="certInfoLabel"> - <property name="text"> - <string>TextLabel</string> - </property> - </widget> - </item> - <item> - <spacer name="verticalSpacer_5"> - <property name="orientation"> - <enum>Qt::Vertical</enum> - </property> - <property name="sizeHint" stdset="0"> - <size> - <width>20</width> - <height>40</height> - </size> - </property> - </spacer> - </item> - <item> - <widget class="QGroupBox" name="groupBox"> - <property name="title"> - <string/> - </property> - <layout class="QVBoxLayout" name="verticalLayout"> - <item> - <widget class="QLabel" name="label_20"> - <property name="text"> - <string><h4>Issued To:</h4></string> - </property> - </widget> - </item> - <item> - <layout class="QGridLayout" name="gridLayout"> - <item row="0" column="0"> - <widget class="QLabel" name="label_6"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Fixed" vsizetype="Preferred"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="minimumSize"> - <size> - <width>160</width> - <height>0</height> - </size> - </property> - <property name="text"> - <string>Common Name (CN):</string> - </property> - </widget> - </item> - <item row="0" column="1"> - <widget class="QLabel" name="subjectCN"> - <property name="text"> - <string>TextLabel</string> - </property> - </widget> - </item> - <item row="1" column="0"> - <widget class="QLabel" name="label_8"> - <property name="text"> - <string>Organization (O):</string> - </property> - </widget> - </item> - <item row="1" column="1"> - <widget class="QLabel" name="subjectO"> - <property name="text"> - <string>TextLabel</string> - </property> - </widget> - </item> - <item row="2" column="0"> - <widget class="QLabel" name="label_2"> - <property name="text"> - <string>Organizational Unit (OU):</string> - </property> - </widget> - </item> - <item row="2" column="1"> - <widget class="QLabel" name="subjectOU"> - <property name="text"> - <string>TextLabel</string> - </property> - </widget> - </item> - <item row="3" column="0"> - <widget class="QLabel" name="label_3"> - <property name="text"> - <string>Serial Number:</string> - </property> - </widget> - </item> - <item row="3" column="1"> - <widget class="QLabel" name="subjectSN"> - <property name="text"> - <string>TextLabel</string> - </property> - </widget> - </item> - </layout> - </item> - <item> - <spacer name="verticalSpacer"> - <property name="orientation"> - <enum>Qt::Vertical</enum> - </property> - <property name="sizeHint" stdset="0"> - <size> - <width>20</width> - <height>20</height> - </size> - </property> - </spacer> - </item> - <item> - <widget class="QLabel" name="label_21"> - <property name="text"> - <string><h4>Issued By:</h4></string> - </property> - </widget> - </item> - <item> - <layout class="QGridLayout" name="gridLayout_2"> - <item row="0" column="0"> - <widget class="QLabel" name="label_10"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Fixed" vsizetype="Preferred"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="minimumSize"> - <size> - <width>160</width> - <height>0</height> - </size> - </property> - <property name="text"> - <string>Common Name (CN):</string> - </property> - </widget> - </item> - <item row="0" column="1"> - <widget class="QLabel" name="issuerCN"> - <property name="text"> - <string>TextLabel</string> - </property> - </widget> - </item> - <item row="1" column="0"> - <widget class="QLabel" name="label_12"> - <property name="text"> - <string>Organization (O):</string> - </property> - </widget> - </item> - <item row="2" column="0"> - <widget class="QLabel" name="label_16"> - <property name="text"> - <string>Organizational Unit (OU):</string> - </property> - </widget> - </item> - <item row="2" column="1"> - <widget class="QLabel" name="issuerOU"> - <property name="text"> - <string>TextLabel</string> - </property> - </widget> - </item> - <item row="1" column="1"> - <widget class="QLabel" name="issuerO"> - <property name="text"> - <string>TextLabel</string> - </property> - </widget> - </item> - </layout> - </item> - <item> - <spacer name="verticalSpacer_2"> - <property name="orientation"> - <enum>Qt::Vertical</enum> - </property> - <property name="sizeHint" stdset="0"> - <size> - <width>20</width> - <height>20</height> - </size> - </property> - </spacer> - </item> - <item> - <widget class="QLabel" name="label_22"> - <property name="text"> - <string><h4>Validity Period:</h4></string> - </property> - </widget> - </item> - <item> - <layout class="QGridLayout" name="gridLayout_3"> - <item row="0" column="0"> - <widget class="QLabel" name="label_14"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Fixed" vsizetype="Preferred"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="minimumSize"> - <size> - <width>160</width> - <height>0</height> - </size> - </property> - <property name="text"> - <string>Issued on:</string> - </property> - </widget> - </item> - <item row="0" column="1"> - <widget class="QLabel" name="issuedOn"> - <property name="text"> - <string>TextLabel</string> - </property> - </widget> - </item> - <item row="1" column="0"> - <widget class="QLabel" name="label_18"> - <property name="text"> - <string>Expires on:</string> - </property> - </widget> - </item> - <item row="1" column="1"> - <widget class="QLabel" name="expiresOn"> - <property name="text"> - <string>TextLabel</string> - </property> - </widget> - </item> - </layout> - </item> - <item> - <spacer name="verticalSpacer_3"> - <property name="orientation"> - <enum>Qt::Vertical</enum> - </property> - <property name="sizeHint" stdset="0"> - <size> - <width>20</width> - <height>20</height> - </size> - </property> - </spacer> - </item> - <item> - <widget class="QLabel" name="label_23"> - <property name="text"> - <string><h4>Digests:</h4></string> - </property> - </widget> - </item> - <item> - <layout class="QGridLayout" name="gridLayout_5"> - <item row="0" column="0"> - <widget class="QLabel" name="label_36"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Fixed" vsizetype="Preferred"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="minimumSize"> - <size> - <width>160</width> - <height>0</height> - </size> - </property> - <property name="text"> - <string>Md5:</string> - </property> - </widget> - </item> - <item row="0" column="1"> - <widget class="QLabel" name="md5"> - <property name="text"> - <string>TextLabel</string> - </property> - </widget> - </item> - <item row="1" column="0"> - <widget class="QLabel" name="label_38"> - <property name="text"> - <string>SHA-1:</string> - </property> - </widget> - </item> - <item row="1" column="1"> - <widget class="QLabel" name="sha1"> - <property name="text"> - <string>TextLabel</string> - </property> - </widget> - </item> - </layout> - </item> - </layout> - </widget> - </item> - </layout> - </widget> - <resources/> - <connections/> -</ui> diff --git a/src/sslinfodialog.cpp b/src/sslinfodialog.cpp deleted file mode 100644 index 2f0b44e4..00000000 --- a/src/sslinfodialog.cpp +++ /dev/null @@ -1,176 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2011-2012 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 "sslinfodialog.h" -#include "sslinfodialog.moc" - -// KDE Includes -#include <KFileDialog> - -#include <kglobal.h> -#include <klocale.h> -#include <ktcpsocket.h> - -// Qt Includes -#include <QDate> -#include <QFile> - -#include <QLabel> -#include <QTextDocument> - -#include <QSslCertificate> - - -SslInfoDialog::SslInfoDialog(const QString &host, const WebSslInfo &info, QWidget *parent) - : KDialog(parent) - , m_host(host) - , m_info(info) -{ - setCaption(i18n("Rekonq SSL Information")); - setAttribute(Qt::WA_DeleteOnClose); - - setMinimumWidth(300); - - setButtons(KDialog::User1 | KDialog::Close); - - setButtonGuiItem(User1, KGuiItem(i18n("Export"), QL1S("view-certificate-export"))); - connect(this, SIGNAL(user1Clicked()), this, SLOT(exportCert())); - - ui.setupUi(mainWidget()); - - // ------------------------------------------------ - QList<QSslCertificate> caList = m_info.certificateChain(); - - Q_FOREACH(const QSslCertificate & cert, caList) - { - QString name = cert.subjectInfo(QSslCertificate::CommonName); - if (name.isEmpty()) - name = cert.subjectInfo(QSslCertificate::Organization); - if (name.isEmpty()) - name = cert.serialNumber(); - ui.comboBox->addItem(name); - } - connect(ui.comboBox, SIGNAL(activated(int)), this, SLOT(displayFromChain(int))); - - displayFromChain(0); -} - - -void SslInfoDialog::showCertificateInfo(QSslCertificate subjectCert, const QStringList &certErrors) -{ - QStringList sl = certErrors; - QString c = sl.takeFirst(); - c += QL1S("<ul>"); - Q_FOREACH(const QString & s, sl) - { - c += QL1S("<li>") + s + QL1S("</li>"); - } - c += QL1S("</ul>"); - ui.certInfoLabel->setText(c); - - ui.subjectCN->setText(Qt::escape(subjectCert.subjectInfo(QSslCertificate::CommonName))); - ui.subjectO->setText(Qt::escape(subjectCert.subjectInfo(QSslCertificate::Organization))); - ui.subjectOU->setText(Qt::escape(subjectCert.subjectInfo(QSslCertificate::OrganizationalUnitName))); - ui.subjectSN->setText(Qt::escape(subjectCert.serialNumber())); - - ui.issuerCN->setText(Qt::escape(subjectCert.issuerInfo(QSslCertificate::CommonName))); - ui.issuerO->setText(Qt::escape(subjectCert.issuerInfo(QSslCertificate::Organization))); - ui.issuerOU->setText(Qt::escape(subjectCert.issuerInfo(QSslCertificate::OrganizationalUnitName))); - - ui.issuedOn->setText(Qt::escape(subjectCert.effectiveDate().date().toString(Qt::SystemLocaleShortDate))); - ui.expiresOn->setText(Qt::escape(subjectCert.expiryDate().date().toString(Qt::SystemLocaleShortDate))); - - ui.md5->setText(Qt::escape(subjectCert.digest(QCryptographicHash::Md5).toHex())); - ui.sha1->setText(Qt::escape(subjectCert.digest(QCryptographicHash::Sha1).toHex())); -} - - -void SslInfoDialog::displayFromChain(int i) -{ - QList<QSslCertificate> caList = m_info.certificateChain(); - QSslCertificate cert = caList.at(i); - - QStringList errors = SslInfoDialog::errorsFromString(m_info.certificateErrors()).at(i); - - if (cert.isValid() && errors.isEmpty()) - { - QStringList certInfo; - certInfo << i18n("The Certificate is Valid!"); - showCertificateInfo(cert, certInfo); - } - else - { - errors.prepend(i18n("The certificate for this site is NOT valid for the following reasons:")); - showCertificateInfo(cert, errors); - } -} - - -void SslInfoDialog::exportCert() -{ - QSslCertificate cert = m_info.certificateChain().at(ui.comboBox->currentIndex()); - - if (cert.isNull()) - return; - - QString name = m_host + QL1S(".pem"); - - QString certPath = KFileDialog::getSaveFileName(name, QString(), this); - - QFile file(certPath); - if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) - return; - - QTextStream out(&file); - out << cert.toPem(); -} - - -// static ------------------------------------------------------------------------------------------- -QList<QStringList> SslInfoDialog::errorsFromString(const QString &s) -{ - QList<QStringList> resultList; - - QStringList sl1 = s.split('\n', QString::KeepEmptyParts); - - Q_FOREACH(const QString & certErrors, sl1) - { - QStringList errors; - QStringList sl = certErrors.split('\t', QString::SkipEmptyParts); - Q_FOREACH(const QString & s, sl) - { - bool didConvert; - KSslError::Error error = static_cast<KSslError::Error>(s.trimmed().toInt(&didConvert)); - if (didConvert) - { - errors << KSslError(error).errorString(); - } - } - resultList << errors; - } - return resultList; -} diff --git a/src/sslinfodialog.h b/src/sslinfodialog.h deleted file mode 100644 index 94f610c6..00000000 --- a/src/sslinfodialog.h +++ /dev/null @@ -1,79 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2011-2012 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 SSL_INFO_DIALOG_H -#define SSL_INFO_DIALOG_H - - -// Rekonq Includes -#include "rekonq_defines.h" - -// Local Includes -#include "websslinfo.h" - -// Ui Includes -#include "ui_sslinfo.h" - -// KDE Includes -#include <KDialog> - -// Qt Includes -#include <QString> - -// Forward Declarations -class QSslCertificate; - - -/** - * Rekonq SSL Information Dialog - * - * This class creates a dialog that can be used to display information about - * an SSL session. - * - */ -class SslInfoDialog : public KDialog -{ - Q_OBJECT - -public: - explicit SslInfoDialog(const QString &host, const WebSslInfo &info, QWidget *parent = 0); - - static QList<QStringList> errorsFromString(const QString &s); - -private Q_SLOTS: - void displayFromChain(int); - void exportCert(); - -private: - void showCertificateInfo(QSslCertificate, const QStringList &certErrors); - - QString m_host; - WebSslInfo m_info; - - Ui::SslInfo ui; -}; - -#endif // SSL_INFO_DIALOG_H diff --git a/src/sync/ftpsynchandler.cpp b/src/sync/ftpsynchandler.cpp deleted file mode 100644 index ad845d09..00000000 --- a/src/sync/ftpsynchandler.cpp +++ /dev/null @@ -1,289 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2011 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 "ftpsynchandler.h" -#include "ftpsynchandler.moc" - -// Auto Includes -#include "rekonq.h" - -// KDE Includes -#include <KStandardDirs> -#include <klocalizedstring.h> - -#include <KIO/Job> - - -FTPSyncHandler::FTPSyncHandler(QObject *parent) - : SyncHandler(parent) -{ - kDebug() << "creating FTP handler..."; -} - - -void FTPSyncHandler::initialLoadAndCheck() -{ - if (!ReKonfig::syncEnabled()) - { - _firstTimeSynced = false; - return; - } - - // Bookmarks - if (ReKonfig::syncBookmarks()) - { - _remoteBookmarksUrl = QUrl(); - _remoteBookmarksUrl.setHost(ReKonfig::syncHost()); - _remoteBookmarksUrl.setScheme("ftp"); - _remoteBookmarksUrl.setUserName(ReKonfig::syncUser()); - _remoteBookmarksUrl.setPassword(ReKonfig::syncPass()); - _remoteBookmarksUrl.setPort(ReKonfig::syncPort()); - _remoteBookmarksUrl.setPath(ReKonfig::syncPath() + QL1S("/bookmarks.xml")); - - const QString bookmarksFilePath = KStandardDirs::locateLocal("data", QL1S("konqueror/bookmarks.xml")); - _localBookmarksUrl = KUrl(bookmarksFilePath); - - KIO::StatJob *job = KIO::stat(_remoteBookmarksUrl, KIO::StatJob::DestinationSide, 0, KIO::HideProgressInfo); - connect(job, SIGNAL(finished(KJob*)), this, SLOT(onBookmarksStatFinished(KJob*))); - } - - // History - if (ReKonfig::syncHistory()) - { - _remoteHistoryUrl = QUrl(); - _remoteHistoryUrl.setHost(ReKonfig::syncHost()); - _remoteHistoryUrl.setScheme("ftp"); - _remoteHistoryUrl.setUserName(ReKonfig::syncUser()); - _remoteHistoryUrl.setPassword(ReKonfig::syncPass()); - _remoteHistoryUrl.setPort(ReKonfig::syncPort()); - _remoteHistoryUrl.setPath(ReKonfig::syncPath() + QL1S("/history")); - - const QString historyFilePath = KStandardDirs::locateLocal("appdata", "history"); - _localHistoryUrl = KUrl(historyFilePath); - - KIO::StatJob *job = KIO::stat(_remoteHistoryUrl, KIO::StatJob::DestinationSide, 0, KIO::HideProgressInfo); - connect(job, SIGNAL(finished(KJob*)), this, SLOT(onHistoryStatFinished(KJob*))); - } - - // Passwords - if (ReKonfig::syncPasswords()) - { - _remotePasswordsUrl = QUrl(); - _remotePasswordsUrl.setHost(ReKonfig::syncHost()); - _remotePasswordsUrl.setScheme("ftp"); - _remotePasswordsUrl.setUserName(ReKonfig::syncUser()); - _remotePasswordsUrl.setPassword(ReKonfig::syncPass()); - _remotePasswordsUrl.setPort(ReKonfig::syncPort()); - _remotePasswordsUrl.setPath(ReKonfig::syncPath() + QL1S("/kdewallet.kwl")); - - const QString passwordsFilePath = KStandardDirs::locateLocal("data", QL1S("kwallet/kdewallet.kwl")); - _localPasswordsUrl = KUrl(passwordsFilePath); - - KIO::StatJob *job = KIO::stat(_remotePasswordsUrl, KIO::StatJob::DestinationSide, 0, KIO::HideProgressInfo); - connect(job, SIGNAL(finished(KJob*)), this, SLOT(onPasswordsStatFinished(KJob*))); - } -} - - -bool FTPSyncHandler::syncRelativeEnabled(bool check) -{ - if (!ReKonfig::syncEnabled()) - return false; - - if (!_firstTimeSynced) - return false; - - return check; -} - - -// --------------------------------------------------------------------------------------- - - -void FTPSyncHandler::syncBookmarks() -{ - kDebug() << "syncing now..."; - - if (!syncRelativeEnabled(ReKonfig::syncBookmarks())) - return; - - KIO::Job *job = KIO::file_copy(_localBookmarksUrl, _remoteBookmarksUrl, -1, KIO::HideProgressInfo | KIO::Overwrite); - connect(job, SIGNAL(finished(KJob*)), this, SLOT(onBookmarksSyncFinished(KJob*))); -} - - -void FTPSyncHandler::onBookmarksStatFinished(KJob *job) -{ - if (job->error()) - { - if (job->error() == KIO::ERR_DOES_NOT_EXIST) - { - KIO::Job *job = KIO::file_copy(_localBookmarksUrl, _remoteBookmarksUrl, -1, KIO::HideProgressInfo | KIO::Overwrite); - connect(job, SIGNAL(finished(KJob*)), this, SLOT(onBookmarksSyncFinished(KJob*))); - - emit syncStatus(Rekonq::Bookmarks, true, i18n("Remote bookmarks file does NOT exists. Exporting local copy...")); - _firstTimeSynced = true; - } - else - { - emit syncStatus(Rekonq::Bookmarks, false, job->errorString()); - } - } - else - { - KIO::Job *job = KIO::file_copy(_remoteBookmarksUrl, _localBookmarksUrl, -1, KIO::HideProgressInfo | KIO::Overwrite); - connect(job, SIGNAL(finished(KJob*)), this, SLOT(onBookmarksSyncFinished(KJob*))); - - emit syncStatus(Rekonq::Bookmarks, true, i18n("Remote bookmarks file exists! Syncing local copy...")); - _firstTimeSynced = true; - } -} - - -void FTPSyncHandler::onBookmarksSyncFinished(KJob *job) -{ - if (job->error()) - { - emit syncStatus(Rekonq::Bookmarks, false, job->errorString()); - emit syncBookmarksFinished(false); - return; - } - - emit syncBookmarksFinished(true); -} - - -// --------------------------------------------------------------------------------------- - - -void FTPSyncHandler::syncHistory() -{ - kDebug() << "syncing now..."; - - if (!syncRelativeEnabled(ReKonfig::syncHistory())) - return; - - KIO::Job *job = KIO::file_copy(_localHistoryUrl, _remoteHistoryUrl, -1, KIO::HideProgressInfo | KIO::Overwrite); - connect(job, SIGNAL(finished(KJob*)), this, SLOT(onHistorySyncFinished(KJob*))); -} - - -void FTPSyncHandler::onHistoryStatFinished(KJob *job) -{ - if (job->error()) - { - if (job->error() == KIO::ERR_DOES_NOT_EXIST) - { - KIO::Job *job = KIO::file_copy(_localHistoryUrl, _remoteHistoryUrl, -1, KIO::HideProgressInfo | KIO::Overwrite); - connect(job, SIGNAL(finished(KJob*)), this, SLOT(onHistorySyncFinished(KJob*))); - - emit syncStatus(Rekonq::History, true, i18n("Remote history file does NOT exists. Exporting local copy...")); - _firstTimeSynced = true; - } - else - { - emit syncStatus(Rekonq::History, false, job->errorString()); - } - } - else - { - KIO::Job *job = KIO::file_copy(_remoteHistoryUrl, _localHistoryUrl, -1, KIO::HideProgressInfo | KIO::Overwrite); - connect(job, SIGNAL(finished(KJob*)), this, SLOT(onHistorySyncFinished(KJob*))); - - emit syncStatus(Rekonq::History, true, i18n("Remote history file exists! Syncing local copy...")); - _firstTimeSynced = true; - } -} - - -void FTPSyncHandler::onHistorySyncFinished(KJob *job) -{ - if (job->error()) - { - emit syncStatus(Rekonq::History, false, job->errorString()); - emit syncHistoryFinished(false); - return; - } - - emit syncHistoryFinished(true); -} - - -// --------------------------------------------------------------------------------------- - - -void FTPSyncHandler::syncPasswords() -{ - kDebug() << "syncing now..."; - - if (!syncRelativeEnabled(ReKonfig::syncPasswords())) - return; - - KIO::Job *job = KIO::file_copy(_localPasswordsUrl, _remotePasswordsUrl, -1, KIO::HideProgressInfo | KIO::Overwrite); - connect(job, SIGNAL(finished(KJob*)), this, SLOT(onPasswordsSyncFinished(KJob*))); -} - - -void FTPSyncHandler::onPasswordsStatFinished(KJob *job) -{ - if (job->error()) - { - if (job->error() == KIO::ERR_DOES_NOT_EXIST) - { - KIO::Job *job = KIO::file_copy(_localPasswordsUrl, _remotePasswordsUrl, -1, KIO::HideProgressInfo | KIO::Overwrite); - connect(job, SIGNAL(finished(KJob*)), this, SLOT(onPasswordsSyncFinished(KJob*))); - - emit syncStatus(Rekonq::Passwords, true, i18n("Remote passwords file does NOT exists. Exporting local copy...")); - _firstTimeSynced = true; - } - else - { - emit syncStatus(Rekonq::Passwords, false, job->errorString()); - } - } - else - { - KIO::Job *job = KIO::file_copy(_remotePasswordsUrl, _localPasswordsUrl, -1, KIO::HideProgressInfo | KIO::Overwrite); - connect(job, SIGNAL(finished(KJob*)), this, SLOT(onPasswordsSyncFinished(KJob*))); - - emit syncStatus(Rekonq::Passwords, true, i18n("Remote passwords file exists! Syncing local copy...")); - _firstTimeSynced = true; - } -} - - -void FTPSyncHandler::onPasswordsSyncFinished(KJob *job) -{ - if (job->error()) - { - emit syncStatus(Rekonq::Passwords, false, job->errorString()); - emit syncPasswordsFinished(false); - return; - } - - emit syncPasswordsFinished(true); -} diff --git a/src/sync/ftpsynchandler.h b/src/sync/ftpsynchandler.h deleted file mode 100644 index 2cb1227a..00000000 --- a/src/sync/ftpsynchandler.h +++ /dev/null @@ -1,82 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2011 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 FTP_SYNC_HANDLER_H -#define FTP_SYNC_HANDLER_H - - -// Local Includes -#include "synchandler.h" - -// KDE Includes -#include <KUrl> - -// Forward Declarations -class KJob; - - -class FTPSyncHandler : public SyncHandler -{ - Q_OBJECT - -public: - FTPSyncHandler(QObject *parent = 0); - - void syncHistory(); - void syncBookmarks(); - void syncPasswords(); - - void initialLoadAndCheck(); - -private Q_SLOTS: - void onBookmarksSyncFinished(KJob *); - void onBookmarksStatFinished(KJob *); - - void onHistorySyncFinished(KJob *); - void onHistoryStatFinished(KJob *); - - void onPasswordsSyncFinished(KJob *); - void onPasswordsStatFinished(KJob *); - -Q_SIGNALS: - void syncBookmarksFinished(bool); - void syncHistoryFinished(bool); - void syncPasswordsFinished(bool); - -private: - bool syncRelativeEnabled(bool); - - QUrl _remoteBookmarksUrl; - KUrl _localBookmarksUrl; - - QUrl _remoteHistoryUrl; - KUrl _localHistoryUrl; - - QUrl _remotePasswordsUrl; - KUrl _localPasswordsUrl; -}; - -#endif // FTP_SYNC_HANDLER_H diff --git a/src/sync/googlesynchandler.cpp b/src/sync/googlesynchandler.cpp deleted file mode 100644 index 90de34b4..00000000 --- a/src/sync/googlesynchandler.cpp +++ /dev/null @@ -1,437 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2012 by Siteshwar Vashisht <siteshwar at gmail dot com> -* Copyright (C) 2011 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 "googlesynchandler.h" -#include "googlesynchandler.moc" - -// Auto Includes -#include "rekonq.h" - -// Local Includes -#include "application.h" -#include "bookmarkmanager.h" - -// KDE Includes -#include <KStandardDirs> -#include <klocalizedstring.h> -#include <kbookmarkmanager.h> - -#include <QList> -#include <QWebPage> -#include <QWebFrame> -#include <QWebElement> -#include <QUrl> -#include <QWebSettings> -#include <QNetworkAccessManager> -#include <QNetworkReply> -#include <QDomDocument> - - -GoogleSyncHandler::GoogleSyncHandler(QObject *parent) - : SyncHandler(parent) - , _mode(RECEIVE_CHANGES) - , _doLogin(false) - , _isSyncing(false) - , _reply(0) - , _requestCount(0) -{ - kDebug() << "Creating Google Bookmarks handler..."; - _webPage.settings()->setAttribute(QWebSettings::AutoLoadImages, false); - _webPage.settings()->setAttribute(QWebSettings::PrivateBrowsingEnabled, true); - connect(&_webPage, SIGNAL(loadFinished(bool)), this, SLOT(loadFinished(bool))); -} - - -void GoogleSyncHandler::initialLoadAndCheck() -{ - if (!ReKonfig::syncEnabled()) - { - _firstTimeSynced = false; - return; - } - - // Bookmarks - if (ReKonfig::syncBookmarks()) - { - _mode = RECEIVE_CHANGES; - startLogin(); - } - - if (ReKonfig::syncHistory()) - { - emit syncStatus(Rekonq::History, false, i18n("Not supported!")); - } - - if (ReKonfig::syncHistory()) - { - emit syncStatus(Rekonq::Passwords, false, i18n("Not supported!")); - } -} - - -bool GoogleSyncHandler::syncRelativeEnabled(bool check) -{ - if (!ReKonfig::syncEnabled()) - return false; - - if (!_firstTimeSynced) - return false; - - return check; -} - - -// --------------------------------------------------------------------------------------- - - -void GoogleSyncHandler::syncHistory() -{ - kDebug() << "Syncing history not supported!"; - emit syncStatus(Rekonq::History, false, i18n("Syncing history not supported!")); - emit syncHistoryFinished(false); -} - - -void GoogleSyncHandler::syncPasswords() -{ - kDebug() << "Syncing passwords not supported!"; - emit syncStatus(Rekonq::Passwords, false, i18n("Syncing passwords not supported!")); - emit syncPasswordsFinished(false); -} - - -void GoogleSyncHandler::syncBookmarks() -{ - - if (_isSyncing) - { - kDebug() << "Sync already in progress!"; - return; - } - _mode = SEND_CHANGES; - startLogin(); -} - -void GoogleSyncHandler::startLogin() -{ - if (ReKonfig::syncUser().isEmpty() || ReKonfig::syncPass().isEmpty()) - { - kDebug() << "No username or password!"; - emit syncStatus(Rekonq::Bookmarks, false, i18n("No username or password!")); - emit syncBookmarksFinished(false); - return; - } - - _isSyncing = true; - - _doLogin = true; - - kDebug() << "Loading login page..."; - _webPage.mainFrame()->load(QUrl("http://bookmarks.google.com/")); -} - -//Loading a webpage finished, what action to take is decided based on url we have loaded. -void GoogleSyncHandler::loadFinished(bool ok) -{ - kDebug() << "Load Finished" << ok; - if (!ok) - { - kDebug() << "Error loading: " << _webPage.mainFrame()->url(); - emit syncStatus(Rekonq::Bookmarks, false, i18n("Error loading: " + _webPage.mainFrame()->url().toEncoded())); - - _isSyncing = false; - return; - } - - kDebug() << _webPage.mainFrame()->url(); - kDebug() << "Path : " << _webPage.mainFrame()->url().path(); - - QString path = _webPage.mainFrame()->url().path(); - - if (path == "/ServiceLogin" && _doLogin == true) - { - // Let's login to our Google account - QWebFrame *frame = _webPage.mainFrame(); - - QWebElement email = frame->findFirstElement("#Email"); - QWebElement passwd = frame->findFirstElement("#Passwd"); - QWebElement form = frame->findFirstElement("#gaia_loginform"); - - - - email.setAttribute("value", ReKonfig::syncUser()); - passwd.setAttribute("value", ReKonfig::syncPass()); - form.evaluateJavaScript("this.submit();"); - emit syncStatus(Rekonq::Bookmarks, true, i18n("Signing in...")); - - // Login only once - _doLogin = false; - } - else if (path == "/bookmarks/") - { - // We get to this page after successful login, let's fetch the bookmark list in Xml format. - QNetworkAccessManager *qnam = _webPage.networkAccessManager(); - QNetworkRequest request; - request.setUrl(QUrl("http://www.google.com/bookmarks/?output=xml")); - _reply = qnam->get(request); - emit syncStatus(Rekonq::Bookmarks, true, i18n("Fetching bookmarks from server...")); - connect(_reply, SIGNAL(finished()), this, SLOT(fetchingBookmarksFinished())); - } - else if (path == "/ServiceLoginAuth") - { - emit syncStatus(Rekonq::Bookmarks, false, i18n("Login failed!")); - _isSyncing = false; - } - else if (path == "/bookmarks/mark") - { - QWebFrame *frame = _webPage.mainFrame(); - - QString sigKey = frame->findFirstElement("input[name=sig]").attribute("value"); - kDebug() << "Signature Key is : " << sigKey; - - QNetworkAccessManager *qnam = _webPage.networkAccessManager(); - - if (!_bookmarksToDelete.isEmpty()) - { - - for (QSet<QString>::const_iterator iter = _bookmarksToDelete.constBegin(); iter != _bookmarksToDelete.end(); ++iter) - { - QNetworkRequest request; - request.setUrl(QUrl("https://www.google.com/bookmarks/mark?dlq=" + *iter + "&sig=" + sigKey)); - - kDebug() << "Delete url is : " << request.url(); - QNetworkReply *r = qnam->get(request); - connect(r, SIGNAL(finished()), this, SLOT(updateBookmarkFinished())); - ++_requestCount; - } - } - - if (!_bookmarksToAdd.isEmpty()) - { - emit syncStatus(Rekonq::Bookmarks, true, i18n("Adding bookmarks on server...")); - for (QSet<KUrl>::const_iterator iter = _bookmarksToAdd.constBegin(); iter != _bookmarksToAdd.end(); ++iter) - { - KBookmark bookmark = rApp->bookmarkManager()->bookmarkForUrl(*iter); - QByteArray postData; - postData.append("bkmk=" + QUrl::toPercentEncoding(bookmark.url().url().toUtf8())); - postData.append("&title=" + QUrl::toPercentEncoding(bookmark.text().toUtf8())); - postData.append("&annotation="); - postData.append("&labels="); - postData.append("&prev=/lookup"); - postData.append("&sig=" + sigKey.toUtf8()); - - QNetworkRequest request; - request.setUrl(QUrl("https://www.google.com/bookmarks/mark?sig=" + sigKey + "&btnA")); - request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded"); - kDebug() << "Url: " << request.url(); - kDebug() << "Post data is :" << postData; - QNetworkReply *r = qnam->post(request, postData); - connect(r, SIGNAL(finished()), this, SLOT(updateBookmarkFinished())); - ++_requestCount; - } - } - - _bookmarksToDelete.clear(); - _bookmarksToAdd.clear(); - - } - else if (path == "/Logout") - { - //Session finished - emit syncStatus(Rekonq::Bookmarks, true, i18n("Done!")); - emit syncBookmarksFinished(true); - _isSyncing = false; - } - else - { - kDebug() << "Unknown Response!"; - _isSyncing = false; - } - -} - -//We received bookmarks stored on server in xml format, now take the action based on which mode we are in. -void GoogleSyncHandler::fetchingBookmarksFinished() -{ - QString data = _reply->readAll(); - - QDomDocument doc("bookmarks"); - doc.setContent(data); - - QDomNodeList bookmarksOnServer = doc.elementsByTagName("bookmark"); - emit syncStatus(Rekonq::Bookmarks, true, i18n("Reading bookmarks...")); - - BookmarkManager *manager = rApp->bookmarkManager(); - KBookmarkGroup root = manager->rootGroup(); - - - if (_mode == RECEIVE_CHANGES) - { - - for (int i = 0; i < bookmarksOnServer.size(); ++i) - { - - QString title = getChildElement(bookmarksOnServer.at(i), "title"); - QString url = getChildElement(bookmarksOnServer.at(i), "url"); - - KBookmark bookmark = manager->bookmarkForUrl(KUrl(url)); - if (bookmark.isNull()) - { - //Add bookmark - kDebug() << "Add bookmark"; - emit syncStatus(Rekonq::Bookmarks, true, i18n("Adding bookmark ")); - root.addBookmark(title.isEmpty() ? url : title, KUrl(url)); - manager->manager()->emitChanged(root); - } - - } - - // After receiving changes, we compare local bookmarks with Google bookmarks and if some bookmarks exist locally but not on Google Bookmarks, we add them. - checkToAddGB(root, bookmarksOnServer); - - if (!_bookmarksToAdd.isEmpty()) - { - kDebug() << "Getting sigkey"; - _webPage.mainFrame()->load(QUrl("https://www.google.com/bookmarks/mark?op=add&hl=en")); - } - else - { - _webPage.mainFrame()->load(QUrl("https://accounts.google.com/Logout?hl=en")); - emit syncStatus(Rekonq::Bookmarks, true, i18n("Signing out...")); - } - } - else - { - checkToAddGB(root, bookmarksOnServer); - checkToDeleteGB(manager, bookmarksOnServer); - - if (!_bookmarksToAdd.isEmpty() || !_bookmarksToDelete.isEmpty()) - { - kDebug() << "Getting sigkey"; - _webPage.mainFrame()->load(QUrl("https://www.google.com/bookmarks/mark?op=add&hl=en")); - } - else - { - _webPage.mainFrame()->load(QUrl("https://accounts.google.com/Logout?hl=en")); - emit syncStatus(Rekonq::Bookmarks, true, i18n("Signing out...")); - } - } - - _reply->deleteLater(); -} - -//Get value of a child element of a dom node -QString GoogleSyncHandler::getChildElement(const QDomNode &node, QString name) -{ - QDomNodeList nodes = node.childNodes(); - - for (int j = 0; j < nodes.size(); ++j) - { - QDomElement element = nodes.at(j).toElement(); - - if (nodes.at(j).nodeName() == name) - { - //kDebug() << "Url : " << element.text(); - return element.text(); - } - } - return NULL; -} - -//This method checks whether we have any other bookmarks than the ones which exist on the server -void GoogleSyncHandler::checkToAddGB(const KBookmarkGroup &root, const QDomNodeList &bookmarksOnServer) -{ - KBookmark current = root.first(); - - while (!current.isNull()) - { - kDebug() << "Checking Url to add on Google Bookmarks: " << current.url(); - bool found = false; - for (int i = 0; i < bookmarksOnServer.count(); ++i) - { - if (current.isGroup()) - { - kDebug() << "Checking group" << current.text(); - checkToAddGB(current.toGroup(), bookmarksOnServer); - //skip adding a blank in _bookmarksToAdd - found = true; - break; - } - else if (current.url().url() == getChildElement(bookmarksOnServer.at(i), "url")) - { - found = true; - } - } - - if (!found) - { - kDebug() << "Adding to Google Bookmarks: " << current.url().url(); - _bookmarksToAdd.insert(current.url()); - } - current = root.next(current); - } -} - -//Check whether we need to delete bookmarks while sending changes to Google Bookmarks -void GoogleSyncHandler::checkToDeleteGB(BookmarkManager *manager, const QDomNodeList &bookmarksOnServer) -{ - - for (int i = 0; i < bookmarksOnServer.count(); ++i) - { - QString url = getChildElement(bookmarksOnServer.at(i), "url"); - - KBookmark result = manager->bookmarkForUrl(KUrl(url)); - if (result.isNull()) - { - kDebug() << "Deleting from Google Bookmarks: " << url; - _bookmarksToDelete.insert(getChildElement(bookmarksOnServer.at(i), "id")); - } - } - -} - - -//Added or deleted a bookmark on server, check whether we succeed here, and logout when all requests are done! -void GoogleSyncHandler::updateBookmarkFinished() -{ - --_requestCount; - QNetworkReply *reply = dynamic_cast<QNetworkReply*>(sender()); - if (reply->error() != QNetworkReply::NoError) - kDebug() << "Network Error while adding bookmark to server, code is: " << reply->error(); - else if (reply->attribute(QNetworkRequest::HttpStatusCodeAttribute) != 302) - kDebug() << "Unexpected reply : " << reply->readAll(); - else - kDebug() << "Success!"; - - if (_requestCount <= 0) - { - _webPage.mainFrame()->load(QUrl("https://accounts.google.com/Logout?hl=en")); - emit syncStatus(Rekonq::Bookmarks, true, i18n("Signing out...")); - } - -} diff --git a/src/sync/googlesynchandler.h b/src/sync/googlesynchandler.h deleted file mode 100644 index 459ce16e..00000000 --- a/src/sync/googlesynchandler.h +++ /dev/null @@ -1,86 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2012 by Siteshwar Vashisht <siteshwar at gmail dot com> -* Copyright (C) 2011 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 GOOGLE_SYNC_HANDLER_H -#define GOOGLE_SYNC_HANDLER_H - -#include <QWebPage> - -// Local Includes -#include "synchandler.h" - -// KDE Includes -#include <KUrl> -#include <KBookmarkGroup> - -// Forward Declarations -class QNetworkReply; -class BookmarkManager; - -class GoogleSyncHandler : public SyncHandler -{ - Q_OBJECT - -public: - GoogleSyncHandler(QObject *parent = 0); - - void syncHistory(); - void syncBookmarks(); - void syncPasswords(); - - void initialLoadAndCheck(); - -private Q_SLOTS: - void loadFinished(bool); - void fetchingBookmarksFinished(); - void updateBookmarkFinished(); - -Q_SIGNALS: - void syncBookmarksFinished(bool); - void syncHistoryFinished(bool); - void syncPasswordsFinished(bool); - -private: - bool syncRelativeEnabled(bool); - void startLogin(); - void checkToAddGB(const KBookmarkGroup &root, const QDomNodeList &); - void checkToDeleteGB(BookmarkManager *, const QDomNodeList &); - QString getChildElement(const QDomNode &node, QString name); - void checkRequestCount(); - - enum {SEND_CHANGES, RECEIVE_CHANGES} _mode; - QUrl _remoteBookmarksUrl; - bool _doLogin; - bool _isSyncing; - QWebPage _webPage; - QNetworkReply *_reply; - QSet<KUrl> _bookmarksToAdd; - QSet<QString> _bookmarksToDelete; - int _requestCount; -}; - -#endif // GOOGLE_SYNC_HANDLER_H diff --git a/src/sync/operasynchandler.cpp b/src/sync/operasynchandler.cpp deleted file mode 100644 index b32e315f..00000000 --- a/src/sync/operasynchandler.cpp +++ /dev/null @@ -1,911 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2012 by Siteshwar Vashisht <siteshwar at gmail dot com> -* Copyright (C) 2011 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 "operasynchandler.h" -#include "operasynchandler.moc" - -// Auto Includes -#include "rekonq.h" - -// Local Includes -#include "application.h" -#include "bookmarkmanager.h" - -// KDE Includes -#include <KStandardDirs> -#include <klocalizedstring.h> -#include <kbookmarkmanager.h> - - -#include <QList> -#include <QWebPage> -#include <QWebFrame> -#include <QWebElement> -#include <QUrl> -#include <QWebSettings> -#include <QNetworkAccessManager> -#include <QNetworkReply> -#include <QDomDocument> - - -OperaSyncHandler::OperaSyncHandler(QObject *parent) - : SyncHandler(parent) - , _mode(RECEIVE_CHANGES) - , _doLogin(false) - , _requestCount(0) - , _isSyncing(false) -{ - kDebug() << "Creating Opera Bookmarks handler..."; - _webPage.settings()->setAttribute(QWebSettings::AutoLoadImages, false); - _webPage.settings()->setAttribute(QWebSettings::PrivateBrowsingEnabled, true); - connect(&_webPage, SIGNAL(loadFinished(bool)), this, SLOT(loadFinished(bool))); - - _qoauth.setConsumerKey("zCuj9aUcehaHsfKtcHcg2YYLX42CkxDX"); - _qoauth.setConsumerSecret("xApuyHdDd9DSbTXLDRXuZzwKI2lOYSsl"); -} - - -void OperaSyncHandler::initialLoadAndCheck() -{ - if (!ReKonfig::syncEnabled()) - { - _firstTimeSynced = false; - return; - } - - // Bookmarks - if (ReKonfig::syncBookmarks()) - { - _mode = RECEIVE_CHANGES; - startLogin(); - } - - if (ReKonfig::syncHistory()) - { - emit syncStatus(Rekonq::History, false, i18n("Not supported!")); - } - - if (ReKonfig::syncHistory()) - { - emit syncStatus(Rekonq::Passwords, false, i18n("Not supported!")); - } -} - - -bool OperaSyncHandler::syncRelativeEnabled(bool check) -{ - if (!ReKonfig::syncEnabled()) - return false; - - if (!_firstTimeSynced) - return false; - - return check; -} - - -// --------------------------------------------------------------------------------------- - - -void OperaSyncHandler::syncHistory() -{ - kDebug() << "Syncing history not supported!"; - emit syncStatus(Rekonq::History, false, i18n("Syncing history not supported!")); - emit syncHistoryFinished(false); -} - - -void OperaSyncHandler::syncPasswords() -{ - kDebug() << "Syncing passwords not supported!"; - emit syncStatus(Rekonq::Passwords, false, i18n("Syncing passwords not supported!")); - emit syncPasswordsFinished(false); -} - - -void OperaSyncHandler::syncBookmarks() -{ - - if (_isSyncing) - { - kDebug() << "Sync already in progress!"; - return; - } - _mode = SEND_CHANGES; - startLogin(); -} - -void OperaSyncHandler::startLogin() -{ - if (ReKonfig::syncUser().isEmpty() || ReKonfig::syncPass().isEmpty()) - { - kDebug() << "No username or password!"; - emit syncStatus(Rekonq::Bookmarks, false, i18n("No username or password!")); - emit syncBookmarksFinished(false); - return; - } - - _isSyncing = true; - - _doLogin = true; - - _qoauth.setRequestTimeout(20000); - _qoauth.ignoreSslErrors(); - - if (_authToken.isEmpty() || _authTokenSecret.isEmpty()) - { - // If we have not yet logged into server, we need to fetch OAuth access token and secret from server. - kDebug() << "Loading login page..."; - QOAuth::ParamMap requestMap; - requestMap.insert("oauth_callback", "oob"); - - QOAuth::ParamMap requestParam = _qoauth.requestToken("https://auth.opera.com/service/oauth/request_token", QOAuth::POST, - QOAuth::HMAC_SHA1, requestMap); - - if (_qoauth.error() != QOAuth::NoError) - { - kDebug() << "Error occured while fetching request tokens. Error code is : " << _qoauth.error(); - emit syncStatus(Rekonq::Bookmarks, false, i18n("OAuth : Error fetching request token.")); - _isSyncing = false; - return; - } - - _requestToken = requestParam.value("oauth_token"); - _requestTokenSecret = requestParam.value("oauth_token_secret"); - - kDebug() << "OAuth Request Token : " << _requestToken; - kDebug() << "OAuth Request Token Secret : " << _requestTokenSecret; - kDebug() << QUrl("https://auth.opera.com/service/oauth/authorize?oauth_token=" + QString(_requestToken) + "&oauth_callback=oob"); - - QString u = QL1S("https://auth.opera.com/service/oauth/authorize?oauth_token=") + QString(_requestToken) + QL1S("&oauth_callback=oob"); - _webPage.mainFrame()->load(QUrl(u)); - } - else - { - // We already have OAuth access token and secret, let's fetch bookmarks from server directly. - getBookmarks(); - } -} - - -// Loading a webpage finished, what action to take is decided based on url we have loaded. -void OperaSyncHandler::loadFinished(bool ok) -{ - kDebug() << "Load Finished" << ok; - if (!ok) - { - kDebug() << "Error loading: " << _webPage.mainFrame()->url(); - emit syncStatus(Rekonq::Bookmarks, false, i18n("Error loading: " + _webPage.mainFrame()->url().toEncoded())); - - _isSyncing = false; - return; - } - - QString path = _webPage.mainFrame()->url().path(); - - if (path == "/service/oauth/authorize") - { - QWebFrame *mainFrame = _webPage.mainFrame(); - QString html = mainFrame->toHtml(); - - if (_doLogin == true && html.contains("login-form")) - { - kDebug() << "Login page"; - QWebElement form = mainFrame->findFirstElement("#login-form"); - if (form.isNull()) - { - kDebug() << "form is null"; - } - - QWebElement username = form.findFirst("#username"); - QWebElement password = form.findFirst("#password"); - QWebElement button = form.findFirst("input[name=\"grant\"]"); - - username.setAttribute("value", ReKonfig::syncUser()); - password.setAttribute("value", ReKonfig::syncPass()); - - button.evaluateJavaScript("this.click();"); - emit syncStatus(Rekonq::Bookmarks, true, i18n("Signing in...")); - - _doLogin = false; - } - else if (html.contains("verifier")) - { - QOAuth::ParamMap authParams; - QWebElement authkey = mainFrame->findFirstElement("#verifier"); - QByteArray verifier = authkey.toPlainText().toUtf8(); - - kDebug() << "OAuth verifier code is : " << verifier; - authParams.insert("oauth_verifier", verifier); - - emit syncStatus(Rekonq::Bookmarks, true, i18n("OAuth : Sending verification code.")); - QOAuth::ParamMap resultParam = _qoauth.accessToken("https://auth.opera.com/service/oauth/access_token", QOAuth::POST, - _requestToken, _requestTokenSecret, QOAuth::HMAC_SHA1, authParams); - - if (_qoauth.error() != QOAuth::NoError) - { - kDebug() << "Error occurred while fetching access tokens. Error code is : " << _qoauth.error(); - emit syncStatus(Rekonq::Bookmarks, false, i18n("OAuth : Error fetching access token.")); - _isSyncing = false; - return; - } - - _authToken = resultParam.value("oauth_token"); - _authTokenSecret = resultParam.value("oauth_token_secret"); - - kDebug() << "OAuth Token : " << _authToken; - kDebug() << "OAuth Token Secret : " << _authTokenSecret; - - _requestToken.clear(); - _requestTokenSecret.clear(); - - getBookmarks(); - } - else if (_doLogin == false) - { - //Login failed - emit syncStatus(Rekonq::Bookmarks, false, i18n("Login failed!")); - kDebug() << "Login failed!"; - _isSyncing = false; - } - else - { - kDebug() << "Unknown page : " << _webPage.mainFrame()->url(); - _isSyncing = false; - } - } -} - -//Fetch all the bookmarks from server -void OperaSyncHandler::getBookmarks() -{ - emit syncStatus(Rekonq::Bookmarks, true, i18n("Fetching bookmarks from server...")); - - QOAuth::ParamMap requestMap; - - requestMap.insert("api_output", "xml"); - kDebug() << "Auth Token : " << _authToken; - kDebug() << "Auth Token Secret : " << _authTokenSecret; - - QByteArray fetchBookmarksUrl = "https://link.api.opera.com/rest/bookmark/descendants/"; - QByteArray urlParams = _qoauth.createParametersString(fetchBookmarksUrl, QOAuth::GET, _authToken, _authTokenSecret, QOAuth::HMAC_SHA1, requestMap, QOAuth::ParseForInlineQuery); - - QNetworkRequest request; - - fetchBookmarksUrl.append(urlParams); - //kDebug() << urlstr; - KIO::TransferJob *job = KIO::get(KUrl(fetchBookmarksUrl), KIO::Reload, KIO::HideProgressInfo); - - connect(job, SIGNAL(result(KJob*)), this, SLOT(fetchBookmarksResultSlot(KJob*))); - connect(job, SIGNAL(data(KIO::Job*, QByteArray)), this, SLOT(fetchBookmarksDataSlot(KIO::Job*, QByteArray))); -} - -void OperaSyncHandler::fetchBookmarksDataSlot(KIO::Job* job, QByteArray data) -{ - Q_UNUSED(job); - - _xmlData += data; -} - -//We have received all the bookmarks which exist on server, now we need to compare them with local bookmarks. -void OperaSyncHandler::fetchBookmarksResultSlot(KJob* job) -{ - if (job->error() != 0) - { - //Error could be because our OAuth token expired, let's reset it. - _authToken = ""; - _authTokenSecret = ""; - - _isSyncing = false; - - //Reset _xmlData for next request - _xmlData = ""; - kDebug() << "Some error!" << job->error(); - return; - } - -// kDebug() << _xmlData; - - QDomDocument doc("bookmarks"); - doc.setContent(_xmlData); - QDomNodeList responseList = doc.elementsByTagName("response"); - - KBookmarkGroup root = rApp->bookmarkManager()->rootGroup(); - - if (_mode == RECEIVE_CHANGES) - { - handleResponse(responseList, root); - emit syncStatus(Rekonq::Bookmarks, true, i18n("Done!")); -// _isSyncing = false; - _mode = SEND_CHANGES; - } - - - //After receiving changes from server, send changes to server. - handleResponse(responseList, root); - - QDomElement item = responseList.at(0).toElement(); - KBookmark current = root.first(); - - while (!current.isNull()) - { - if (current.isGroup()) - { - QString groupName = current.fullText(); - QDomElement child = findOperaFolder(item, groupName); - - if (child.isNull()) - { - //Add Opera group here - kDebug() << "Add group " << groupName; - KJob *job = addBookmarkFolderOnServer(current.fullText()); - _jobToGroupMap.insert(job, current.toGroup()); - } - else - { - QDomElement grandChild = getChildElement(child, "children"); - - QString id = getChildString(child, "id"); - - kDebug() << grandChild.tagName() << id; - - if (grandChild.isNull()) - { - kDebug() << "Grand child is null"; - handleLocalGroup(current.toGroup(), grandChild, id); - } - else - { - handleLocalGroup(current.toGroup(), grandChild, id); - } - } - } - - else - { - KUrl url = current.url(); - - QDomElement child = findOperaBookmark(item, url); - - if (child.isNull()) - { - //Add bookmark on server - kDebug() << "Add bookmark :" << url; - addBookmarkOnServer(current.fullText(), current.url().url()); - } - /* else - { - kDebug() << "Bookmark exists :" << url; - } - */ - } - - current = root.next(current); - } - - decreaseRequestCount(); - - _xmlData = ""; -} - -void OperaSyncHandler::createBookmarkDataSlot(KIO::Job* job, QByteArray data) -{ - Q_UNUSED(job); - Q_UNUSED(data); - - // kDebug() << data; - // _xmlData += data; -} - - -// Check whether bookmark creation was successful on server -void OperaSyncHandler::createBookmarkResultSlot(KJob* job) -{ - decreaseRequestCount(); - - if (job->error() != 0) - { - kDebug() << "Some error!" << job->error(); - return; - } -} - - -void OperaSyncHandler::createBookmarkFolderDataSlot(KIO::Job* job, QByteArray data) -{ - QByteArray &value = _jobToResponseMap[job]; - value.append(data); -} - - -// If bookmark folder (it's empty) was creted successfully on server, -// we need to add all it's children (which exists in local bookmarks) on server. -void OperaSyncHandler::createBookmarkFolderResultSlot(KJob* job) -{ - QByteArray value = _jobToResponseMap[job]; - KBookmarkGroup root = _jobToGroupMap[job]; - - _jobToResponseMap.remove(job); - _jobToGroupMap.remove(job); - - if (job->error() != 0) - { - kDebug() << "Error occured while creating bookmark folder on server. Error code : " << job->error(); - decreaseRequestCount(); - return; - } - - QDomDocument doc("new bookmark"); - doc.setContent(value); - QDomNodeList responseList = doc.elementsByTagName("response"); - - if (responseList.size() > 0) - { - QDomElement item = responseList.at(0).firstChildElement(); - - QString parentId = getIdFromResource(item); - - handleLocalGroup(root, item, parentId); - - } - - decreaseRequestCount(); -} - - -// Check whether we deleted a resource on server successfully. -void OperaSyncHandler::deleteResourceResultSlot(KJob* job) -{ - decreaseRequestCount(); - - if (job->error() != 160) - { - kDebug() << "Error occurred while deleting resource on server. Error code : " << job->error(); - return; - } -} - - -// This function is here just for debugging purpose. We don't need it's output. -void OperaSyncHandler::deleteResourceDataSlot(KIO::Job* job, QByteArray data) -{ - Q_UNUSED(job); - kDebug() << data; -} - - -// Checks whether a bookmark exists locally or not, and either add it locally or delete from server -void OperaSyncHandler::handleBookmark(const QDomElement &item, KBookmarkGroup root) -{ - QString url = getUrlFromResourceProperties(item); - QString title = getTitleFromResourceProperties(item); - QString id = getChildString(item, "id"); - - KBookmark bookmark = findLocalBookmark(root, KUrl(url)); - - if (bookmark.isNull()) - { - if (_mode == RECEIVE_CHANGES) - { - root.addBookmark(title, KUrl(url)); - rApp->bookmarkManager()->manager()->emitChanged(root); - } - else - { - //Delete bookmark from server - kDebug() << "Deleting bookmark from server : " << title; - deleteResourceOnServer(id); - } - } - -} - -//Traverse through all the children of a bookmark folder -void OperaSyncHandler::handleBookmarkFolder(const QDomElement &item, KBookmarkGroup &root) -{ - QDomNode child = item.firstChild(); - - while (!child.isNull()) - { - QDomNode resource = child.firstChild(); - - while (!resource.isNull()) - { - handleResource(resource, root); - resource = resource.nextSibling(); - } - child = child.nextSibling(); - } -} - -//Handle resource tag of xml replied from server -void OperaSyncHandler::handleResource(const QDomNode &item, KBookmarkGroup &root) -{ - QDomElement element = item.toElement(); - - QString itemType = getChildString(item, "item_type"); - if (itemType == "bookmark") - { - handleBookmark(element, root); - } - else if (itemType == "bookmark_folder") - { - QString title = getTitleFromResourceProperties(item.toElement()); - QString id = getChildString(item.toElement(), "id"); - if (title == "Trash") return; - - KBookmarkGroup childGroup = findLocalGroup(root, title); - - if (_mode == RECEIVE_CHANGES) - { - if (childGroup.isNull()) - { - childGroup = root.createNewFolder(title); - rApp->bookmarkManager()->manager()->emitChanged(root); - } - - handleBookmarkFolder(element, childGroup); - } - else - { - if (childGroup.isNull()) - { - //Delete bookmark folder on server - kDebug() << "Deleting bookmark folder from server : " << title; - deleteResourceOnServer(id); - } - else - { - handleBookmarkFolder(element, childGroup); - } - } - } -} - -//Start traversing the response received from server from <response> tag -void OperaSyncHandler::handleResponse(const QDomNodeList &responseList, KBookmarkGroup &root) -{ - if (responseList.size() > 0) - { - QDomNode item = responseList.at(0).firstChild(); - - do - { - handleResource(item, root); - item = item.nextSibling(); - } - while (!item.isNull()); - } -} - -//This method checks whether we need to add a bookmark or bookmark folder on server which exists only locally -void OperaSyncHandler::handleLocalGroup(const KBookmarkGroup &root, const QDomElement &item, QString parentId) -{ - KBookmark current = root.first(); - - while (!current.isNull()) - { - if (current.isGroup()) - { - QString groupName = current.fullText(); - QDomElement child = findOperaFolder(item, groupName); - - if (child.isNull()) - { - //Add Opera group here - KJob *job = addBookmarkFolderOnServer(current.fullText(), parentId); - _jobToGroupMap.insert(job, current.toGroup()); - } - else - { - QDomElement grandChild = getChildElement(child, "children"); - - QString id = getChildString(child, "id"); - - // FIXME: What about here??? - if (grandChild.isNull()) - { - handleLocalGroup(current.toGroup(), grandChild, id); - } - else - { - handleLocalGroup(current.toGroup(), grandChild, id); - } - } - } - else - { - KUrl url = current.url(); - - QDomElement child = findOperaBookmark(item, url); - - if (child.isNull()) - { - //Add bookmark on server - - addBookmarkOnServer(current.fullText(), current.url().url(), parentId); - } - /* else - { - kDebug() << "Bookmark exists :" << url; - } - */ - } - - current = root.next(current); - } -} - -//Add a bookmark on server -void OperaSyncHandler::addBookmarkOnServer(QString title, QString url, QString parent) -{ - QOAuth::ParamMap requestMap; - requestMap.insert("api_output", "xml"); - requestMap.insert("api_method", "create"); - requestMap.insert("item_type", "bookmark"); - requestMap.insert("title", QUrl::toPercentEncoding(title.toUtf8())); - requestMap.insert("uri", QUrl::toPercentEncoding(url.toUtf8())); - - QByteArray requestUrl = "https://link.api.opera.com/rest/bookmark/"; - - if (!parent.isNull()) - { - requestUrl.append(parent.toUtf8()); - } - - QByteArray postData = _qoauth.createParametersString(requestUrl, QOAuth::POST, _authToken, _authTokenSecret, QOAuth::HMAC_SHA1, requestMap, QOAuth::ParseForRequestContent); - - KIO::TransferJob *job = KIO::http_post(KUrl(requestUrl), postData, KIO::HideProgressInfo); - job->addMetaData("Content-Type", "application/x-www-form-urlencoded"); - - connect(job, SIGNAL(result(KJob*)), this, SLOT(createBookmarkResultSlot(KJob*))); - connect(job, SIGNAL(data(KIO::Job*, QByteArray)), this, SLOT(createBookmarkDataSlot(KIO::Job*, QByteArray))); - - ++_requestCount; -} - -//Add a bookmark folder on server -KJob *OperaSyncHandler::addBookmarkFolderOnServer(QString title, QString parent) -{ - QOAuth::ParamMap requestMap; - requestMap.insert("api_output", "xml"); - requestMap.insert("api_method", "create"); - requestMap.insert("item_type", "bookmark_folder"); - requestMap.insert("title", QUrl::toPercentEncoding(title.toUtf8())); - - QByteArray requestUrl = "https://link.api.opera.com/rest/bookmark/"; - if (!parent.isNull()) - { - requestUrl.append(parent.toUtf8()); - } - - QByteArray postData = _qoauth.createParametersString(requestUrl, QOAuth::POST, _authToken, _authTokenSecret, QOAuth::HMAC_SHA1, requestMap, QOAuth::ParseForRequestContent); - - KIO::TransferJob *job = KIO::http_post(KUrl(requestUrl), postData, KIO::HideProgressInfo); - job->addMetaData("Content-Type", "application/x-www-form-urlencoded"); - _jobToResponseMap.insert(job, ""); - - connect(job, SIGNAL(result(KJob*)), this, SLOT(createBookmarkFolderResultSlot(KJob*))); - connect(job, SIGNAL(data(KIO::Job*, QByteArray)), this, SLOT(createBookmarkFolderDataSlot(KIO::Job*, QByteArray))); - - ++_requestCount; - return job; -} - -//Resource could be either a bookmark folder or bookmark. -void OperaSyncHandler::deleteResourceOnServer(QString id) -{ - QOAuth::ParamMap requestMap; - requestMap.insert("api_method", "delete"); - - QByteArray requestUrl = "https://link.api.opera.com/rest/bookmark/"; - - if (id.isEmpty()) - { - kDebug() << "Id is empty!"; - return; - } - - requestUrl.append(id.toUtf8()); - QByteArray postData = _qoauth.createParametersString(requestUrl, QOAuth::POST, _authToken, _authTokenSecret, QOAuth::HMAC_SHA1, requestMap, QOAuth::ParseForRequestContent); - - kDebug() << "Deleting Resource : " << id; - - KIO::TransferJob *job = KIO::http_post(KUrl(requestUrl), postData, KIO::HideProgressInfo); - job->addMetaData("Content-Type", "application/x-www-form-urlencoded"); - - connect(job, SIGNAL(result(KJob*)), this, SLOT(deleteResourceResultSlot(KJob*))); - connect(job, SIGNAL(data(KIO::Job*, QByteArray)), this, SLOT(deleteResourceDataSlot(KIO::Job*, QByteArray))); - - ++_requestCount; -} - -//Get url for a bookmark from xml element of Opera bookmarks -QString OperaSyncHandler::getUrlFromResourceProperties(const QDomElement &item) -{ - if (item.tagName() != "resource") return QString(); - QDomNodeList propertiesList = item.elementsByTagName("properties"); - - if (propertiesList.size() > 0) - { - QDomElement properties = propertiesList.at(0).toElement(); - QDomNodeList uriList = properties.elementsByTagName("uri"); - if (uriList.size() > 0) - return uriList.at(0).toElement().text(); - } - - return QString(); -} - -//Get title for a bookmark or folder from xml element of Opera bookmarks -QString OperaSyncHandler::getTitleFromResourceProperties(const QDomElement &item) -{ - if (item.tagName() != "resource") return QString(); - - QDomNodeList propertiesList = item.elementsByTagName("properties"); - - if (propertiesList.size() > 0) - { - QDomElement properties = propertiesList.at(0).toElement(); - QDomNodeList titleList = properties.elementsByTagName("title"); - if (titleList.size() > 0) - return titleList.at(0).toElement().text(); - } - - return QString(); -} - -//Get id for a bookmark or folder from xml element of Opera bookmarks -QString OperaSyncHandler::getIdFromResource(const QDomElement &item) -{ - if (item.tagName() != "resource") return QString(); - - QDomNodeList idList = item.elementsByTagName("id"); - - if (idList.size() > 0) - { - return idList.at(0).toElement().text(); - } - - return QString(); -} - -//Get text of a child element of a dom node -QString OperaSyncHandler::getChildString(const QDomNode &node, const QString &name) -{ - QDomNodeList nodes = node.childNodes(); - - for (int j = 0; j < nodes.size(); ++j) - { - QDomElement element = nodes.at(j).toElement(); - - if (nodes.at(j).nodeName() == name) - { - return element.text(); - } - } - return NULL; -} - -//Get value of a child element of a dom node as an element -QDomElement OperaSyncHandler::getChildElement(const QDomNode &node, const QString &name) -{ - QDomNodeList nodes = node.childNodes(); - - for (int j = 0; j < nodes.size(); ++j) - { - QDomElement element = nodes.at(j).toElement(); - - if (nodes.at(j).nodeName() == name) - { - return element; - } - } - return QDomElement(); -} - -//Find a bookmark group in a specifiec bookmark group of client -KBookmarkGroup OperaSyncHandler::findLocalGroup(const KBookmarkGroup &root, const QString &name) -{ - KBookmark child = root.first(); - - while (!child.isNull()) - { - if (child.isGroup() && name == child.fullText()) - { - break; - } - child = root.next(child); - } - - return child.toGroup(); -} - -//Find a bookmark in a specifiec bookmark group of client -KBookmark OperaSyncHandler::findLocalBookmark(const KBookmarkGroup &root, const KUrl &url) -{ - KBookmark child = root.first(); - - while (!child.isNull()) - { - if (!child.isGroup() && url == child.url()) - { - break; - } - child = root.next(child); - } - - return child; -} - -//Find bookmark folder in xml returned by server -QDomElement OperaSyncHandler::findOperaFolder(const QDomElement &root, const QString &name) -{ - QDomElement current = root.firstChild().toElement(); - - while (!current.isNull()) - { - if ((getChildString(current, "item_type") == "bookmark_folder") && getTitleFromResourceProperties(current) == name) - break; - current = current.nextSibling().toElement(); - } - - return current; -} - -//Find bookmark in xml returned by server -QDomElement OperaSyncHandler::findOperaBookmark(const QDomElement &root, const KUrl &url) -{ - QDomElement current = root.firstChild().toElement(); - - while (!current.isNull()) - { - if ((getChildString(current, "item_type") == "bookmark") && KUrl(getUrlFromResourceProperties(current)) == url) - break; - current = current.nextSibling().toElement(); - } - - return current; -} - -/*While sending changes to server, we need to keep track of requests which have been sent to server -to check whether syncing is finished. -*/ -void OperaSyncHandler::decreaseRequestCount() -{ - if (_requestCount > 0) - { - --_requestCount; - } - - if (_requestCount <= 0) - { - emit syncStatus(Rekonq::Bookmarks, true, i18n("Done!")); - _isSyncing = false; - } -} diff --git a/src/sync/operasynchandler.h b/src/sync/operasynchandler.h deleted file mode 100644 index 794164c1..00000000 --- a/src/sync/operasynchandler.h +++ /dev/null @@ -1,134 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2012 by Siteshwar Vashisht <siteshwar at gmail dot com> -* Copyright (C) 2011 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 OPERA_SYNC_HANDLER_H -#define OPERA_SYNC_HANDLER_H - -#include <QWebPage> - -// Local Includes -#include "synchandler.h" - -// KDE Includes -#include <KUrl> -#include <KBookmarkGroup> -#include <KIO/Job> - -// Qt Includes -#include <QtOAuth/QtOAuth> - -// Forward Declarations -class QNetworkReply; -class BookmarkManager; -class QWebView; - - -class OperaSyncHandler : public SyncHandler -{ - Q_OBJECT - -public: - OperaSyncHandler(QObject *parent = 0); - - void syncHistory(); - void syncBookmarks(); - void syncPasswords(); - - void initialLoadAndCheck(); - -private Q_SLOTS: - void loadFinished(bool); - - void fetchBookmarksDataSlot(KIO::Job*, QByteArray); - void fetchBookmarksResultSlot(KJob*); - - void createBookmarkDataSlot(KIO::Job*, QByteArray); - void createBookmarkResultSlot(KJob*); - - void createBookmarkFolderDataSlot(KIO::Job*, QByteArray); - void createBookmarkFolderResultSlot(KJob*); - - void deleteResourceDataSlot(KIO::Job*, QByteArray); - void deleteResourceResultSlot(KJob*); - -Q_SIGNALS: - void syncBookmarksFinished(bool); - void syncHistoryFinished(bool); - void syncPasswordsFinished(bool); - -private: - enum {SEND_CHANGES, RECEIVE_CHANGES} _mode; - - bool syncRelativeEnabled(bool); - void startLogin(); - void getBookmarks(); - - void handleBookmark(const QDomElement &item, KBookmarkGroup root); - void handleBookmarkFolder(const QDomElement &item, KBookmarkGroup &root); - void handleResource(const QDomNode &item, KBookmarkGroup &root); - void handleResponse(const QDomNodeList &responseList, KBookmarkGroup &root); - - void handleLocalGroup(const KBookmarkGroup &root, const QDomElement &item, QString parentId); - - void addBookmarkOnServer(QString, QString, QString parent = QString()); - KJob *addBookmarkFolderOnServer(QString, QString parent = QString()); - void deleteResourceOnServer(QString id); - - static QString getUrlFromResourceProperties(const QDomElement &item); - static QString getTitleFromResourceProperties(const QDomElement &item); - static QString getIdFromResource(const QDomElement &item); - static QString getChildString(const QDomNode &node, const QString &name); - static QDomElement getChildElement(const QDomNode &node, const QString &name); - - static KBookmarkGroup findLocalGroup(const KBookmarkGroup &root, const QString &name); - static KBookmark findLocalBookmark(const KBookmarkGroup &root, const KUrl &url); - - static QDomElement findOperaFolder(const QDomElement &root, const QString &name); - static QDomElement findOperaBookmark(const QDomElement &root, const KUrl &url); - - void decreaseRequestCount(); - - - bool _doLogin; - - QWebPage _webPage; - - int _requestCount; - - bool _isSyncing; - - QOAuth::Interface _qoauth; - - QByteArray _requestToken, _requestTokenSecret; - QByteArray _authToken, _authTokenSecret; - - QByteArray _xmlData; - QMap<KJob*, QByteArray> _jobToResponseMap; - QMap<KJob*, KBookmarkGroup> _jobToGroupMap; -}; - -#endif // OPERA_SYNC_HANDLER_H diff --git a/src/sync/sync_check.ui b/src/sync/sync_check.ui deleted file mode 100644 index 158e1e84..00000000 --- a/src/sync/sync_check.ui +++ /dev/null @@ -1,149 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<ui version="4.0"> - <class>SyncCheck</class> - <widget class="QWidget" name="SyncCheck"> - <property name="geometry"> - <rect> - <x>0</x> - <y>0</y> - <width>645</width> - <height>464</height> - </rect> - </property> - <layout class="QVBoxLayout" name="verticalLayout"> - <item> - <widget class="QGroupBox" name="groupBox_2"> - <property name="title"> - <string>data</string> - </property> - <layout class="QGridLayout" name="gridLayout_2"> - <item row="0" column="0"> - <widget class="QLabel" name="label_4"> - <property name="text"> - <string>sync handler</string> - </property> - </widget> - </item> - <item row="0" column="1"> - <widget class="QLabel" name="syncLabel"> - <property name="text"> - <string>TextLabel</string> - </property> - </widget> - </item> - <item row="1" column="0"> - <widget class="QLabel" name="label_5"> - <property name="text"> - <string>Host</string> - </property> - </widget> - </item> - <item row="1" column="1"> - <widget class="QLabel" name="hostLabel"> - <property name="text"> - <string>TextLabel</string> - </property> - </widget> - </item> - </layout> - </widget> - </item> - <item> - <widget class="QGroupBox" name="groupBox"> - <property name="title"> - <string>check</string> - </property> - <layout class="QGridLayout" name="gridLayout"> - <item row="0" column="0"> - <widget class="QLabel" name="label"> - <property name="text"> - <string>Bookmarks</string> - </property> - </widget> - </item> - <item row="0" column="2"> - <widget class="QLabel" name="bkMsgLabel"> - <property name="acceptDrops"> - <bool>true</bool> - </property> - <property name="text"> - <string/> - </property> - </widget> - </item> - <item row="1" column="0"> - <widget class="QLabel" name="label_2"> - <property name="text"> - <string>History</string> - </property> - </widget> - </item> - <item row="1" column="1"> - <widget class="QLabel" name="hsLabel"> - <property name="text"> - <string/> - </property> - </widget> - </item> - <item row="1" column="2"> - <widget class="QLabel" name="hsMsgLabel"> - <property name="acceptDrops"> - <bool>true</bool> - </property> - <property name="text"> - <string/> - </property> - </widget> - </item> - <item row="2" column="0"> - <widget class="QLabel" name="label_3"> - <property name="text"> - <string>Passwords</string> - </property> - </widget> - </item> - <item row="2" column="1"> - <widget class="QLabel" name="psLabel"> - <property name="text"> - <string/> - </property> - </widget> - </item> - <item row="2" column="2"> - <widget class="QLabel" name="psMsgLabel"> - <property name="acceptDrops"> - <bool>true</bool> - </property> - <property name="text"> - <string/> - </property> - </widget> - </item> - <item row="0" column="1"> - <widget class="QLabel" name="bkLabel"> - <property name="text"> - <string/> - </property> - </widget> - </item> - </layout> - </widget> - </item> - <item> - <spacer name="verticalSpacer"> - <property name="orientation"> - <enum>Qt::Vertical</enum> - </property> - <property name="sizeHint" stdset="0"> - <size> - <width>20</width> - <height>154</height> - </size> - </property> - </spacer> - </item> - </layout> - </widget> - <resources/> - <connections/> -</ui> diff --git a/src/sync/sync_data.ui b/src/sync/sync_data.ui deleted file mode 100644 index 73058357..00000000 --- a/src/sync/sync_data.ui +++ /dev/null @@ -1,76 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<ui version="4.0"> - <class>SyncData</class> - <widget class="QWidget" name="SyncData"> - <property name="geometry"> - <rect> - <x>0</x> - <y>0</y> - <width>378</width> - <height>369</height> - </rect> - </property> - <property name="minimumSize"> - <size> - <width>300</width> - <height>0</height> - </size> - </property> - <layout class="QVBoxLayout" name="verticalLayout_2"> - <item> - <widget class="QGroupBox" name="syncGroupBox"> - <property name="title"> - <string>sync</string> - </property> - <layout class="QVBoxLayout" name="verticalLayout"> - <item> - <widget class="QCheckBox" name="kcfg_syncBookmarks"> - <property name="enabled"> - <bool>false</bool> - </property> - <property name="text"> - <string>bookmarks</string> - </property> - </widget> - </item> - <item> - <widget class="QCheckBox" name="kcfg_syncHistory"> - <property name="enabled"> - <bool>false</bool> - </property> - <property name="text"> - <string>history</string> - </property> - </widget> - </item> - <item> - <widget class="QCheckBox" name="kcfg_syncPasswords"> - <property name="enabled"> - <bool>false</bool> - </property> - <property name="text"> - <string>passwords</string> - </property> - </widget> - </item> - </layout> - </widget> - </item> - <item> - <spacer name="verticalSpacer"> - <property name="orientation"> - <enum>Qt::Vertical</enum> - </property> - <property name="sizeHint" stdset="0"> - <size> - <width>20</width> - <height>50</height> - </size> - </property> - </spacer> - </item> - </layout> - </widget> - <resources/> - <connections/> -</ui> diff --git a/src/sync/sync_ftp_settings.ui b/src/sync/sync_ftp_settings.ui deleted file mode 100644 index fc29bd4e..00000000 --- a/src/sync/sync_ftp_settings.ui +++ /dev/null @@ -1,102 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<ui version="4.0"> - <class>SyncFTPSettings</class> - <widget class="QWidget" name="SyncFTPSettings"> - <property name="geometry"> - <rect> - <x>0</x> - <y>0</y> - <width>400</width> - <height>300</height> - </rect> - </property> - <layout class="QVBoxLayout" name="verticalLayout"> - <item> - <widget class="QGroupBox" name="ftpGroupBox"> - <property name="title"> - <string>remote FTP host settings</string> - </property> - <layout class="QFormLayout" name="formLayout"> - <item row="0" column="0"> - <widget class="QLabel" name="label"> - <property name="text"> - <string>Server:</string> - </property> - </widget> - </item> - <item row="0" column="1"> - <widget class="KLineEdit" name="kcfg_syncHost"/> - </item> - <item row="1" column="0"> - <widget class="QLabel" name="label_2"> - <property name="text"> - <string>Username:</string> - </property> - </widget> - </item> - <item row="1" column="1"> - <widget class="KLineEdit" name="kcfg_syncUser"/> - </item> - <item row="2" column="0"> - <widget class="QLabel" name="label_3"> - <property name="text"> - <string>Password:</string> - </property> - </widget> - </item> - <item row="2" column="1"> - <widget class="KLineEdit" name="kcfg_syncPass"/> - </item> - <item row="3" column="1"> - <widget class="KLineEdit" name="kcfg_syncPath"/> - </item> - <item row="3" column="0"> - <widget class="QLabel" name="label_4"> - <property name="text"> - <string>Path:</string> - </property> - </widget> - </item> - <item row="4" column="1"> - <widget class="KIntNumInput" name="kcfg_syncPort"/> - </item> - <item row="4" column="0"> - <widget class="QLabel" name="label_5"> - <property name="text"> - <string>Port:</string> - </property> - </widget> - </item> - </layout> - </widget> - </item> - <item> - <spacer name="verticalSpacer"> - <property name="orientation"> - <enum>Qt::Vertical</enum> - </property> - <property name="sizeHint" stdset="0"> - <size> - <width>20</width> - <height>124</height> - </size> - </property> - </spacer> - </item> - </layout> - </widget> - <customwidgets> - <customwidget> - <class>KLineEdit</class> - <extends>QLineEdit</extends> - <header>klineedit.h</header> - </customwidget> - <customwidget> - <class>KIntNumInput</class> - <extends>QWidget</extends> - <header>knuminput.h</header> - </customwidget> - </customwidgets> - <resources/> - <connections/> -</ui> diff --git a/src/sync/sync_google_settings.ui b/src/sync/sync_google_settings.ui deleted file mode 100644 index d23d083b..00000000 --- a/src/sync/sync_google_settings.ui +++ /dev/null @@ -1,83 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<ui version="4.0"> - <class>SyncGoogleSettings</class> - <widget class="QWidget" name="SyncGoogleSettings"> - <property name="geometry"> - <rect> - <x>0</x> - <y>0</y> - <width>400</width> - <height>300</height> - </rect> - </property> - <layout class="QVBoxLayout" name="verticalLayout"> - <item> - <widget class="QGroupBox" name="googleGroupBox"> - <property name="title"> - <string>Google Account Settings</string> - </property> - <layout class="QFormLayout" name="formLayout"> - <property name="fieldGrowthPolicy"> - <enum>QFormLayout::ExpandingFieldsGrow</enum> - </property> - <item row="0" column="0"> - <widget class="QLabel" name="label_2"> - <property name="text"> - <string>Username:</string> - </property> - </widget> - </item> - <item row="0" column="1"> - <widget class="KLineEdit" name="kcfg_syncUser"/> - </item> - <item row="1" column="0"> - <widget class="QLabel" name="label_3"> - <property name="text"> - <string>Password:</string> - </property> - </widget> - </item> - <item row="1" column="1"> - <widget class="KLineEdit" name="kcfg_syncPass"/> - </item> - </layout> - </widget> - </item> - <item> - <widget class="QLabel" name="infoLabel"> - <property name="styleSheet"> - <string notr="true">QLabel { color : red; }</string> - </property> - <property name="text"> - <string>Only bookmarks will be synchronized.</string> - </property> - <property name="alignment"> - <set>Qt::AlignCenter</set> - </property> - </widget> - </item> - <item> - <spacer name="verticalSpacer"> - <property name="orientation"> - <enum>Qt::Vertical</enum> - </property> - <property name="sizeHint" stdset="0"> - <size> - <width>20</width> - <height>124</height> - </size> - </property> - </spacer> - </item> - </layout> - </widget> - <customwidgets> - <customwidget> - <class>KLineEdit</class> - <extends>QLineEdit</extends> - <header>klineedit.h</header> - </customwidget> - </customwidgets> - <resources/> - <connections/> -</ui> diff --git a/src/sync/sync_host_type.ui b/src/sync/sync_host_type.ui deleted file mode 100644 index 30656981..00000000 --- a/src/sync/sync_host_type.ui +++ /dev/null @@ -1,62 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<ui version="4.0"> - <class>SyncHostType</class> - <widget class="QWidget" name="SyncHostType"> - <property name="geometry"> - <rect> - <x>0</x> - <y>0</y> - <width>400</width> - <height>300</height> - </rect> - </property> - <layout class="QVBoxLayout" name="verticalLayout_2"> - <item> - <widget class="QCheckBox" name="kcfg_syncEnabled"> - <property name="text"> - <string>Activate sync</string> - </property> - </widget> - </item> - <item> - <widget class="QGroupBox" name="hostGroupBox"> - <property name="title"> - <string>sync host type</string> - </property> - <layout class="QVBoxLayout" name="verticalLayout"> - <item> - <widget class="QRadioButton" name="ftpRadioButton"> - <property name="text"> - <string>FTP</string> - </property> - </widget> - </item> - <item> - <widget class="QRadioButton" name="googleRadioButton"> - <property name="text"> - <string>Google Sync</string> - </property> - </widget> - </item> - <item> - <widget class="QRadioButton" name="operaRadioButton"> - <property name="text"> - <string>Opera Sync</string> - </property> - </widget> - </item> - <item> - <widget class="QRadioButton" name="nullRadioButton"> - <property name="text"> - <string>/dev/null</string> - </property> - </widget> - </item> - </layout> - </widget> - </item> - </layout> - </widget> - <resources/> - <connections/> -</ui> diff --git a/src/sync/sync_opera_settings.ui b/src/sync/sync_opera_settings.ui deleted file mode 100644 index 86da1cb3..00000000 --- a/src/sync/sync_opera_settings.ui +++ /dev/null @@ -1,83 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<ui version="4.0"> - <class>SyncOperaSettings</class> - <widget class="QWidget" name="SyncOperaSettings"> - <property name="geometry"> - <rect> - <x>0</x> - <y>0</y> - <width>400</width> - <height>300</height> - </rect> - </property> - <layout class="QVBoxLayout" name="verticalLayout"> - <item> - <widget class="QGroupBox" name="operaGroupBox"> - <property name="title"> - <string>Opera Account Settings</string> - </property> - <layout class="QFormLayout" name="formLayout"> - <property name="fieldGrowthPolicy"> - <enum>QFormLayout::ExpandingFieldsGrow</enum> - </property> - <item row="0" column="0"> - <widget class="QLabel" name="label_2"> - <property name="text"> - <string>Username:</string> - </property> - </widget> - </item> - <item row="0" column="1"> - <widget class="KLineEdit" name="kcfg_syncUser"/> - </item> - <item row="1" column="0"> - <widget class="QLabel" name="label_3"> - <property name="text"> - <string>Password:</string> - </property> - </widget> - </item> - <item row="1" column="1"> - <widget class="KLineEdit" name="kcfg_syncPass"/> - </item> - </layout> - </widget> - </item> - <item> - <widget class="QLabel" name="infoLabel"> - <property name="styleSheet"> - <string notr="true">QLabel { color : red; }</string> - </property> - <property name="text"> - <string>Only bookmarks will be synchronized.</string> - </property> - <property name="alignment"> - <set>Qt::AlignCenter</set> - </property> - </widget> - </item> - <item> - <spacer name="verticalSpacer"> - <property name="orientation"> - <enum>Qt::Vertical</enum> - </property> - <property name="sizeHint" stdset="0"> - <size> - <width>20</width> - <height>124</height> - </size> - </property> - </spacer> - </item> - </layout> - </widget> - <customwidgets> - <customwidget> - <class>KLineEdit</class> - <extends>QLineEdit</extends> - <header>klineedit.h</header> - </customwidget> - </customwidgets> - <resources/> - <connections/> -</ui> diff --git a/src/sync/syncassistant.cpp b/src/sync/syncassistant.cpp deleted file mode 100644 index 7edc1f67..00000000 --- a/src/sync/syncassistant.cpp +++ /dev/null @@ -1,52 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2011-2012 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 "syncassistant.h" -#include "syncassistant.moc" - -// Local Includes -#include "synccheckwidget.h" -#include "syncdatawidget.h" -#include "synchosttypewidget.h" - -#include "syncftpsettingswidget.h" -#include "syncgooglesettingswidget.h" -#include "syncoperasettingswidget.h" - - -SyncAssistant::SyncAssistant(QWidget *parent) - : QWizard(parent) -{ - setWindowTitle(i18n("sync assistant")); - - setPage(Page_Type, new SyncHostTypeWidget(this)); - setPage(Page_FTP_Settings, new SyncFTPSettingsWidget(this)); - setPage(Page_Google_Settings, new SyncGoogleSettingsWidget(this)); - setPage(Page_Opera_Settings, new SyncOperaSettingsWidget(this)); - setPage(Page_Data, new SyncDataWidget(this)); - setPage(Page_Check, new SyncCheckWidget(this)); -} diff --git a/src/sync/syncassistant.h b/src/sync/syncassistant.h deleted file mode 100644 index f373a5f8..00000000 --- a/src/sync/syncassistant.h +++ /dev/null @@ -1,53 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2011-2012 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 SYNC_ASSISTANT_H -#define SYNC_ASSISTANT_H - - -// KDE Includes -#include <QWizard> - - -class SyncAssistant : public QWizard -{ - Q_OBJECT - -public: - enum - { - Page_Type, - Page_FTP_Settings, - Page_Google_Settings, - Page_Opera_Settings, - Page_Data, - Page_Check - }; - - SyncAssistant(QWidget *parent = 0); -}; - -#endif diff --git a/src/sync/synccheckwidget.cpp b/src/sync/synccheckwidget.cpp deleted file mode 100644 index 4874377f..00000000 --- a/src/sync/synccheckwidget.cpp +++ /dev/null @@ -1,201 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2011-2012 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 "synccheckwidget.h" -#include "synccheckwidget.moc" - -// Auto Includes -#include "rekonq.h" - -// Local Includes -#include "syncassistant.h" -#include "syncmanager.h" - -#include "application.h" - -// KDE Includes -#include <KStandardDirs> -#include <KIcon> - -// Qt Includes -#include <QMovie> - - -SyncCheckWidget::SyncCheckWidget(QWidget *parent) - : QWizardPage(parent) -{ - setupUi(this); -} - - -void SyncCheckWidget::initializePage() -{ - // set initial values - if (ReKonfig::syncType() == 0) - { - syncLabel->setText(i18n("FTP")); - hostLabel->setText(ReKonfig::syncHost()); - } - else if (ReKonfig::syncType() == 1) - { - syncLabel->setText(i18n("Google")); - hostLabel->setText(ReKonfig::syncHost()); - } - else if (ReKonfig::syncType() == 2) - { - syncLabel->setText(i18n("Opera")); - hostLabel->setText(ReKonfig::syncHost()); - } - else - { - syncLabel->setText(i18n("No sync")); - hostLabel->setText(i18n("none")); - } - - bkMsgLabel->setText(QString()); - hsMsgLabel->setText(QString()); - psMsgLabel->setText(QString()); - - KIcon notSyncedIcon(QL1S("dialog-cancel")); - - if (!ReKonfig::syncEnabled()) - { - bkLabel->setPixmap(notSyncedIcon.pixmap(16)); - hsLabel->setPixmap(notSyncedIcon.pixmap(16)); - psLabel->setPixmap(notSyncedIcon.pixmap(16)); - return; - } - - QString loadingGitPath = KStandardDirs::locate("appdata" , "pics/loading.mng"); - - // Now, load syncManager settings... - rApp->syncManager()->loadSettings(); - - SyncHandler *h = rApp->syncManager()->handler(); - - if (!h) - { - bkLabel->setPixmap(notSyncedIcon.pixmap(16)); - hsLabel->setPixmap(notSyncedIcon.pixmap(16)); - psLabel->setPixmap(notSyncedIcon.pixmap(16)); - return; - } - - connect(h, SIGNAL(syncStatus(Rekonq::SyncData, bool, QString)), this, SLOT(updateWidget(Rekonq::SyncData, bool, QString))); - - - // bookmarks - if (ReKonfig::syncBookmarks()) - { - QMovie *movie = new QMovie(loadingGitPath, QByteArray(), bkLabel); - movie->setSpeed(50); - bkLabel->setMovie(movie); - movie->start(); - } - else - { - bkLabel->setPixmap(notSyncedIcon.pixmap(16)); - } - - // history - if (ReKonfig::syncHistory()) - { - QMovie *movie = new QMovie(loadingGitPath, QByteArray(), hsLabel); - movie->setSpeed(50); - hsLabel->setMovie(movie); - movie->start(); - } - else - { - hsLabel->setPixmap(notSyncedIcon.pixmap(16)); - } - - // passwords - if (ReKonfig::syncPasswords()) - { - QMovie *movie = new QMovie(loadingGitPath, QByteArray(), psLabel); - movie->setSpeed(50); - psLabel->setMovie(movie); - movie->start(); - } - else - { - psLabel->setPixmap(notSyncedIcon.pixmap(16)); - } -} - - - - -void SyncCheckWidget::updateWidget(Rekonq::SyncData type, bool done, QString msg) -{ - KIcon doneIcon(QL1S("dialog-ok-apply")); - KIcon failIcon(QL1S("edit-delete")); - - switch (type) - { - case Rekonq::Bookmarks: - if (done) - { - bkLabel->setPixmap(doneIcon.pixmap(16)); - } - else - { - bkLabel->setPixmap(failIcon.pixmap(16)); - } - bkMsgLabel->setText(msg); - break; - - case Rekonq::History: - if (done) - { - hsLabel->setPixmap(doneIcon.pixmap(16)); - } - else - { - hsLabel->setPixmap(failIcon.pixmap(16)); - } - hsMsgLabel->setText(msg); - break; - - case Rekonq::Passwords: - if (done) - { - psLabel->setPixmap(doneIcon.pixmap(16)); - } - else - { - psLabel->setPixmap(failIcon.pixmap(16)); - } - psMsgLabel->setText(msg); - break; - - default: - // nothing to do here... - break; - }; -} diff --git a/src/sync/synccheckwidget.h b/src/sync/synccheckwidget.h deleted file mode 100644 index 312fe9b4..00000000 --- a/src/sync/synccheckwidget.h +++ /dev/null @@ -1,53 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2011-2012 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 SYNC_CHECK_WIDGET_H -#define SYNC_CHECK_WIDGET_H - - -// Rekonq Includes -#include "rekonq_defines.h" - -// Ui Includes -#include "ui_sync_check.h" - -// Qt Includes -#include <QWizardPage> - - -class SyncCheckWidget : public QWizardPage, private Ui::SyncCheck -{ - Q_OBJECT - -public: - SyncCheckWidget(QWidget *parent = 0); - void initializePage(); - -private Q_SLOTS: - void updateWidget(Rekonq::SyncData, bool, QString); -}; - -#endif // SYNC_CHECK_WIDGET_H diff --git a/src/sync/syncdatawidget.cpp b/src/sync/syncdatawidget.cpp deleted file mode 100644 index 635c6239..00000000 --- a/src/sync/syncdatawidget.cpp +++ /dev/null @@ -1,86 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2011-2012 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 "syncdatawidget.h" -#include "syncdatawidget.moc" - -// Auto Includes -#include "rekonq.h" - -// Local Includes -#include "syncmanager.h" -#include "syncassistant.h" - - -SyncDataWidget::SyncDataWidget(QWidget *parent) - : QWizardPage(parent) -{ - setupUi(this); -} - -void SyncDataWidget::initializePage() -{ - - kcfg_syncBookmarks->setDisabled(true); - kcfg_syncHistory->setDisabled(true); - kcfg_syncPasswords->setDisabled(true); - - switch (ReKonfig::syncType()) - { - //Ftp Sync Handler - case 0: - kcfg_syncBookmarks->setEnabled(true); - kcfg_syncHistory->setEnabled(true); - kcfg_syncPasswords->setEnabled(true); - break; - //Google Sync Handler - case 1: - //Opera Sync Handler - case 2: - kcfg_syncBookmarks->setEnabled(true); - break; - default: - kDebug() << "Unknown sync type!"; - } - - kcfg_syncBookmarks->setChecked(ReKonfig::syncBookmarks()); - kcfg_syncHistory->setChecked(ReKonfig::syncHistory()); - kcfg_syncPasswords->setChecked(ReKonfig::syncPasswords()); - -} - - -int SyncDataWidget::nextId() const -{ - // save - - ReKonfig::setSyncBookmarks(kcfg_syncBookmarks->isChecked()); - ReKonfig::setSyncHistory(kcfg_syncHistory->isChecked()); - ReKonfig::setSyncPasswords(kcfg_syncPasswords->isChecked()); - - return SyncAssistant::Page_Check; -} diff --git a/src/sync/syncdatawidget.h b/src/sync/syncdatawidget.h deleted file mode 100644 index cfec1d49..00000000 --- a/src/sync/syncdatawidget.h +++ /dev/null @@ -1,54 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2011-2012 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 SYNC_DATA_WIDGET_H -#define SYNC_DATA_WIDGET_H - - -// Rekonq Includes -#include "rekonq_defines.h" - -// Ui Includes -#include "ui_sync_data.h" - -// Qt Includes -#include <QWizardPage> - - -class SyncDataWidget : public QWizardPage, private Ui::SyncData -{ - Q_OBJECT - -public: - SyncDataWidget(QWidget *parent = 0); - - int nextId() const; - - void initializePage(); - -}; - -#endif // SYNC_WIDGET_H diff --git a/src/sync/syncftpsettingswidget.cpp b/src/sync/syncftpsettingswidget.cpp deleted file mode 100644 index 5eb6bfdc..00000000 --- a/src/sync/syncftpsettingswidget.cpp +++ /dev/null @@ -1,63 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2011 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 "syncftpsettingswidget.h" -#include "syncftpsettingswidget.moc" - -// Auto Includes -#include "rekonq.h" - -// Local Includes -#include "syncassistant.h" - - -SyncFTPSettingsWidget::SyncFTPSettingsWidget(QWidget *parent) - : QWizardPage(parent) -{ - setupUi(this); - - kcfg_syncHost->setText(ReKonfig::syncHost()); - kcfg_syncUser->setText(ReKonfig::syncUser()); - kcfg_syncPass->setText(ReKonfig::syncPass()); - kcfg_syncPath->setText(ReKonfig::syncPath()); - kcfg_syncPort->setValue(ReKonfig::syncPort()); - - kcfg_syncPass->setPasswordMode(true); -} - - -int SyncFTPSettingsWidget::nextId() const -{ - // save - ReKonfig::setSyncHost(kcfg_syncHost->text()); - ReKonfig::setSyncUser(kcfg_syncUser->text()); - ReKonfig::setSyncPass(kcfg_syncPass->text()); - ReKonfig::setSyncPath(kcfg_syncPath->text()); - ReKonfig::setSyncPort(kcfg_syncPort->value()); - - return SyncAssistant::Page_Data; -} diff --git a/src/sync/syncftpsettingswidget.h b/src/sync/syncftpsettingswidget.h deleted file mode 100644 index d067eef4..00000000 --- a/src/sync/syncftpsettingswidget.h +++ /dev/null @@ -1,51 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2011 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 SYNC_FTP_SETTINGS_WIDGET_H -#define SYNC_FTP_SETTINGS_WIDGET_H - - -// Rekonq Includes -#include "rekonq_defines.h" - -// Ui Includes -#include "ui_sync_ftp_settings.h" - -// Qt Includes -#include <QWizardPage> - - -class SyncFTPSettingsWidget : public QWizardPage, private Ui::SyncFTPSettings -{ - Q_OBJECT - -public: - SyncFTPSettingsWidget(QWidget *parent = 0); - - int nextId() const; -}; - -#endif // SYNC_FTP_SETTINGS_WIDGET_H diff --git a/src/sync/syncgooglesettingswidget.cpp b/src/sync/syncgooglesettingswidget.cpp deleted file mode 100644 index 6c364b38..00000000 --- a/src/sync/syncgooglesettingswidget.cpp +++ /dev/null @@ -1,61 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2012 by Siteshwar Vashisht <siteshwar at gmail dot com> -* Copyright (C) 2011-2012 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 "syncgooglesettingswidget.h" -#include "syncgooglesettingswidget.moc" - -// Auto Includes -#include "rekonq.h" - -// Local Includes -#include "syncassistant.h" - - -SyncGoogleSettingsWidget::SyncGoogleSettingsWidget(QWidget *parent) - : QWizardPage(parent) -{ - setupUi(this); - kcfg_syncUser->setText(ReKonfig::syncUser()); - kcfg_syncPass->setText(ReKonfig::syncPass()); - - kcfg_syncPass->setPasswordMode(true); -} - - -int SyncGoogleSettingsWidget::nextId() const -{ - // save - ReKonfig::setSyncHost("http://bookmarks.google.com/"); - ReKonfig::setSyncUser(kcfg_syncUser->text()); - ReKonfig::setSyncPass(kcfg_syncPass->text()); - - ReKonfig::setSyncHistory(false); - ReKonfig::setSyncPasswords(false); - - return SyncAssistant::Page_Data; -} diff --git a/src/sync/syncgooglesettingswidget.h b/src/sync/syncgooglesettingswidget.h deleted file mode 100644 index a51b1d2c..00000000 --- a/src/sync/syncgooglesettingswidget.h +++ /dev/null @@ -1,52 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2011-2012 by Siteshwar Vashisht <siteshwar AT gmail.com> -* Copyright (C) 2011-20112 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 SYNC_GOOGLE_SETTINGS_WIDGET_H -#define SYNC_GOOGLE_SETTINGS_WIDGET_H - - -// Rekonq Includes -#include "rekonq_defines.h" - -// Ui Includes -#include "ui_sync_google_settings.h" - -// Qt Includes -#include <QWizardPage> - - -class SyncGoogleSettingsWidget : public QWizardPage, private Ui::SyncGoogleSettings -{ - Q_OBJECT - -public: - SyncGoogleSettingsWidget(QWidget *parent = 0); - - int nextId() const; -}; - -#endif // SYNC_GOOGLE_SETTINGS_WIDGET_H diff --git a/src/sync/synchandler.cpp b/src/sync/synchandler.cpp deleted file mode 100644 index 759af064..00000000 --- a/src/sync/synchandler.cpp +++ /dev/null @@ -1,41 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2011 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 "synchandler.h" -#include "synchandler.moc" - - -SyncHandler::SyncHandler(QObject *parent) - : QObject(parent) - , _firstTimeSynced(false) -{ -} - - -SyncHandler::~SyncHandler() -{ -} diff --git a/src/sync/synchandler.h b/src/sync/synchandler.h deleted file mode 100644 index 32266d7c..00000000 --- a/src/sync/synchandler.h +++ /dev/null @@ -1,61 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2011 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 SYNC_HANDLER_H -#define SYNC_HANDLER_H - - -// Rekonq Includes -#include "rekonq_defines.h" - -// Qt Includes -#include <QObject> - - -class SyncHandler : public QObject -{ - Q_OBJECT - -public: - SyncHandler(QObject *parent = 0); - virtual ~SyncHandler(); - - virtual void syncHistory() = 0; - virtual void syncBookmarks() = 0; - virtual void syncPasswords() = 0; - - virtual void initialLoadAndCheck() = 0; - -Q_SIGNALS: - void syncStatus(Rekonq::SyncData type, bool syncDone, QString message); - -protected: - bool _firstTimeSynced; - - -}; - -#endif // SYNC_HANDLER_H diff --git a/src/sync/synchosttypewidget.cpp b/src/sync/synchosttypewidget.cpp deleted file mode 100644 index 289f5e5e..00000000 --- a/src/sync/synchosttypewidget.cpp +++ /dev/null @@ -1,107 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2011-2012 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 "synchosttypewidget.h" -#include "synchosttypewidget.moc" - -// Auto Includes -#include "rekonq.h" - -// Local Includes -#include "syncassistant.h" - - -SyncHostTypeWidget::SyncHostTypeWidget(QWidget *parent) - : QWizardPage(parent) - , _changed(false) -{ - setupUi(this); - connect(kcfg_syncEnabled, SIGNAL(clicked()), this, SLOT(hasChanged())); - - kcfg_syncEnabled->setChecked(ReKonfig::syncEnabled()); - if (ReKonfig::syncType() == 0) - ftpRadioButton->setChecked(true); - else if (ReKonfig::syncType() == 1) - googleRadioButton->setChecked(true); - else if (ReKonfig::syncType() == 2) - operaRadioButton->setChecked(true); - else - nullRadioButton->setChecked(true); - - enablewidgets(ReKonfig::syncEnabled()); -} - - -bool SyncHostTypeWidget::changed() -{ - return _changed; -} - - -void SyncHostTypeWidget::hasChanged() -{ - enablewidgets(kcfg_syncEnabled->isChecked()); - - _changed = true; - emit changed(true); -} - -int SyncHostTypeWidget::nextId() const -{ - ReKonfig::setSyncEnabled(kcfg_syncEnabled->isChecked()); - - if (!ReKonfig::syncEnabled()) - return SyncAssistant::Page_Check; - - // save - if (ftpRadioButton->isChecked()) - { - ReKonfig::setSyncType(0); - return SyncAssistant::Page_FTP_Settings; - } - else if (googleRadioButton->isChecked()) - { - ReKonfig::setSyncType(1); - return SyncAssistant::Page_Google_Settings; - } - else if (operaRadioButton->isChecked()) - { - ReKonfig::setSyncType(2); - return SyncAssistant::Page_Opera_Settings; - } - else - { - ReKonfig::setSyncType(3); - return SyncAssistant::Page_Check; - } - -} - -void SyncHostTypeWidget::enablewidgets(bool b) -{ - hostGroupBox->setEnabled(b); -} diff --git a/src/sync/synchosttypewidget.h b/src/sync/synchosttypewidget.h deleted file mode 100644 index 4f577958..00000000 --- a/src/sync/synchosttypewidget.h +++ /dev/null @@ -1,63 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2011-2012 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 SYNC_HOST_TYPE_WIDGET_H -#define SYNC_HOST_TYPE_WIDGET_H - - -// Rekonq Includes -#include "rekonq_defines.h" - -// Ui Includes -#include "ui_sync_host_type.h" - -// Qt Includes -#include <QWizardPage> - - -class SyncHostTypeWidget : public QWizardPage, private Ui::SyncHostType -{ - Q_OBJECT - -public: - SyncHostTypeWidget(QWidget *parent = 0); - - int nextId() const; - bool changed(); - -Q_SIGNALS: - void changed(bool); - -private Q_SLOTS: - void hasChanged(); - -private: - void enablewidgets(bool b); - bool _changed; - -}; - -#endif // SYNC_HOST_TYPE_WIDGET_H diff --git a/src/sync/syncmanager.cpp b/src/sync/syncmanager.cpp deleted file mode 100644 index 78cc4b4e..00000000 --- a/src/sync/syncmanager.cpp +++ /dev/null @@ -1,170 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2011-2012 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 "syncmanager.h" -#include "syncmanager.moc" - -// Auto Includes -#include "rekonq.h" - -// Config Includes -#include "config-qca2.h" -#include "config-qtoauth.h" - -// Local Includes -#include "application.h" -#include "bookmarkmanager.h" -#include "historymanager.h" - -#include "syncassistant.h" -#include "ftpsynchandler.h" -#include "googlesynchandler.h" - -#if (defined HAVE_QCA2 && defined HAVE_QTOAUTH) -#include "operasynchandler.h" -#endif - -// KDE Includes -#include <klocalizedstring.h> - -// Qt Includes -#include <QPointer> - - -SyncManager::SyncManager(QObject *parent) - : QObject(parent) -{ - loadSettings(); -} - - -SyncManager::~SyncManager() -{ - if (!_syncImplementation.isNull()) - { - delete _syncImplementation.data(); - _syncImplementation.clear(); - } -} - - -void SyncManager::loadSettings() -{ - if (ReKonfig::syncEnabled()) - { - // reset syncer - if (!_syncImplementation.isNull()) - { - delete _syncImplementation.data(); - _syncImplementation.clear(); - } - - switch (ReKonfig::syncType()) - { - case 0: - _syncImplementation = new FTPSyncHandler(this); - break; - case 1: - _syncImplementation = new GoogleSyncHandler(this); - break; -#if (defined HAVE_QCA2 && defined HAVE_QTOAUTH) - case 2: - _syncImplementation = new OperaSyncHandler(this); - break; -#endif - default: - kDebug() << "/dev/null"; - return; - } - - - // --- Connect syncmanager to bookmarks & history manager - - // bookmarks - ReKonfig::syncBookmarks() - ? connect(rApp->bookmarkManager(), SIGNAL(bookmarksUpdated()), this, SLOT(syncBookmarks())) - : disconnect(rApp->bookmarkManager(), SIGNAL(bookmarksUpdated()), this, SLOT(syncBookmarks())) - ; - - // history - ReKonfig::syncHistory() - ? connect(rApp->historyManager(), SIGNAL(historySaved()), this, SLOT(syncHistory())) - : disconnect(rApp->historyManager(), SIGNAL(historySaved()), this, SLOT(syncHistory())) - ; - - _syncImplementation.data()->initialLoadAndCheck(); - // NOTE: password sync will be called just on save - } - else - { - // bookmarks - disconnect(rApp->bookmarkManager(), SIGNAL(bookmarksUpdated()), this, SLOT(syncBookmarks())); - - // history - disconnect(rApp->historyManager(), SIGNAL(historySaved()), this, SLOT(syncHistory())); - } -} - - -void SyncManager::showSettings() -{ - QPointer<SyncAssistant> dialog = new SyncAssistant(); - dialog->exec(); - - dialog->deleteLater(); -} - - -// --------------------------------------------------------------------------------------- - - -void SyncManager::syncBookmarks() -{ - if (!_syncImplementation.isNull()) - { - _syncImplementation.data()->syncBookmarks(); - } -} - - -void SyncManager::syncHistory() -{ - if (!_syncImplementation.isNull()) - { - _syncImplementation.data()->syncHistory(); - } -} - - -void SyncManager::syncPasswords() -{ - if (!_syncImplementation.isNull()) - { - _syncImplementation.data()->syncPasswords(); - } -} - diff --git a/src/sync/syncmanager.h b/src/sync/syncmanager.h deleted file mode 100644 index 586f3c4d..00000000 --- a/src/sync/syncmanager.h +++ /dev/null @@ -1,67 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2011-2012 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 SYNC_MANAGER_H -#define SYNC_MANAGER_H - - -// Rekonq Includes -#include "rekonq_defines.h" - -// Local Includes -#include "synchandler.h" - -// Qt Includes -#include <QObject> -#include <QWeakPointer> - - -class REKONQ_TESTS_EXPORT SyncManager : public QObject -{ - Q_OBJECT - -public: - SyncManager(QObject *parent = 0); - ~SyncManager(); - - SyncHandler *handler() const - { - return _syncImplementation.data(); - }; - -public Q_SLOTS: - void syncBookmarks(); - void syncHistory(); - void syncPasswords(); - - void loadSettings(); - void showSettings(); - -private: - QWeakPointer<SyncHandler> _syncImplementation; -}; - -#endif // SYNC_MANAGER_H diff --git a/src/sync/syncoperasettingswidget.cpp b/src/sync/syncoperasettingswidget.cpp deleted file mode 100644 index a45ae70c..00000000 --- a/src/sync/syncoperasettingswidget.cpp +++ /dev/null @@ -1,85 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2012 by Siteshwar Vashisht <siteshwar at gmail dot com> -* Copyright (C) 2011-2012 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 "syncoperasettingswidget.h" -#include "syncoperasettingswidget.moc" - -// Auto Includes -#include "rekonq.h" - -// Config Includes -#include "config-qca2.h" -#include "config-qtoauth.h" - -// Local Includes -#include "syncassistant.h" - - -SyncOperaSettingsWidget::SyncOperaSettingsWidget(QWidget *parent) - : QWizardPage(parent) -{ - setupUi(this); - -#if (defined HAVE_QCA2 && defined HAVE_QTOAUTH) - - kcfg_syncUser->setText(ReKonfig::syncUser()); - kcfg_syncPass->setText(ReKonfig::syncPass()); - - kcfg_syncPass->setPasswordMode(true); - -#else - - kcfg_syncUser->setEnabled(false); - kcfg_syncPass->setEnabled(false); - - infoLabel->setText(i18n("Rekonq has been compiled without support for Opera Sync")); - -#endif -} - - -int SyncOperaSettingsWidget::nextId() const -{ -#if (defined HAVE_QCA2 && defined HAVE_QTOAUTH) - - // save - ReKonfig::setSyncHost("http://link.opera.com/"); - ReKonfig::setSyncUser(kcfg_syncUser->text()); - ReKonfig::setSyncPass(kcfg_syncPass->text()); - - ReKonfig::setSyncHistory(false); - ReKonfig::setSyncPasswords(false); - - return SyncAssistant::Page_Data; - -#else - - return SyncAssistant::Page_Check; - -#endif -} diff --git a/src/sync/syncoperasettingswidget.h b/src/sync/syncoperasettingswidget.h deleted file mode 100644 index 53e95699..00000000 --- a/src/sync/syncoperasettingswidget.h +++ /dev/null @@ -1,52 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2011-2012 by Siteshwar Vashisht <siteshwar AT gmail.com> -* Copyright (C) 2011-2012 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 SYNC_OPERA_SETTINGS_WIDGET_H -#define SYNC_OPERA_SETTINGS_WIDGET_H - - -// Rekonq Includes -#include "rekonq_defines.h" - -// Ui Includes -#include "ui_sync_opera_settings.h" - -// Qt Includes -#include <QWizardPage> - - -class SyncOperaSettingsWidget : public QWizardPage, private Ui::SyncOperaSettings -{ - Q_OBJECT - -public: - SyncOperaSettingsWidget(QWidget *parent = 0); - - int nextId() const; -}; - -#endif // SYNC_OPERA_SETTINGS_WIDGET_H diff --git a/src/tabbar.cpp b/src/tabbar.cpp deleted file mode 100644 index 5339a7d0..00000000 --- a/src/tabbar.cpp +++ /dev/null @@ -1,568 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2008 Benjamin C. Meyer <ben@meyerhome.net> -* Copyright (C) 2008-2012 by Andrea Diamantini <adjam7 at gmail dot com> -* Copyright (C) 2009 by PaweÅ‚ Prażak <pawelprazak at gmail dot com> -* Copyright (C) 2009-2011 by Lionel Chauvin <megabigbug@yahoo.fr> -* -* -* 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 "tabbar.h" -#include "tabbar.moc" - -// Local Includes -#include "rekonq.h" - -#include "application.h" -#include "historymanager.h" -#include "iconmanager.h" -#include "mainview.h" -#include "mainwindow.h" -#include "webpage.h" -#include "webtab.h" -#include "websnap.h" -#include "tabhighlighteffect.h" -#include "tabpreviewpopup.h" -#include "searchengine.h" - -// KDE Includes -#include <KActionMenu> -#include <KMenu> -#include <KToolBar> -#include <KColorScheme> -#include <KAcceleratorManager> - -// Qt Includes -#include <QLabel> -#include <QLayout> -#include <QMouseEvent> -#include <QToolButton> -#include <QPropertyAnimation> -#include <QStyleOptionFrameV3> -#include <QSignalMapper> -#include <QTimer> - - -static inline QByteArray highlightPropertyName(int index) -{ - return QByteArray("hAnim").append(QByteArray::number(index)); -} - - -// ---------------------------------------------- - - -TabBar::TabBar(QWidget *parent) - : KTabBar(parent) - , m_actualIndex(-1) - , m_currentTabPreviewIndex(-1) - , m_isFirstTimeOnTab(true) - , m_tabHighlightEffect(new TabHighlightEffect(this)) - , m_animationMapper(new QSignalMapper(this)) -{ - setElideMode(Qt::ElideRight); - - setDocumentMode(true); - setTabsClosable(true); - setMovable(true); - - setContextMenuPolicy(Qt::CustomContextMenu); - - // avoid ambiguos shortcuts. See BUG:275858 - KAcceleratorManager::setNoAccel(this); - - connect(this, SIGNAL(contextMenu(int, QPoint)), this, SLOT(contextMenu(int, QPoint))); - connect(this, SIGNAL(emptyAreaContextMenu(QPoint)), this, SLOT(emptyAreaContextMenu(QPoint))); - - connect(m_animationMapper, SIGNAL(mapped(int)), this, SLOT(removeAnimation(int))); - setGraphicsEffect(m_tabHighlightEffect); - - setAnimatedTabHighlighting(ReKonfig::animatedTabHighlighting()); - setAcceptDrops(true); -} - - -QSize TabBar::tabSizeHint(int index) const -{ - Q_UNUSED(index); - - MainView *view = qobject_cast<MainView *>(parent()); - - int buttonSize = view->addTabButton()->size().width(); - int tabBarWidth = view->size().width() - buttonSize; - int baseWidth = view->sizeHint().width() / baseWidthDivisor; - int minWidth = view->sizeHint().width() / minWidthDivisor; - - int w; - if (baseWidth * count() < tabBarWidth) - { - w = baseWidth; - } - else - { - if (count() > 0 && tabBarWidth / count() > minWidth) - { - w = tabBarWidth / count(); - } - else - { - w = minWidth; - } - } - - int h = KTabBar::tabSizeHint(index).height(); - - QSize ts = QSize(w, h); - return ts; -} - - -void TabBar::cloneTab() -{ - emit cloneTab(m_actualIndex); - m_actualIndex = -1; -} - - -void TabBar::closeTab() -{ - emit closeTab(m_actualIndex); - m_actualIndex = -1; -} - - -void TabBar::closeOtherTabs() -{ - emit closeOtherTabs(m_actualIndex); - m_actualIndex = -1; -} - - -void TabBar::reloadTab() -{ - emit reloadTab(m_actualIndex); - m_actualIndex = -1; -} - - -void TabBar::detachTab() -{ - emit detachTab(m_actualIndex); - m_actualIndex = -1; -} - - -void TabBar::showTabPreview() -{ - if (m_isFirstTimeOnTab) - m_isFirstTimeOnTab = false; - - //delete previous tab preview - delete m_previewPopup.data(); - m_previewPopup.clear(); - - MainView *mv = qobject_cast<MainView *>(parent()); - - WebTab *indexedTab = mv->webTab(m_currentTabPreviewIndex); - WebTab *currentTab = mv->webTab(currentIndex()); - - // check if view && currentView exist before using them :) - if (!currentTab || !indexedTab) - return; - - // no previews during load - if (indexedTab->isPageLoading()) - return; - - // Make sure the hovered webtab match the current size - // Only the active one is updated by window resize events - indexedTab->resize(currentTab->size()); - - m_previewPopup = new TabPreviewPopup(indexedTab , this); - - int tabWidth = tabSizeHint(m_currentTabPreviewIndex).width(); - int tabBarWidth = mv->size().width(); - int leftIndex = tabRect(m_currentTabPreviewIndex).x() + (tabRect(m_currentTabPreviewIndex).width() - tabWidth) / 2; - int popupWidth = m_previewPopup.data()->thumbnailSize().width(); - - // Center the popup if the tab width is bigger or smaller - leftIndex += (tabWidth - popupWidth) / 2; - - if (leftIndex < 0) - { - leftIndex = 0; - } - else if (leftIndex + tabWidth > tabBarWidth) - { - leftIndex = tabBarWidth - tabWidth; - } - - QPoint pos(leftIndex, tabRect(m_currentTabPreviewIndex).y() + tabRect(m_currentTabPreviewIndex).height()); - m_previewPopup.data()->show(mapToGlobal(pos)); -} - - -void TabBar::hideEvent(QHideEvent *event) -{ - if (!event->spontaneous()) - { - qobject_cast<MainView *>(parent())->addTabButton()->hide(); - } - KTabBar::hideEvent(event); -} - - -void TabBar::showEvent(QShowEvent *event) -{ - KTabBar::showEvent(event); - if (!event->spontaneous()) - { - qobject_cast<MainView *>(parent())->addTabButton()->show(); - } -} - - -void TabBar::mouseMoveEvent(QMouseEvent *event) -{ - if (count() == 1) - { - return; - } - - KTabBar::mouseMoveEvent(event); - - if (ReKonfig::hoveringTabOption() == 0) - { - //Find the tab under the mouse - const int tabIndex = tabAt(event->pos()); - - // if found and not the current tab then show tab preview - if (tabIndex != -1 - && tabIndex != currentIndex() - && m_currentTabPreviewIndex != tabIndex - && event->buttons() == Qt::NoButton - ) - { - m_currentTabPreviewIndex = tabIndex; - - // if first time over tab, apply a small delay. If not, show it now! - m_isFirstTimeOnTab - ? QTimer::singleShot(200, this, SLOT(showTabPreview())) - : showTabPreview(); - } - - // if current tab or not found then hide previous tab preview - if (tabIndex == currentIndex() || tabIndex == -1) - { - if (!m_previewPopup.isNull()) - { - m_previewPopup.data()->hide(); - } - m_currentTabPreviewIndex = -1; - } - } -} - - -void TabBar::leaveEvent(QEvent *event) -{ - if (ReKonfig::hoveringTabOption() == 0) - { - //if leave tabwidget then hide previous tab preview - if (!m_previewPopup.isNull()) - { - m_previewPopup.data()->hide(); - } - m_currentTabPreviewIndex = -1; - m_isFirstTimeOnTab = true; - } - - KTabBar::leaveEvent(event); -} - - -void TabBar::mousePressEvent(QMouseEvent *event) -{ - if (ReKonfig::hoveringTabOption() == 0) - { - if (!m_previewPopup.isNull()) - { - m_previewPopup.data()->hide(); - } - m_currentTabPreviewIndex = -1; - } - - // just close tab on middle mouse click - if (event->button() == Qt::MidButton) - return; - - KTabBar::mousePressEvent(event); -} - - -void TabBar::contextMenu(int tab, const QPoint &pos) -{ - KActionMenu *closedTabsMenu = setupHistoryActions(); - - m_actualIndex = tab; - - KMenu menu; - MainWindow *mainWindow = rApp->mainWindow(); - - menu.addAction(mainWindow->actionByName(QL1S("new_tab"))); - menu.addAction(mainWindow->actionByName(QL1S("clone_tab"))); - if (count() > 1) - { - menu.addAction(mainWindow->actionByName(QL1S("detach_tab"))); - } - menu.addAction(mainWindow->actionByName(QL1S("open_last_closed_tab"))); - menu.addAction(closedTabsMenu); - menu.addSeparator(); - menu.addAction(mainWindow->actionByName(QL1S("close_tab"))); - if (count() > 1) - { - menu.addAction(mainWindow->actionByName(QL1S("close_other_tabs"))); - } - menu.addSeparator(); - menu.addAction(mainWindow->actionByName(QL1S("reload_tab"))); - if (count() > 1) - { - menu.addAction(mainWindow->actionByName(QL1S("reload_all_tabs"))); - } - menu.exec(pos); -} - - -void TabBar::emptyAreaContextMenu(const QPoint &pos) -{ - KActionMenu *closedTabsMenu = setupHistoryActions(); - - KMenu menu; - MainWindow *mainWindow = rApp->mainWindow(); - - menu.addAction(mainWindow->actionByName(QL1S("new_tab"))); - menu.addAction(mainWindow->actionByName(QL1S("open_last_closed_tab"))); - menu.addAction(closedTabsMenu); - menu.addSeparator(); - menu.addAction(mainWindow->actionByName(QL1S("reload_all_tabs"))); - - KToolBar *mainBar = mainWindow->toolBar("mainToolBar"); - if (!mainBar->isVisible()) - { - menu.addAction(mainBar->toggleViewAction()); - } - - menu.exec(pos); -} - - -void TabBar::tabRemoved(int index) -{ - if (ReKonfig::hoveringTabOption() == 0) - { - if (!m_previewPopup.isNull()) - { - m_previewPopup.data()->hide(); - } - m_currentTabPreviewIndex = -1; - } - - if (ReKonfig::animatedTabHighlighting()) - removeAnimation(index); -} - - -KActionMenu *TabBar::setupHistoryActions() -{ - MainWindow *w = rApp->mainWindow(); - MainView *mv = qobject_cast<MainView *>(parent()); - - QAction *openLastClosedTabAction = w->actionByName(QL1S("open_last_closed_tab")); - - bool closedTabsAvailable = (mv->recentlyClosedTabs().size() > 0); - openLastClosedTabAction->setEnabled(closedTabsAvailable); - - KActionMenu *am = new KActionMenu(KIcon("tab-new"), i18n("Closed Tabs"), this); - am->setDelayed(false); - am->setEnabled(closedTabsAvailable); - - if (am->menu()) - am->menu()->clear(); - - if (!closedTabsAvailable) - return am; - - for (int i = 0; i < mv->recentlyClosedTabs().count(); ++i) - { - TabHistory item = mv->recentlyClosedTabs().at(i); - KAction *a = new KAction(rApp->iconManager()->iconForUrl(item.url), item.title, this); - a->setData(i); - connect(a, SIGNAL(triggered()), mv, SLOT(openClosedTab())); - am->addAction(a); - } - - return am; -} - - -QRect TabBar::tabTextRect(int index) -{ - QStyleOptionTabV3 option; - initStyleOption(&option, index); - return style()->subElementRect(QStyle::SE_TabBarTabText, &option, this); -} - - -void TabBar::setTabHighlighted(int index) -{ - const QByteArray propertyName = highlightPropertyName(index); - const QColor highlightColor = KColorScheme(QPalette::Active, KColorScheme::Window).foreground(KColorScheme::PositiveText).color(); - - if (tabTextColor(index) != highlightColor) - { - if (ReKonfig::animatedTabHighlighting()) - { - m_tabHighlightEffect->setEnabled(true); - m_tabHighlightEffect->setProperty(propertyName, qreal(0.9)); - QPropertyAnimation *anim = new QPropertyAnimation(m_tabHighlightEffect, propertyName); - m_highlightAnimation.insert(propertyName, anim); - - //setup the animation - anim->setStartValue(0.9); - anim->setEndValue(0.0); - anim->setDuration(500); - anim->setLoopCount(2); - anim->start(QAbstractAnimation::DeleteWhenStopped); - - m_animationMapper->setMapping(anim, index); - connect(anim, SIGNAL(finished()), m_animationMapper, SLOT(map())); - } - - setTabTextColor(index, highlightColor); - } -} - - -void TabBar::resetTabHighlighted(int index) -{ - if (ReKonfig::animatedTabHighlighting()) - removeAnimation(index); - - setTabTextColor(index, KColorScheme(QPalette::Active, KColorScheme::Window).foreground(KColorScheme::NormalText).color()); -} - - -void TabBar::removeAnimation(int index) -{ - const QByteArray propertyName = highlightPropertyName(index); - m_tabHighlightEffect->setProperty(propertyName, QVariant()); //destroy the property - - QPropertyAnimation *anim = m_highlightAnimation.take(propertyName); - m_animationMapper->removeMappings(anim); - delete anim; - - if (m_highlightAnimation.isEmpty()) - m_tabHighlightEffect->setEnabled(false); -} - - -void TabBar::setAnimatedTabHighlighting(bool enabled) -{ - if (enabled) - m_tabHighlightEffect->setEnabled(true); - else - { - m_tabHighlightEffect->setEnabled(false); - - //cleanup - QHashIterator<QByteArray, QPropertyAnimation*> i(m_highlightAnimation); - while (i.hasNext()) - { - i.next(); - m_tabHighlightEffect->setProperty(i.key(), QVariant()); //destroy the property - - QPropertyAnimation *anim = m_highlightAnimation.take(i.key()); - m_animationMapper->removeMappings(anim); - delete anim; - } - } -} - - -void TabBar::dropEvent(QDropEvent* event) -{ - if (event->mimeData()->hasUrls()) - { - int urlCount = event->mimeData()->urls().count(); - if (urlCount > 1) - { - Q_FOREACH(const QUrl & url, event->mimeData()->urls()) - rApp->loadUrl(url, Rekonq::NewTab); - } - else - rApp->loadUrl(event->mimeData()->urls().first(), Rekonq::NewFocusedTab); - } - else if (event->mimeData()->hasText()) - { - //In case the text is a valid URL - if (isURLValid(event->mimeData()->text())) - rApp->loadUrl(KUrl(event->mimeData()->text()), Rekonq::NewFocusedTab); - else - { - KService::Ptr defaultSearchEngine = SearchEngine::defaultEngine(); - if (defaultSearchEngine) - rApp->loadUrl(KUrl(SearchEngine::buildQuery(defaultSearchEngine, event->mimeData()->text())), Rekonq::NewFocusedTab); - } - } - KTabBar::dropEvent(event); -} - - -void TabBar::dragEnterEvent(QDragEnterEvent* event) -{ - if (event->mimeData()->hasUrls() || event->mimeData()->hasText()) - event->acceptProposedAction(); - else - KTabBar::dragEnterEvent(event); -} - - -bool TabBar::isURLValid(const QString &url) -{ - QString editedURL = url; - bool isValid = false; - if (editedURL.startsWith(QL1S("http://")) || editedURL.startsWith(QL1S("https://")) || editedURL.startsWith(QL1S("ftp://"))) - editedURL = editedURL.remove(QRegExp("(http|https|ftp)://")); - if (editedURL.contains(QL1C('.')) && editedURL.indexOf(QL1C('.')) > 0 && editedURL.indexOf(QL1C('.')) < editedURL.length() && !editedURL.trimmed().contains(QL1C(' ')) - && QUrl::fromUserInput(editedURL).isValid()) - isValid = true; - return isValid; -} - - -void TabBar::tabLayoutChange() -{ - KTabBar::tabLayoutChange(); - emit tabLayoutChanged(); -} diff --git a/src/tabbar.h b/src/tabbar.h deleted file mode 100644 index 6bdbdc09..00000000 --- a/src/tabbar.h +++ /dev/null @@ -1,135 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2008 Benjamin C. Meyer <ben@meyerhome.net> -* Copyright (C) 2008-2012 by Andrea Diamantini <adjam7 at gmail dot com> -* Copyright (C) 2009 by PaweÅ‚ Prażak <pawelprazak at gmail dot com> -* Copyright (C) 2009-2011 by Lionel Chauvin <megabigbug@yahoo.fr> -* -* -* 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 TABBAR_H -#define TABBAR_H - - -// Rekonq Includes -#include "rekonq_defines.h" - -// KDE Includes -#include <KTabBar> - -// Forward Declarations -class TabPreviewPopup; -class TabHighlightEffect; - -class KActionMenu; - -class QPropertyAnimation; -class QSignalMapper; - -/** - * Tab bar with a few more features such as - * a context menu and shortcuts - * - */ -class REKONQ_TESTS_EXPORT TabBar : public KTabBar -{ - Q_OBJECT - -public: - explicit TabBar(QWidget *parent); - - void setTabHighlighted(int index); - void resetTabHighlighted(int index); - QRect tabTextRect(int index); - void setAnimatedTabHighlighting(bool enabled); - - //constants - static const int baseWidthDivisor = 4; - static const int minWidthDivisor = 8; - -Q_SIGNALS: - void cloneTab(int index); - void closeTab(int index); - void closeOtherTabs(int index); - void reloadTab(int index); - void reloadAllTabs(); - void detachTab(int index); - void tabLayoutChanged(); - -protected: - /** - * Added to fix tab dimension - */ - virtual QSize tabSizeHint(int index) const; - - virtual void hideEvent(QHideEvent *event); - virtual void showEvent(QShowEvent *event); - virtual void mouseMoveEvent(QMouseEvent *event); - virtual void leaveEvent(QEvent *event); - virtual void mousePressEvent(QMouseEvent *event); - - virtual void tabLayoutChange(); - virtual void tabRemoved(int index); - void dropEvent(QDropEvent *event); - void dragEnterEvent(QDragEnterEvent *event); - -private Q_SLOTS: - void cloneTab(); - void closeTab(); - void closeOtherTabs(); - void reloadTab(); - void detachTab(); - - void contextMenu(int, const QPoint &); - void emptyAreaContextMenu(const QPoint &); - - void showTabPreview(); - - void removeAnimation(int index); - bool isURLValid(const QString &url); - -private: - KActionMenu *setupHistoryActions(); - - friend class MainView; - - /** - * the index in which we are seeing a Context menu - */ - int m_actualIndex; - - QWeakPointer<TabPreviewPopup> m_previewPopup; - - /** - * the index of the tab preview shown - */ - int m_currentTabPreviewIndex; - bool m_isFirstTimeOnTab; - - //highlightAnimation - TabHighlightEffect *m_tabHighlightEffect; - QHash<QByteArray, QPropertyAnimation*> m_highlightAnimation; - QSignalMapper *m_animationMapper; -}; - -#endif diff --git a/src/tabhighlighteffect.cpp b/src/tabhighlighteffect.cpp deleted file mode 100644 index 121afd15..00000000 --- a/src/tabhighlighteffect.cpp +++ /dev/null @@ -1,100 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2011 Tröscher Johannes <fritz_van_tom@hotmail.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 "tabhighlighteffect.h" -#include "tabhighlighteffect.moc" - -// Local Includes -#include "tabbar.h" - -// Qt Includes -#include <QEvent> -#include <QPainter> -#include <QVariant> - - -const QByteArray prep("hAnim"); - - -// --------------------------------------------------------------------------- - - -TabHighlightEffect::TabHighlightEffect(TabBar *tabBar) - : QGraphicsEffect(tabBar) - , m_tabBar(tabBar) - , m_highlightColor(tabBar->palette().highlight().color().lighter()) -{ - Q_ASSERT(m_tabBar); -} - - -void TabHighlightEffect::draw(QPainter *painter) -{ - const QPixmap &pixmap = sourcePixmap(); - - if (pixmap.isNull()) - return; - - painter->drawPixmap(QPoint(0, 0), pixmap); - - Q_FOREACH(const QByteArray & propertyName, dynamicPropertyNames()) - { - if (!propertyName.startsWith(prep)) - continue; - - int index = propertyName.right(propertyName.size() - prep.size()).toInt(); - qreal opacity = property(propertyName).toReal(); - QRect textRect = m_tabBar->tabTextRect(index); - - if (!boundingRect().contains(textRect)) - continue; - - QString tabText = m_tabBar->fontMetrics().elidedText(m_tabBar->tabText(index), Qt::ElideRight, - textRect.width(), Qt::TextShowMnemonic); - - painter->setOpacity(opacity); - painter->setPen(m_highlightColor); - painter->drawText(textRect, Qt::AlignCenter | Qt::TextShowMnemonic, tabText); - } -} - - -bool TabHighlightEffect::event(QEvent* event) -{ - if (event->type() == QEvent::DynamicPropertyChange) - { - QDynamicPropertyChangeEvent *pChangeEv = dynamic_cast<QDynamicPropertyChangeEvent*>(event); - - if (pChangeEv->propertyName().startsWith(prep)) - { - update(); - return true; - } - } - - return QGraphicsEffect::event(event); -} diff --git a/src/tabhighlighteffect.h b/src/tabhighlighteffect.h deleted file mode 100644 index 88302283..00000000 --- a/src/tabhighlighteffect.h +++ /dev/null @@ -1,58 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2011 Tröscher Johannes <fritz_van_tom@hotmail.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 TABHIGHLIGHTEFFECT_H -#define TABHIGHLIGHTEFFECT_H - - -// Qt Includes -#include <QGraphicsEffect> -#include <QColor> - -// Forward Declarations -class TabBar; - -class QEvent; -class QPainter; - - -class TabHighlightEffect : public QGraphicsEffect -{ - Q_OBJECT - -public: - explicit TabHighlightEffect(TabBar *tabBar = 0); - -protected: - virtual void draw(QPainter *painter); - virtual bool event(QEvent *event); - -private: - TabBar * const m_tabBar; - QColor m_highlightColor; -}; - -#endif // TABHIGHLIGHTEFFECT_H diff --git a/src/tabpreviewpopup.cpp b/src/tabpreviewpopup.cpp deleted file mode 100644 index a0311975..00000000 --- a/src/tabpreviewpopup.cpp +++ /dev/null @@ -1,166 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2011 by Vyacheslav Blinov <blinov dot vyacheslav at gmail dot com> -* Copyright (C) 2011-2012 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 "tabpreviewpopup.h" - -// Rekonq Includes -#include "webtab.h" - -//Qt Includes -#include <QLabel> -#include <QVBoxLayout> -#include <QPalette> -#include <QBitmap> -#include <QPoint> -#include <QPaintEvent> -#include <QStylePainter> -#include <QStyleOptionFrame> - - -TabPreviewPopup::TabPreviewPopup(WebTab* tab, QWidget* parent) - : KPassivePopup(parent), - m_thumbnail(new QLabel(this)), - m_url(new QLabel(this)) -{ - m_thumbnail->setAlignment(Qt::AlignHCenter); - m_url->setAlignment(Qt::AlignHCenter); - - QVBoxLayout *vb = new QVBoxLayout(this); - vb->addWidget(m_thumbnail); - vb->addWidget(m_url); - this->setLayout(vb); - - layout()->setAlignment(Qt::AlignTop); - layout()->setMargin(0); - - setPopupStyle(KPassivePopup::CustomStyle + 1); - - // use ToolTip appearance - QPalette p; - - // adjust background color to use tooltip colors - p.setColor(backgroundRole(), p.color(QPalette::ToolTipBase)); - p.setColor(QPalette::Base, p.color(QPalette::ToolTipBase)); - - // adjust foreground color to use tooltip colors - p.setColor(foregroundRole(), p.color(QPalette::ToolTipText)); - p.setColor(QPalette::Text, p.color(QPalette::ToolTipText)); - - setPalette(p); - - // window flags and attributes - setWindowFlags(Qt::ToolTip); - setAttribute(Qt::WA_TranslucentBackground); - setWindowOpacity(style()->styleHint(QStyle::SH_ToolTipLabel_Opacity, 0, this) / 255.0); - - // margins - const int margin = 1 + style()->pixelMetric(QStyle::PM_ToolTipLabelFrameWidth, 0, this); - setContentsMargins(margin, margin, margin, margin); - - setWebTab(tab); -} - - -TabPreviewPopup::~TabPreviewPopup() -{ - delete m_thumbnail; - delete m_url; -} - - -QSize TabPreviewPopup::thumbnailSize() const -{ - if (m_thumbnail->pixmap()) - return m_thumbnail->pixmap()->size(); - - return QSize(); -} - - -void TabPreviewPopup::setWebTab(WebTab* tab) -{ - // The ratio of the tab - double ratio = (double) tab->size().height() / tab->size().width(); - - int w = previewBaseSize; - int h = previewBaseSize; - - // Apply the ratio to the width or the weight to not exceed previewBaseSize - if (ratio < 1) - h *= ratio; - else if (ratio > 1) - w *= (1 / ratio); - - const QPixmap preview = tab->tabPreview(w, h); - - if (!preview.isNull()) - { - setThumbnail(preview); - setUrl(tab->url().prettyUrl()); - setFixedSize(preview.width(), preview.height() + m_url->heightForWidth(preview.width())); - } -} - - -void TabPreviewPopup::setThumbnail(const QPixmap& pixmap) -{ - m_thumbnail->setPixmap(pixmap); -} - - -void TabPreviewPopup::setUrl(const QString& text) -{ - m_url->setText(text); -} - - -void TabPreviewPopup::setFixedSize(int w, int h) -{ - KPassivePopup::setFixedSize(w, h); - const int margin = 1 + style()->pixelMetric(QStyle::PM_ToolTipLabelFrameWidth, 0, this); - m_url->setText(m_url->fontMetrics().elidedText(m_url->text(), Qt::ElideMiddle, this->width() - margin * 2)); - - //calculate mask - QStyleOptionFrame opt; - opt.init(this); - - QStyleHintReturnMask mask; - style()->styleHint(QStyle::SH_ToolTip_Mask, &opt, this, &mask); - setMask(mask.region); -} - - -void TabPreviewPopup::paintEvent(QPaintEvent* event) -{ - QStyleOptionFrame opt; - opt.init(this); - - QStylePainter painter(this); - painter.setClipRegion(event->region()); - painter.drawPrimitive(QStyle::PE_PanelTipLabel, opt); -} diff --git a/src/tabpreviewpopup.h b/src/tabpreviewpopup.h deleted file mode 100644 index 14f6f0ed..00000000 --- a/src/tabpreviewpopup.h +++ /dev/null @@ -1,73 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2011 by Vyacheslav Blinov <blinov dot vyacheslav at gmail dot com> -* Copyright (C) 2011-2012 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 TABPREVIEWPOPUP_H -#define TABPREVIEWPOPUP_H - -// Rekonq Includes -#include "rekonq_defines.h" - -// KDE Includes -#include <KPassivePopup> - -// forward declatrations -class WebTab; -class QLabel; - - -class REKONQ_TESTS_EXPORT TabPreviewPopup : public KPassivePopup -{ - -public: - /** - * @brief This constructs a new Tab Preview Popup witch will create a thumbnail and title with url from WebTab object - * - * @param tab a WebTab object witch will be used to create a preview - * @param parent - **/ - explicit TabPreviewPopup(WebTab *tab, QWidget *parent = 0); - virtual ~TabPreviewPopup(); - - QSize thumbnailSize() const; - - static const int previewBaseSize = 200; - -private: - void setWebTab(WebTab *tab = 0); - void setUrl(const QString& text); - void setThumbnail(const QPixmap& pixmap); - void setFixedSize(int w, int h); - -protected: - void paintEvent(QPaintEvent *event); - -private: - QLabel *m_thumbnail; - QLabel *m_url; -}; - -#endif // TABPREVIEWPOPUP_H diff --git a/src/tests/CMakeLists.txt b/src/tests/CMakeLists.txt deleted file mode 100644 index 560e7755..00000000 --- a/src/tests/CMakeLists.txt +++ /dev/null @@ -1,183 +0,0 @@ -##### ---------- General Settings ---------- - -SET( EXECUTABLE_OUTPUT_PATH ${CMAKE_CURRENT_BINARY_DIR} ) - -INCLUDE_DIRECTORIES ( ${CMAKE_CURRENT_BINARY_DIR} - ${CMAKE_CURRENT_BINARY_DIR}/.. - ${CMAKE_CURRENT_SOURCE_DIR}/.. - ${CMAKE_CURRENT_SOURCE_DIR}/../adblock - ${CMAKE_CURRENT_SOURCE_DIR}/../analyzer - ${CMAKE_CURRENT_SOURCE_DIR}/../bookmarks - ${CMAKE_CURRENT_SOURCE_DIR}/../history - ${CMAKE_CURRENT_SOURCE_DIR}/../opensearch - ${CMAKE_CURRENT_SOURCE_DIR}/../settings - ${CMAKE_CURRENT_SOURCE_DIR}/../urlbar - ${KDE4_INCLUDES} - ${QT4_INCLUDES} -) - -##### ------------- findbar test - -kde4_add_unit_test( findbar_test findbar_test.cpp ) - -target_link_libraries( findbar_test - kdeinit_rekonq - ${KDE4_KDECORE_LIBS} - ${KDE4_KDEUI_LIBS} - ${QT_QTGUI_LIBRARY} - ${QT_QTTEST_LIBRARY} -) - -##### ------------- mainwindow test - -kde4_add_unit_test( mainwindow_test mainwindow_test.cpp ) - -target_link_libraries( mainwindow_test - kdeinit_rekonq - ${KDE4_KDECORE_LIBS} - ${KDE4_KDEUI_LIBS} - ${QT_QTTEST_LIBRARY} -) - -##### ------------- mainview test - -kde4_add_unit_test( mainview_test mainview_test.cpp ) - -target_link_libraries( mainview_test - kdeinit_rekonq - ${KDE4_KDECORE_LIBS} - ${KDE4_KDEUI_LIBS} - ${QT_QTTEST_LIBRARY} -) - -##### ------------- networkaccessmanager test - -kde4_add_unit_test( networkaccessmanager_test networkaccessmanager_test.cpp ) - -target_link_libraries( networkaccessmanager_test - kdeinit_rekonq - ${KDE4_KDECORE_LIBS} - ${KDE4_KDEUI_LIBS} - ${QT_QTTEST_LIBRARY} -) - -##### ------------- protocolhandler test - -kde4_add_unit_test( protocolhandler_test protocolhandler_test.cpp ) - -target_link_libraries( protocolhandler_test - kdeinit_rekonq - ${KDE4_KDECORE_LIBS} - ${KDE4_KDEUI_LIBS} - ${KDE4_KDEWEBKIT_LIBS} - ${QT_QTNETWORK_LIBRARY} - ${QT_QTTEST_LIBRARY} -) - -##### ------------- sessionmanager test - -kde4_add_unit_test( sessionmanager_test sessionmanager_test.cpp ) - -target_link_libraries( sessionmanager_test - kdeinit_rekonq - ${KDE4_KDECORE_LIBS} - ${KDE4_KDEUI_LIBS} - ${QT_QTTEST_LIBRARY} -) - -##### ------------- tabbar test - -kde4_add_unit_test( tabbar_test tabbar_test.cpp ) - -target_link_libraries( tabbar_test - kdeinit_rekonq - ${KDE4_KDECORE_LIBS} - ${KDE4_KDEUI_LIBS} - ${QT_QTTEST_LIBRARY} -) - -##### ------------- walletbar test - -kde4_add_unit_test( walletbar_test walletbar_test.cpp ) - -target_link_libraries( walletbar_test - kdeinit_rekonq - ${KDE4_KDECORE_LIBS} - ${KDE4_KDEUI_LIBS} - ${KDE4_KDEWEBKIT_LIBS} - ${QT_QTTEST_LIBRARY} -) - -##### ------------- webpage test - -kde4_add_unit_test( webpage_test webpage_test.cpp ) - -target_link_libraries( webpage_test - kdeinit_rekonq - ${KDE4_KDECORE_LIBS} - ${KDE4_KDEUI_LIBS} - ${KDE4_KDEWEBKIT_LIBS} - ${QT_QTTEST_LIBRARY} -) - -##### ------------- websnap test - -kde4_add_unit_test( websnap_test websnap_test.cpp ) - -target_link_libraries( websnap_test - kdeinit_rekonq - ${KDE4_KDECORE_LIBS} - ${KDE4_KDEUI_LIBS} - ${KDE4_KDEWEBKIT_LIBS} - ${QT_QTTEST_LIBRARY} -) - -##### ------------- webtab test - -kde4_add_unit_test( webtab_test webtab_test.cpp ) - -target_link_libraries( webtab_test - kdeinit_rekonq - ${KDE4_KDECORE_LIBS} - ${KDE4_KDEUI_LIBS} - ${KDE4_KDEWEBKIT_LIBS} - ${QT_QTTEST_LIBRARY} -) - -##### ------------- webview test - -kde4_add_unit_test( webview_test webview_test.cpp ) - -target_link_libraries( webview_test - kdeinit_rekonq - ${KDE4_KDECORE_LIBS} - ${KDE4_KDEUI_LIBS} - ${KDE4_KDEWEBKIT_LIBS} - ${QT_QTTEST_LIBRARY} -) - -##### ------------- urlbar test - -kde4_add_unit_test( urlbar_test urlbar_test.cpp ) - -target_link_libraries( urlbar_test - kdeinit_rekonq - ${KDE4_KDECORE_LIBS} - ${KDE4_KDEUI_LIBS} - ${KDE4_KDEWEBKIT_LIBS} - ${QT_QTTEST_LIBRARY} -) - -##### ------------- listitem test - -kde4_add_unit_test( listitem_test listitem_test.cpp ) - -target_link_libraries( listitem_test - kdeinit_rekonq - ${KDE4_KDECORE_LIBS} - ${KDE4_KDEUI_LIBS} - ${KDE4_KDEWEBKIT_LIBS} - ${QT_QTTEST_LIBRARY} -) - -############################################################ diff --git a/src/tests/findbar_test.cpp b/src/tests/findbar_test.cpp deleted file mode 100644 index 3efb2d7b..00000000 --- a/src/tests/findbar_test.cpp +++ /dev/null @@ -1,80 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2009-2011 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/>. -* -* ============================================================ */ - - -#include <qtest_kde.h> - -#include <QtTest/QtTest> - -#include "findbar.h" -#include "mainwindow.h" - - -class FindBarTest : public QObject -{ - Q_OBJECT - -public Q_SLOTS: - void initTestCase(); - void cleanupTestCase(); - -private Q_SLOTS: - void matchCase(); - void notifyMatch(); - -private: - FindBar *bar; - MainWindow *w; -}; - - -// ------------------------------------------- - - -void FindBarTest::initTestCase() -{ - w = new MainWindow; - bar = new FindBar(w); -} - - -void FindBarTest::cleanupTestCase() -{ - delete bar; -} - -void FindBarTest::matchCase() -{ - -} - -void FindBarTest::notifyMatch() -{ -} - -// ------------------------------------------- - -QTEST_KDEMAIN(FindBarTest, GUI) -#include "findbar_test.moc" diff --git a/src/tests/html/HTTP_tests.html b/src/tests/html/HTTP_tests.html deleted file mode 100644 index 7a5ac00d..00000000 --- a/src/tests/html/HTTP_tests.html +++ /dev/null @@ -1,601 +0,0 @@ -<html> - -<head> -<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> -<title>Test Cases for HTTP Content-Disposition header and RFC 2231/2047 Encoding</title> - -<style type="text/css"> -a.plain { - color: black; - text-decoration: none; -} -body { - color: black; - font-family: verdana, helvetica, arial, sans-serif; - font-size: 10pt; - margin-left: 2em; -} -h1 { - font-size: 18pt; -} -h2 { - font-size: 14pt; -} -h3 { - font-size: 12pt; -} -h4 { - font-size: 10pt; -} -pre { - border-style: dotted; - border-width: 1px; - background-color: #f0f0f0; -} -pre.invalid { - border-style: dotted; - border-width: 1px; - background-color: #ff8080; -} -table { - font-size: 9pt; -} -table.aside { - float: right; - margin: 4px; - border-style: dotted; - border-width: 1px; - background-color: #f0f0f0; -} -q { - font-style: italic; -} -th { - text-align: right; - vertical-align: top; -} -h2, h3, h4 { - clear: both; -} -.fail { - background-color: #ffd0d0; -} -.warn { - background-color: #ffff80; -} -.pass { - background-color: #d0ffd0; -} -.unsupported { - background-color: #e0e0e0; -} - -</style> - -</head> - -<body> - -<h1>Test Cases for HTTP Content-Disposition header and RFC 2231/2047 Encoding</h1> - - -<h2>Test Cases</h2><div id="c-d-inline"><h3><a href="#c-d-inline" class="plain">Content-Disposition: Disposition-Type Inline</a></h3> - <p> - Various tests relating to the "inline" disposition type, see - <a href="http://greenbytes.de/tech/webdav/rfc2183.html#rfc.section.2.1">Section 2.1 of RFC 2183</a>. - </p> - <div id="inlonly"><h4><a href="#inlonly" class="plain">inlonly</a> - [<a href="http://greenbytes.de/tech/tc2231/inlonly.asis">TEST</a>] - </h4><pre><b>Content-Disposition: </b>inline</pre><table class="aside"><thead><tr><th colspan="2"> - Test Results - </th></tr></thead><tbody><tr class="pass"><td>FF3</td><td>pass</td></tr><tr class="pass"><td>MSIE8</td><td>pass</td></tr><tr class="pass"><td>Op10</td><td>pass</td></tr><tr class="pass"><td>Saf4</td><td>pass</td></tr><tr class="pass"><td>Konq</td><td>pass</td></tr><tr class="pass"><td>Chrome</td><td>pass</td></tr></tbody></table><p>'inline' only</p><p><em>This should be equivalent to not including the header at all.</em></p></div><div id="inlwithasciifilename"><h4><a href="#inlwithasciifilename" class="plain">inlwithasciifilename</a> - [<a href="http://greenbytes.de/tech/tc2231/inlwithasciifilename.asis">TEST</a>] - </h4><pre><b>Content-Disposition: </b>inline; filename="<b>foo.html</b>"</pre><table class="aside"><thead><tr><th colspan="2"> - Test Results - </th></tr></thead><tbody><tr class="pass"><td>FF3</td><td>pass - (uses the filename in subsequent 'save' operation) - </td></tr><tr class="pass"><td>MSIE8</td><td>pass - (filename information not used) - </td></tr><tr class="pass"><td>Op10</td><td>pass - (filename information not used) - </td></tr><tr class="pass"><td>Saf4</td><td>pass - (filename information not used) - </td></tr><tr class="pass"><td>Konq</td><td>pass - (filename information not used) - </td></tr><tr class="pass"><td>Chrome</td><td>pass - (filename information not used) - </td></tr></tbody></table><p> - 'inline', specifying a filename of <code>foo.html</code> - </p><p><em> - Some UAs use this filename in a subsequent "save" operation. - </em></p></div><div id="inlwithasciifilenamepdf"><h4><a href="#inlwithasciifilenamepdf" class="plain">inlwithasciifilenamepdf</a> - [<a href="http://greenbytes.de/tech/tc2231/inlwithasciifilenamepdf.asis">TEST</a>] - </h4><pre><b>Content-Disposition: </b>inline; filename="<b>foo.pdf</b>"</pre><table class="aside"><thead><tr><th colspan="2"> - Test Results - </th></tr></thead><tbody><tr class="pass"><td>FF3</td><td>pass - (filename information not used) - </td></tr><tr class="pass"><td>MSIE8</td><td>pass - (filename information not used) - </td></tr><tr class="pass"><td>Op10</td><td>pass - (filename information not used) - </td></tr><tr class="pass"><td>Saf4</td><td>pass - (filename information not used) - </td></tr><tr class="pass"><td>Konq</td><td>pass - (filename information not used) - </td></tr><tr class="pass"><td>Chrome</td><td>pass - (filename information not used) - </td></tr></tbody></table><p> - 'inline', specifying a filename of <code>foo.pdf</code> - </p><p><em> - Some UAs use this filename in a subsequent "save" operation. - This variation of the test checks whether whatever handles PDF display - receives the filename information, and acts upon it - (this was tested with the latest Acrobat Reader plugin). - </em></p></div></div><div id="c-d-attachment"><h3><a href="#c-d-attachment" class="plain">Content-Disposition: Disposition-Type Attachment</a></h3> - <p> - Various tests relating to the "attchment" disposition type, see - <a href="http://greenbytes.de/tech/webdav/rfc2183.html#rfc.section.2.2">Section 2.2 of RFC 2183</a>. - </p> - <div id="attonly"><h4><a href="#attonly" class="plain">attonly</a> - [<a href="http://greenbytes.de/tech/tc2231/attonly.asis">TEST</a>] - </h4><pre><b>Content-Disposition: </b>attachment</pre><table class="aside"><thead><tr><th colspan="2"> - Test Results - </th></tr></thead><tbody><tr class="pass"><td>FF3</td><td>pass</td></tr><tr class="pass"><td>MSIE8</td><td>pass</td></tr><tr class="pass"><td>Op10</td><td>pass</td></tr><tr class="pass"><td>Saf4</td><td>pass</td></tr><tr class="pass"><td>Konq</td><td>pass</td></tr><tr class="pass"><td>Chrome</td><td>pass</td></tr></tbody></table><p>'attachment' only</p><p><em>UA should offer to download the resource.</em></p></div><div id="attonlyucase"><h4><a href="#attonlyucase" class="plain">attonlyucase</a> - [<a href="http://greenbytes.de/tech/tc2231/attonlyucase.asis">TEST</a>] - </h4><pre><b>Content-Disposition: </b>ATTACHMENT</pre><table class="aside"><thead><tr><th colspan="2"> - Test Results - </th></tr></thead><tbody><tr class="pass"><td>FF3</td><td>pass</td></tr><tr class="pass"><td>MSIE8</td><td>pass</td></tr><tr class="pass"><td>Op10</td><td>pass</td></tr><tr class="pass"><td>Saf4</td><td>pass</td></tr><tr class="fail"><td>Konq</td><td>fail</td></tr><tr class="pass"><td>Chrome</td><td>pass</td></tr></tbody></table><p>'ATTACHMENT' only</p><p><em>UA should offer to download the resource.</em></p></div><div id="attwithasciifilename"><h4><a href="#attwithasciifilename" class="plain">attwithasciifilename</a> - [<a href="http://greenbytes.de/tech/tc2231/attwithasciifilename.asis">TEST</a>] - </h4><pre><b>Content-Disposition: </b>attachment; filename="<b>foo.html</b>"</pre><table class="aside"><thead><tr><th colspan="2"> - Test Results - </th></tr></thead><tbody><tr class="pass"><td>FF3</td><td>pass</td></tr><tr class="pass"><td>MSIE8</td><td>pass</td></tr><tr class="pass"><td>Op10</td><td>pass</td></tr><tr class="pass"><td>Saf4</td><td>pass</td></tr><tr class="pass"><td>Konq</td><td>pass</td></tr><tr class="pass"><td>Chrome</td><td>pass</td></tr></tbody></table><p> - 'attachment', specifying a filename of <code>foo.html</code> - </p><p><em>UA should offer to download the resource as "foo.html".</em></p></div><div id="attwithasciifnescapedchar"><h4><a href="#attwithasciifnescapedchar" class="plain">attwithasciifnescapedchar</a> - [<a href="http://greenbytes.de/tech/tc2231/attwithasciifnescapedchar.asis">TEST</a>] - </h4><pre><b>Content-Disposition: </b>attachment; filename="<b>f\oo.html</b>"</pre><table class="aside"><thead><tr><th colspan="2"> - Test Results - </th></tr></thead><tbody><tr class="fail"><td>FF3</td><td>fail - (apparently does not treat the backslash as escape character, replaces it with '_') - </td></tr><tr class="fail"><td>MSIE8</td><td>fail - (apparently does not treat the backslash as escape character, replaces it with '_') - </td></tr><tr class="pass"><td>Op10</td><td>pass</td></tr><tr class="fail"><td>Saf4</td><td>fail - (apparently does not treat the backslash as escape character, replaces it with '-') - </td></tr><tr class="pass"><td>Konq</td><td>pass</td></tr><tr class="fail"><td>Chrome</td><td>fail - (saves "oo.html" (what's going on here?)) - </td></tr></tbody></table><p> - 'attachment', specifying a filename of <code>f\oo.html</code> (the first 'o' being escaped) - </p><p><em>UA should offer to download the resource as "foo.html".</em></p></div><div id="attwithfilenameandextparam"><h4><a href="#attwithfilenameandextparam" class="plain">attwithfilenameandextparam</a> - [<a href="http://greenbytes.de/tech/tc2231/attwithfilenameandextparam.asis">TEST</a>] - </h4><pre><b>Content-Disposition: </b>attachment; foo="bar"; filename="<b>foo.html</b>"</pre><table class="aside"><thead><tr><th colspan="2"> - Test Results - </th></tr></thead><tbody><tr class="pass"><td>FF3</td><td>pass</td></tr><tr class="pass"><td>MSIE8</td><td>pass</td></tr><tr class="pass"><td>Op10</td><td>pass</td></tr><tr class="pass"><td>Saf4</td><td>pass</td></tr><tr class="pass"><td>Konq</td><td>pass</td></tr><tr class="pass"><td>Chrome</td><td>pass</td></tr></tbody></table><p> - 'attachment', specifying a filename of <code>foo.html</code> - and an extension parameter "foo" which should be ignored - (see <a href="http://greenbytes.de/tech/webdav/rfc2183.html#rfc.section.2.8">Section 2.8 of RFC 2183</a>.). - </p><p><em>UA should offer to download the resource as "foo.html".</em></p></div><div id="attwithasciifilenameucase"><h4><a href="#attwithasciifilenameucase" class="plain">attwithasciifilenameucase</a> - [<a href="http://greenbytes.de/tech/tc2231/attwithasciifilenameucase.asis">TEST</a>] - </h4><pre><b>Content-Disposition: </b>attachment; FILENAME="<b>foo.html</b>"</pre><table class="aside"><thead><tr><th colspan="2"> - Test Results - </th></tr></thead><tbody><tr class="pass"><td>FF3</td><td>pass</td></tr><tr class="pass"><td>MSIE8</td><td>pass</td></tr><tr class="pass"><td>Op10</td><td>pass</td></tr><tr class="pass"><td>Saf4</td><td>pass</td></tr><tr class="fail"><td>Konq</td><td>fail - (filename parameter is ignored) - </td></tr><tr class="pass"><td>Chrome</td><td>pass</td></tr></tbody></table><p> - 'attachment', specifying a filename of <code>foo.html</code> - </p><p><em>UA should offer to download the resource as "foo.html".</em></p></div><div id="attwithasciifilenamenq"><h4><a href="#attwithasciifilenamenq" class="plain">attwithasciifilenamenq</a> - [<a href="http://greenbytes.de/tech/tc2231/attwithasciifilenamenq.asis">TEST</a>] - </h4><pre class="invalid"><b>Content-Disposition: </b>attachment; filename=<b>foo.html</b></pre><table class="aside"><thead><tr><th colspan="2"> - Test Results - </th></tr></thead><tbody><tr class="warn"><td>FF3</td><td>warn - (accepts the unquoted value) - </td></tr><tr class="warn"><td>MSIE8</td><td>warn - (accepts the unquoted value) - </td></tr><tr class="warn"><td>Op10</td><td>warn - (accepts the unquoted value) - </td></tr><tr class="warn"><td>Saf4</td><td>warn - (accepts the unquoted value) - </td></tr><tr class="warn"><td>Konq</td><td>warn - (accepts the unquoted value) - </td></tr><tr class="warn"><td>Chrome</td><td>warn - (accepts the unquoted value) - </td></tr></tbody></table><p> - 'attachment', specifying a filename of <code>foo.html</code>, but missing - the quotes. - </p><p><em>This is invalid according to <a href="http://greenbytes.de/tech/webdav/rfc2616.html#rfc.section.19.5.1">Section 19.5.1 of RFC2616</a>, so UAs should - ignore it.</em></p></div><div id="attwithisofnplain"><h4><a href="#attwithisofnplain" class="plain">attwithisofnplain</a> - [<a href="http://greenbytes.de/tech/tc2231/attwithisofnplain.asis">TEST</a>] - </h4><pre><b>Content-Disposition: </b>attachment; filename="<b>foo-ä.html</b>"</pre><table class="aside"><thead><tr><th colspan="2"> - Test Results - </th></tr></thead><tbody><tr class="pass"><td>FF3</td><td>pass</td></tr><tr class="pass"><td>MSIE8</td><td>pass</td></tr><tr class="pass"><td>Op10</td><td>pass</td></tr><tr class="pass"><td>Saf4</td><td>pass</td></tr><tr class="pass"><td>Konq</td><td>pass</td></tr><tr class="pass"><td>Chrome</td><td>pass</td></tr></tbody></table><p> - 'attachment', specifying a filename of <code>foo-ä.html</code>, using plain ISO-8859-1 - </p><p><em>UA should offer to download the resource as "foo-ä.html".</em></p></div><div id="attwithutf8fnplain"><h4><a href="#attwithutf8fnplain" class="plain">attwithutf8fnplain</a> - [<a href="http://greenbytes.de/tech/tc2231/attwithutf8fnplain.asis">TEST</a>] - </h4><pre><b>Content-Disposition: </b>attachment; filename="<b>foo-ä.html</b>"</pre><table class="aside"><thead><tr><th colspan="2"> - Test Results - </th></tr></thead><tbody><tr class="fail"><td>FF3</td><td>fail - (decodes as UTF-8) - </td></tr><tr class="pass"><td>MSIE8</td><td>pass</td></tr><tr class="pass"><td>Op10</td><td>pass</td></tr><tr class="pass"><td>Saf4</td><td>pass</td></tr><tr class="pass"><td>Konq</td><td>pass</td></tr><tr class="fail"><td>Chrome</td><td>fail - (decodes as UTF-8) - </td></tr></tbody></table><p> - 'attachment', specifying a filename of <code>foo-ä.html</code>, - which happens to be <code>foo-ä.html</code> using UTF-8 encoding. - </p><p><em>UA should offer to download the resource as "foo-ä.html". - Displaying "foo-ä.html" instead indicates that the UA tried to be smart by detecting - something that happens to look like UTF-8.</em></p></div><div id="attwithfnrawpctenca"><h4><a href="#attwithfnrawpctenca" class="plain">attwithfnrawpctenca</a> - [<a href="http://greenbytes.de/tech/tc2231/attwithfnrawpctenca.asis">TEST</a>] - </h4><pre><b>Content-Disposition: </b>attachment; filename="<b>foo-%41.html</b>"</pre><table class="aside"><thead><tr><th colspan="2"> - Test Results - </th></tr></thead><tbody><tr class="pass"><td>FF3</td><td>pass</td></tr><tr class="fail"><td>MSIE8</td><td>fail - (displays "foo-A.html") - </td></tr><tr class="pass"><td>Op10</td><td>pass</td></tr><tr class="pass"><td>Saf4</td><td>pass</td></tr><tr class="pass"><td>Konq</td><td>pass</td></tr><tr class="fail"><td>Chrome</td><td>fail - (displays "foo-A.html" (see <a href="http://code.google.com/p/chromium/issues/detail?id=118">Chrome Issue 118</a>)) - </td></tr></tbody></table><p> - 'attachment', specifying a filename of <code>foo-%41.html</code> - </p><p><em>UA should offer to download the resource as "foo-%41.html". - Displaying "foo-A.html" instead would indicate that the UA has attempted - to percent-decode the parameter. - </em></p></div><div id="attwithfnrawpctenclong"><h4><a href="#attwithfnrawpctenclong" class="plain">attwithfnrawpctenclong</a> - [<a href="http://greenbytes.de/tech/tc2231/attwithfnrawpctenclong.asis">TEST</a>] - </h4><pre><b>Content-Disposition: </b>attachment; filename="<b>foo-%c3%a4-%e2%82%ac.html</b>"</pre><table class="aside"><thead><tr><th colspan="2"> - Test Results - </th></tr></thead><tbody><tr class="pass"><td>FF3</td><td>pass</td></tr><tr class="fail"><td>MSIE8</td><td>fail - (displays "foo-ä-€.html") - </td></tr><tr class="pass"><td>Op10</td><td>pass</td></tr><tr class="pass"><td>Saf4</td><td>pass</td></tr><tr class="pass"><td>Konq</td><td>pass</td></tr><tr class="fail"><td>Chrome</td><td>fail - (displays "foo-ä-€.html" (see <a href="http://code.google.com/p/chromium/issues/detail?id=118">Chrome Issue 118</a>)) - </td></tr></tbody></table><p> - 'attachment', specifying a filename of <code>foo-%c3%a4-%e2%82%ac.html</code>, using raw percent encoded UTF-8 - to represent <code>foo-ä-€.html</code> - </p><p><em>UA should offer to download the resource as "foo-%c3%a4-%e2%82%ac.html". - Displaying "foo-ä-€.html" instead would indicate that the UA has attempted - to percent-decode the parameter (using UTF-8). Displaying something else - would indicate that the UA tried to percent-decode, but used a different encoding. - </em></p></div><div id="attwithasciifilenamews1"><h4><a href="#attwithasciifilenamews1" class="plain">attwithasciifilenamews1</a> - [<a href="http://greenbytes.de/tech/tc2231/attwithasciifilenamews1.asis">TEST</a>] - </h4><pre><b>Content-Disposition: </b>attachment; filename ="<b>foo.html</b>"</pre><table class="aside"><thead><tr><th colspan="2"> - Test Results - </th></tr></thead><tbody><tr class="pass"><td>FF3</td><td>pass</td></tr><tr class="pass"><td>MSIE8</td><td>pass</td></tr><tr class="pass"><td>Op10</td><td>pass</td></tr><tr class="pass"><td>Saf4</td><td>pass</td></tr><tr class="pass"><td>Konq</td><td>pass</td></tr><tr class="pass"><td>Chrome</td><td>pass</td></tr></tbody></table><p> - 'attachment', specifying a filename of <code>foo.html</code>, with one - blank space <em>before</em> the equals character. - </p><p><em>UA should offer to download the resource as "foo.html".</em></p></div><div id="attwithasciifilenamews2"><h4><a href="#attwithasciifilenamews2" class="plain">attwithasciifilenamews2</a> - [<a href="http://greenbytes.de/tech/tc2231/attwithasciifilenamews2.asis">TEST</a>] - </h4><pre><b>Content-Disposition: </b>attachment; filename= "<b>foo.html</b>"</pre><table class="aside"><thead><tr><th colspan="2"> - Test Results - </th></tr></thead><tbody><tr class="pass"><td>FF3</td><td>pass</td></tr><tr class="pass"><td>MSIE8</td><td>pass</td></tr><tr class="pass"><td>Op10</td><td>pass</td></tr><tr class="pass"><td>Saf4</td><td>pass</td></tr><tr class="pass"><td>Konq</td><td>pass</td></tr><tr class="pass"><td>Chrome</td><td>pass</td></tr></tbody></table><p> - 'attachment', specifying a filename of <code>foo.html</code>, with one - blank space <em>after</em> the equals character. - </p><p><em>UA should offer to download the resource as "foo.html".</em></p></div><div id="attfnbrokentoken"><h4><a href="#attfnbrokentoken" class="plain">attfnbrokentoken</a> - [<a href="http://greenbytes.de/tech/tc2231/attfnbrokentoken.asis">TEST</a>] - </h4><pre class="invalid"><b>Content-Disposition: </b>attachment; filename=<b>foo[1](2).html</b></pre><table class="aside"><thead><tr><th colspan="2"> - Test Results - </th></tr></thead><tbody><tr class="warn"><td>FF3</td><td>warn - (accepts the unquoted value) - </td></tr><tr class="warn"><td>MSIE8</td><td>warn - (accepts the unquoted value) - </td></tr><tr class="warn"><td>Op10</td><td>warn - (accepts the unquoted value) - </td></tr><tr class="warn"><td>Saf4</td><td>warn - (accepts the unquoted value) - </td></tr><tr class="warn"><td>Konq</td><td>warn - (accepts the unquoted value) - </td></tr><tr class="warn"><td>Chrome</td><td>warn - (accepts the unquoted value) - </td></tr></tbody></table><p> - 'attachment', specifying a filename of <code>foo[1](2).html</code>, but missing - the quotes. Also, "[", "]", "(" and ")" are not allowed in the HTTP <a href="http://greenbytes.de/tech/webdav/draft-ietf-httpbis-p1-messaging-latest.html#rfc.section.1.2.2">token</a> - production. - </p><p><em>This is invalid according to <a href="http://greenbytes.de/tech/webdav/rfc2616.html#rfc.section.19.5.1">Section 19.5.1 of RFC2616</a>, - so UAs should ignore it.</em></p></div></div><div id="c-d-parms"><h3><a href="#c-d-parms" class="plain">Content-Disposition: Additional Parameters</a></h3> - <p> - Various tests relating to the additional parameters defined in - <a href="http://greenbytes.de/tech/webdav/rfc2183.html#rfc.section.2">Section 2 of RFC 2183</a>. - </p> - <div id="attcdate"><h4><a href="#attcdate" class="plain">attcdate</a> - [<a href="http://greenbytes.de/tech/tc2231/attcdate.asis">TEST</a>] - </h4><pre><b>Content-Disposition: </b>attachment; <b>creation-date="Wed, 12 Feb 1997 16:29:51 -0500"</b></pre><table class="aside"><thead><tr><th colspan="2"> - Test Results - </th></tr></thead><tbody><tr class="unsupported"><td>FF3</td><td>unsupported - (seems to ignore the parameter) - </td></tr><tr class="unsupported"><td>MSIE8</td><td>unsupported - (seems to ignore the parameter) - </td></tr><tr class="unsupported"><td>Op10</td><td>unsupported - (seems to ignore the parameter) - </td></tr><tr class="unsupported"><td>Saf4</td><td>unsupported - (seems to ignore the parameter) - </td></tr><tr class="unsupported"><td>Konq</td><td>unsupported - (seems to ignore the parameter) - </td></tr><tr class="unsupported"><td>Chrome</td><td>unsupported - (seems to ignore the parameter) - </td></tr></tbody></table><p>'attachment', plus creation-date (see <a href="http://greenbytes.de/tech/webdav/rfc2183.html#rfc.section.2.4">Section 2.4 of RFC 2183</a>)</p><p><em>UA should offer to download the resource. When doing so, - the creation date should be set to 12 Feb 1997.</em></p></div><div id="attmdate"><h4><a href="#attmdate" class="plain">attmdate</a> - [<a href="http://greenbytes.de/tech/tc2231/attmdate.asis">TEST</a>] - </h4><pre><b>Content-Disposition: </b>attachment; <b>modification-date="Wed, 12 Feb 1997 16:29:51 -0500"</b></pre><table class="aside"><thead><tr><th colspan="2"> - Test Results - </th></tr></thead><tbody><tr class="unsupported"><td>FF3</td><td>unsupported - (seems to ignore the parameter) - </td></tr><tr class="unsupported"><td>MSIE8</td><td>unsupported - (seems to ignore the parameter) - </td></tr><tr class="unsupported"><td>Op10</td><td>unsupported - (seems to ignore the parameter) - </td></tr><tr class="unsupported"><td>Saf4</td><td>unsupported - (seems to ignore the parameter) - </td></tr><tr class="unsupported"><td>Konq</td><td>unsupported - (seems to ignore the parameter) - </td></tr><tr class="unsupported"><td>Chrome</td><td>unsupported - (seems to ignore the parameter) - </td></tr></tbody></table><p>'attachment', plus modification-date (see <a href="http://greenbytes.de/tech/webdav/rfc2183.html#rfc.section.2.5">Section 2.5 of RFC 2183</a>)</p><p><em>UA should offer to download the resource. When doing so, - the modification date should be set to 12 Feb 1997.</em></p></div></div><div id="c-d-extension"><h3><a href="#c-d-extension" class="plain">Content-Disposition: Disposition-Type Extension</a></h3> - <p> - A test checking behavior for disposition type extensions, - which should be treated as "attachment", see - <a href="http://greenbytes.de/tech/webdav/rfc2183.html#rfc.section.2.8">Section 2.8 of RFC 2183</a>. - </p> - <div id="dispext"><h4><a href="#dispext" class="plain">dispext</a> - [<a href="http://greenbytes.de/tech/tc2231/dispext.asis">TEST</a>] - </h4><pre><b>Content-Disposition: </b>foobar</pre><table class="aside"><thead><tr><th colspan="2"> - Test Results - </th></tr></thead><tbody><tr class="pass"><td>FF3</td><td>pass</td></tr><tr class="fail (does not treat it as 'attachment')"><td>MSIE8</td><td>fail (does not treat it as 'attachment')</td></tr><tr class="fail (does not treat it as 'attachment')"><td>Op10</td><td>fail (does not treat it as 'attachment')</td></tr><tr class="fail (does not treat it as 'attachment')"><td>Saf4</td><td>fail (does not treat it as 'attachment')</td></tr><tr class="fail (does not treat it as 'attachment')"><td>Konq</td><td>fail (does not treat it as 'attachment')</td></tr><tr class="pass"><td>Chrome</td><td>pass</td></tr></tbody></table><p>'foobar' only</p><p><em>This should be equivalent to using "attachment".</em></p></div></div><div id="encoding-2231-char"><h3><a href="#encoding-2231-char" class="plain">RFC2231 Encoding: Character Sets</a></h3> - <p> - Various tests using the parameter value encoding defined - in <a href="http://greenbytes.de/tech/webdav/rfc2231.html#rfc.section.4">Section 4 of RFC 2231</a>. - </p> - <div id="attwithisofn2231iso"><h4><a href="#attwithisofn2231iso" class="plain">attwithisofn2231iso</a> - [<a href="http://greenbytes.de/tech/tc2231/attwithisofn2231iso.asis">TEST</a>] - </h4><pre><b>Content-Disposition: </b>attachment; filename*=<b>iso-8859-1''foo-%E4.html</b></pre><table class="aside"><thead><tr><th colspan="2"> - Test Results - </th></tr></thead><tbody><tr class="pass"><td>FF3</td><td>pass</td></tr><tr class="unsupported"><td>MSIE8</td><td>unsupported</td></tr><tr class="pass"><td>Op10</td><td>pass</td></tr><tr class="unsupported"><td>Saf4</td><td>unsupported</td></tr><tr class="unsupported"><td>Konq</td><td>unsupported</td></tr><tr class="unsupported"><td>Chrome</td><td>unsupported</td></tr></tbody></table><p> - 'attachment', specifying a filename of <code>foo-ä.html</code>, using RFC2231 encoded ISO-8859-1 - </p><p><em>UA should offer to download the resource as "foo-ä.html". - </em></p></div><div id="attwithfn2231utf8"><h4><a href="#attwithfn2231utf8" class="plain">attwithfn2231utf8</a> - [<a href="http://greenbytes.de/tech/tc2231/attwithfn2231utf8.asis">TEST</a>] - </h4><pre><b>Content-Disposition: </b>attachment; filename*=<b>UTF-8''foo-%c3%a4-%e2%82%ac.html</b></pre><table class="aside"><thead><tr><th colspan="2"> - Test Results - </th></tr></thead><tbody><tr class="pass"><td>FF3</td><td>pass</td></tr><tr class="unsupported"><td>MSIE8</td><td>unsupported</td></tr><tr class="pass"><td>Op10</td><td>pass</td></tr><tr class="unsupported"><td>Saf4</td><td>unsupported</td></tr><tr class="unsupported"><td>Konq</td><td>unsupported</td></tr><tr class="unsupported"><td>Chrome</td><td>unsupported</td></tr></tbody></table><p> - 'attachment', specifying a filename of <code>foo-ä-€.html</code>, using RFC2231 encoded UTF-8 - </p><p><em>UA should offer to download the resource as "foo-ä-€.html". - </em></p></div><div id="attwithfn2231noc"><h4><a href="#attwithfn2231noc" class="plain">attwithfn2231noc</a> - [<a href="http://greenbytes.de/tech/tc2231/attwithfn2231noc.asis">TEST</a>] - </h4><pre><b>Content-Disposition: </b>attachment; filename*=<b>''foo-%c3%a4-%e2%82%ac.html</b></pre><table class="aside"><thead><tr><th colspan="2"> - Test Results - </th></tr></thead><tbody><tr class="warn"><td>FF3</td><td>warn - (decodes as UTF-8) - </td></tr><tr class="unsupported"><td>MSIE8</td><td>unsupported</td></tr><tr class="warn"><td>Op10</td><td>warn - (decodes as 8bit encoding (ISO-8859-1?)) - </td></tr><tr class="unsupported"><td>Saf4</td><td>unsupported</td></tr><tr class="unsupported"><td>Konq</td><td>unsupported</td></tr><tr class="unsupported"><td>Chrome</td><td>unsupported</td></tr></tbody></table><p> - Behavior is undefined in RFC 2231, the charset part is missing, although UTF-8 was used. - </p></div><div id="attwithfn2231utf8comp"><h4><a href="#attwithfn2231utf8comp" class="plain">attwithfn2231utf8comp</a> - [<a href="http://greenbytes.de/tech/tc2231/attwithfn2231utf8comp.asis">TEST</a>] - </h4><pre><b>Content-Disposition: </b>attachment; filename*=<b>UTF-8''foo-a%cc%88.html</b></pre><table class="aside"><thead><tr><th colspan="2"> - Test Results - </th></tr></thead><tbody><tr class="pass"><td>FF3</td><td>pass</td></tr><tr class="unsupported"><td>MSIE8</td><td>unsupported</td></tr><tr class="warn"><td>Op10</td><td>warn - (displays "foo-ä.html") - </td></tr><tr class="unsupported"><td>Saf4</td><td>unsupported</td></tr><tr class="unsupported"><td>Konq</td><td>unsupported</td></tr><tr class="unsupported"><td>Chrome</td><td>unsupported</td></tr></tbody></table><p> - 'attachment', specifying a filename of <code>foo-ä.html</code>, using RFC2231 encoded UTF-8, but - choosing the decomposed form (lowercase a plus COMBINING DIAERESIS) -- - on a Windows target system, this should be translated to the preferred - Unicode normal form (composed). - </p><p><em>UA should offer to download the resource as "foo-ä.html". - </em></p></div><div id="attwithfn2231utf8-bad"><h4><a href="#attwithfn2231utf8-bad" class="plain">attwithfn2231utf8-bad</a> - [<a href="http://greenbytes.de/tech/tc2231/attwithfn2231utf8-bad.asis">TEST</a>] - </h4><pre class="invalid"><b>Content-Disposition: </b>attachment; filename*=<b>iso-8859-1''foo-%c3%a4-%e2%82%ac.html</b></pre><table class="aside"><thead><tr><th colspan="2"> - Test Results - </th></tr></thead><tbody><tr class="fail"><td>FF3</td><td>fail - (falls back to UTF-8) - </td></tr><tr class="unsupported"><td>MSIE8</td><td>unsupported</td></tr><tr class="warn"><td>Op10</td><td>warn - (displays the raw octet sequence as if it was ISO-8859-1 (which is internally - treated as windows-1252, which <em>does</em> allow %82)) - </td></tr><tr class="unsupported"><td>Saf4</td><td>unsupported</td></tr><tr class="unsupported"><td>Konq</td><td>unsupported</td></tr><tr class="unsupported"><td>Chrome</td><td>unsupported</td></tr></tbody></table><p> - 'attachment', specifying a filename of <code>foo-ä-€.html</code>, using RFC2231 encoded UTF-8, but declaring ISO-8859-1 - </p><p><em> - The octet %82 does not represent a valid ISO-8859-1 code point, so - the UA should really ignore the parameter. - </em></p></div><div id="attwithfn2231ws1"><h4><a href="#attwithfn2231ws1" class="plain">attwithfn2231ws1</a> - [<a href="http://greenbytes.de/tech/tc2231/attwithfn2231ws1.asis">TEST</a>] - </h4><pre class="invalid"><b>Content-Disposition: </b>attachment; filename<b> *=</b>UTF-8''foo-%c3%a4.html</pre><table class="aside"><thead><tr><th colspan="2"> - Test Results - </th></tr></thead><tbody><tr class="fail"><td>FF3</td><td>fail - (displays garbage) - </td></tr><tr class="unsupported"><td>MSIE8</td><td>unsupported</td></tr><tr class="pass"><td>Op10</td><td>pass</td></tr><tr class="unsupported"><td>Saf4</td><td>unsupported</td></tr><tr class="unsupported"><td>Konq</td><td>unsupported</td></tr><tr class="unsupported"><td>Chrome</td><td>unsupported</td></tr></tbody></table><p> - 'attachment', specifying a filename of <code>foo-ä.html</code>, using RFC2231 encoded UTF-8, with whitespace before "*=" - </p><p><em> - The parameter is invalid, thus should be ignored. - </em></p></div><div id="attwithfn2231ws2"><h4><a href="#attwithfn2231ws2" class="plain">attwithfn2231ws2</a> - [<a href="http://greenbytes.de/tech/tc2231/attwithfn2231ws2.asis">TEST</a>] - </h4><pre><b>Content-Disposition: </b>attachment; filename<b>*= </b>UTF-8''foo-%c3%a4.html</pre><table class="aside"><thead><tr><th colspan="2"> - Test Results - </th></tr></thead><tbody><tr class="pass"><td>FF3</td><td>pass</td></tr><tr class="unsupported"><td>MSIE8</td><td>unsupported</td></tr><tr class="pass"><td>Op10</td><td>pass</td></tr><tr class="unsupported"><td>Saf4</td><td>unsupported</td></tr><tr class="unsupported"><td>Konq</td><td>unsupported</td></tr><tr class="unsupported"><td>Chrome</td><td>unsupported</td></tr></tbody></table><p> - 'attachment', specifying a filename of <code>foo-ä.html</code>, using RFC2231 encoded UTF-8, with whitespace after "*=" - </p><p><em> - UA should offer to download the resource as "foo-ä.html". - </em></p></div><div id="attwithfn2231ws3"><h4><a href="#attwithfn2231ws3" class="plain">attwithfn2231ws3</a> - [<a href="http://greenbytes.de/tech/tc2231/attwithfn2231ws3.asis">TEST</a>] - </h4><pre><b>Content-Disposition: </b>attachment; filename<b>* =</b>UTF-8''foo-%c3%a4.html</pre><table class="aside"><thead><tr><th colspan="2"> - Test Results - </th></tr></thead><tbody><tr class="pass"><td>FF3</td><td>pass</td></tr><tr class="unsupported"><td>MSIE8</td><td>unsupported</td></tr><tr class="pass"><td>Op10</td><td>pass</td></tr><tr class="unsupported"><td>Saf4</td><td>unsupported</td></tr><tr class="unsupported"><td>Konq</td><td>unsupported</td></tr><tr class="unsupported"><td>Chrome</td><td>unsupported</td></tr></tbody></table><p> - 'attachment', specifying a filename of <code>foo-ä.html</code>, using RFC2231 encoded UTF-8, with whitespace inside "* =" - </p><p><em> - UA should offer to download the resource as "foo-ä.html". - </em></p></div><div id="attwithfn2231quot"><h4><a href="#attwithfn2231quot" class="plain">attwithfn2231quot</a> - [<a href="http://greenbytes.de/tech/tc2231/attwithfn2231quot.asis">TEST</a>] - </h4><pre class="invalid"><b>Content-Disposition: </b>attachment; filename*=<b>"</b>UTF-8''foo-%c3%a4.html<b>"</b></pre><table class="aside"><thead><tr><th colspan="2"> - Test Results - </th></tr></thead><tbody><tr class="fail"><td>FF3</td><td>fail - (tries to be helpful by removing the quotes) - </td></tr><tr class="unsupported"><td>MSIE8</td><td>unsupported</td></tr><tr class="pass"><td>Op10</td><td>pass</td></tr><tr class="unsupported"><td>Saf4</td><td>unsupported</td></tr><tr class="unsupported"><td>Konq</td><td>unsupported</td></tr><tr class="unsupported"><td>Chrome</td><td>unsupported</td></tr></tbody></table><p> - 'attachment', specifying a filename of <code>foo-ä.html</code>, using RFC2231 encoded UTF-8, with double quotes - around the parameter value. - </p><p><em> - The parameter is invalid, thus should be ignored. - </em></p></div><div id="attwithfn2231encmissing"><h4><a href="#attwithfn2231encmissing" class="plain">attwithfn2231encmissing</a> - [<a href="http://greenbytes.de/tech/tc2231/attwithfn2231encmissing.asis">TEST</a>] - </h4><pre class="invalid"><b>Content-Disposition: </b>attachment; filename*=<b>''foo-%c3%a4.html</b></pre><table class="aside"><thead><tr><th colspan="2"> - Test Results - </th></tr></thead><tbody><tr class="fail"><td>FF3</td><td>fail - (sniffs the encoding as UTF-8) - </td></tr><tr class="unsupported"><td>MSIE8</td><td>unsupported</td></tr><tr class="fail"><td>Op10</td><td>fail - (assumes a default of ISO-8859-1) - </td></tr><tr class="unsupported"><td>Saf4</td><td>unsupported</td></tr><tr class="unsupported"><td>Konq</td><td>unsupported</td></tr><tr class="unsupported"><td>Chrome</td><td>unsupported</td></tr></tbody></table><p> - 'attachment', specifying a filename of <code>foo-ä.html</code>, using RFC2231 encoded UTF-8, but - leaving out the charset field. - </p><p><em> - The parameter is invalid, thus should be ignored. - </em></p></div></div><div id="encoding-2231-cont"><h3><a href="#encoding-2231-cont" class="plain">RFC2231 Encoding: Continuations</a></h3> - <p> - Various tests using the parameter value continuation efined - in <a href="http://greenbytes.de/tech/webdav/rfc2231.html#rfc.section.3">Section 3 of RFC 2231</a>. - </p> - <div id="attfncont"><h4><a href="#attfncont" class="plain">attfncont</a> - [<a href="http://greenbytes.de/tech/tc2231/attfncont.asis">TEST</a>] - </h4><pre><b>Content-Disposition: </b>attachment; filename*0=<b>"foo."</b>; filename*1=<b>"html"</b></pre><table class="aside"><thead><tr><th colspan="2"> - Test Results - </th></tr></thead><tbody><tr class="pass"><td>FF3</td><td>pass</td></tr><tr class="unsupported"><td>MSIE8</td><td>unsupported</td></tr><tr class="pass"><td>Op10</td><td>pass</td></tr><tr class="unsupported"><td>Saf4</td><td>unsupported</td></tr><tr class="unsupported"><td>Konq</td><td>unsupported</td></tr><tr class="unsupported"><td>Chrome</td><td>unsupported</td></tr></tbody></table><p> - 'attachment', specifying a filename of <code>foo.html</code>, using RFC2231-style parameter continuations. - </p><p><em> - UA should offer to download the resource as "foo.html". - </em></p></div><div id="attfncontenc"><h4><a href="#attfncontenc" class="plain">attfncontenc</a> - [<a href="http://greenbytes.de/tech/tc2231/attfncontenc.asis">TEST</a>] - </h4><pre><b>Content-Disposition: </b>attachment; filename*0*=<b>UTF-8''foo-%c3%a4</b>; filename*1=<b>".html"</b></pre><table class="aside"><thead><tr><th colspan="2"> - Test Results - </th></tr></thead><tbody><tr class="pass"><td>FF3</td><td>pass</td></tr><tr class="unsupported"><td>MSIE8</td><td>unsupported</td></tr><tr class="pass"><td>Op10</td><td>pass</td></tr><tr class="unsupported"><td>Saf4</td><td>unsupported</td></tr><tr class="unsupported"><td>Konq</td><td>unsupported</td></tr><tr class="unsupported"><td>Chrome</td><td>unsupported</td></tr></tbody></table><p> - 'attachment', specifying a filename of <code>foo-ä.html</code>, using both RFC2231-style parameter continuations - and UTF-8 encoding. - </p><p><em> - UA should offer to download the resource as "foo-ä.html". - </em></p></div><div id="attfncontlz"><h4><a href="#attfncontlz" class="plain">attfncontlz</a> - [<a href="http://greenbytes.de/tech/tc2231/attfncontlz.asis">TEST</a>] - </h4><pre><b>Content-Disposition: </b>attachment; filename*0=<b>"foo"</b>; filename*01=<b>"bar"</b></pre><table class="aside"><thead><tr><th colspan="2"> - Test Results - </th></tr></thead><tbody><tr class="warn"><td>FF3</td><td>warn - (accepts leading zeros) - </td></tr><tr class="unsupported"><td>MSIE8</td><td>unsupported</td></tr><tr class="warn"><td>Op10</td><td>warn - (accepts leading zeros) - </td></tr><tr class="unsupported"><td>Saf4</td><td>unsupported</td></tr><tr class="unsupported"><td>Konq</td><td>unsupported</td></tr><tr class="unsupported"><td>Chrome</td><td>unsupported</td></tr></tbody></table><p> - 'attachment', specifying a filename of <code>foo</code> (the parameter filename*01 should be ignored because of the leading zero) - </p><p><em> - UA should offer to download the resource as "foo". - </em></p></div><div id="attfncontnc"><h4><a href="#attfncontnc" class="plain">attfncontnc</a> - [<a href="http://greenbytes.de/tech/tc2231/attfncontnc.asis">TEST</a>] - </h4><pre><b>Content-Disposition: </b>attachment; filename*0=<b>"foo"</b>; filename*2=<b>"bar"</b></pre><table class="aside"><thead><tr><th colspan="2"> - Test Results - </th></tr></thead><tbody><tr class="warn"><td>FF3</td><td>warn - (accepts gaps) - </td></tr><tr class="unsupported"><td>MSIE8</td><td>unsupported</td></tr><tr class="pass"><td>Op10</td><td>pass</td></tr><tr class="unsupported"><td>Saf4</td><td>unsupported</td></tr><tr class="unsupported"><td>Konq</td><td>unsupported</td></tr><tr class="unsupported"><td>Chrome</td><td>unsupported</td></tr></tbody></table><p> - 'attachment', specifying a filename of <code>foo</code> (the parameter filename*2 because there's no filename*1 parameter) - </p><p><em> - UA should offer to download the resource as "foo". - </em></p></div><div id="attfnconts1"><h4><a href="#attfnconts1" class="plain">attfnconts1</a> - [<a href="http://greenbytes.de/tech/tc2231/attfnconts1.asis">TEST</a>] - </h4><pre><b>Content-Disposition: </b>attachment; filename*1=<b>"foo."</b>; filename*2=<b>"html"</b></pre><table class="aside"><thead><tr><th colspan="2"> - Test Results - </th></tr></thead><tbody><tr class="pass"><td>FF3</td><td>pass</td></tr><tr class="unsupported"><td>MSIE8</td><td>unsupported</td></tr><tr class="pass"><td>Op10</td><td>pass</td></tr><tr class="unsupported"><td>Saf4</td><td>unsupported</td></tr><tr class="unsupported"><td>Konq</td><td>unsupported</td></tr><tr class="unsupported"><td>Chrome</td><td>unsupported</td></tr></tbody></table><p> - 'attachment' (the filename* parameters should be ignored because filename*0 is missing) - </p><p><em> - UA should offer to download, not getting the filename from the header. - </em></p></div><div id="attfncontord"><h4><a href="#attfncontord" class="plain">attfncontord</a> - [<a href="http://greenbytes.de/tech/tc2231/attfncontord.asis">TEST</a>] - </h4><pre><b>Content-Disposition: </b>attachment; filename*1=<b>"bar"</b>; filename*0=<b>"foo"</b></pre><table class="aside"><thead><tr><th colspan="2"> - Test Results - </th></tr></thead><tbody><tr class="fail"><td>FF3</td><td>fail - (parameters are expected to be ordered) - </td></tr><tr class="unsupported"><td>MSIE8</td><td>unsupported</td></tr><tr class="pass"><td>Op10</td><td>pass</td></tr><tr class="unsupported"><td>Saf4</td><td>unsupported</td></tr><tr class="unsupported"><td>Konq</td><td>unsupported</td></tr><tr class="unsupported"><td>Chrome</td><td>unsupported</td></tr></tbody></table><p> - 'attachment', specifying a filename of <code>foobar</code> - </p><p><em> - UA should offer to download the resource as "foobar". - </em></p></div></div><div id="encoding-2231-fb"><h3><a href="#encoding-2231-fb" class="plain">RFC2231 Encoding: Fallback Behaviour</a></h3> - <p> - This tests how the UA behaves when the same parameter name appear - both in traditional and RFC 2231 extended format. - </p> - <div id="attfnboth"><h4><a href="#attfnboth" class="plain">attfnboth</a> - [<a href="http://greenbytes.de/tech/tc2231/attfnboth.asis">TEST</a>] - </h4><pre><b>Content-Disposition: </b>attachment; filename="<b>foo-ae.html</b>"; filename*=<b>UTF-8''foo-%c3%a4.html</b></pre><table class="aside"><thead><tr><th colspan="2"> - Test Results - </th></tr></thead><tbody><tr class="pass"><td>FF3</td><td>pass - (picks the traditionally encoded value -- the first of both) - </td></tr><tr class="pass"><td>MSIE8</td><td>pass - (picks the traditionally encoded value -- the first of both) - </td></tr><tr class="pass"><td>Op10</td><td>pass - (picks the traditionally encoded value -- the first of both) - </td></tr><tr class="pass"><td>Saf4</td><td>pass - (picks the traditionally encoded value -- the first of both) - </td></tr><tr class="pass"><td>Konq</td><td>pass - (picks the traditionally encoded value -- the first of both) - </td></tr><tr class="pass"><td>Chrome</td><td>pass - (picks the traditionally encoded value -- the first of both) - </td></tr></tbody></table><p> - 'attachment', specifying a filename of <code>foo-ae.html</code> in - the traditional format, and <code>foo-ä.html</code> in RFC2231 format. - </p><p><em> - The behaviour of this undefined. Thus UAs should one of the two values. - </em></p></div><div id="attfnboth2"><h4><a href="#attfnboth2" class="plain">attfnboth2</a> - [<a href="http://greenbytes.de/tech/tc2231/attfnboth2.asis">TEST</a>] - </h4><pre><b>Content-Disposition: </b>attachment; filename*=<b>UTF-8''foo-%c3%a4.html</b>; filename=<b>"foo-ae.html"</b></pre><table class="aside"><thead><tr><th colspan="2"> - Test Results - </th></tr></thead><tbody><tr class="pass"><td>FF3</td><td>pass - (picks the RFC2231 encoded value -- the first of both) - </td></tr><tr class="fail"><td>MSIE8</td><td>fail - (ignores the parameter (this indicates a parsing bug)) - </td></tr><tr class="pass"><td>Op10</td><td>pass - (picks the RFC2231 encoded value -- the first of both) - </td></tr><tr class="pass"><td>Saf4</td><td>pass - (picks the traditionally encoded value -- the one it understands) - </td></tr><tr class="pass"><td>Konq</td><td>pass - (picks the traditionally encoded value -- the one it understands) - </td></tr><tr class="fail"><td>Chrome</td><td>fail - (ignores the parameter (this indicates a parsing bug)) - </td></tr></tbody></table><p> - 'attachment', specifying a filename of <code>foo-ae.html</code> in - the traditional format, and <code>foo-ä.html</code> in RFC2231 format. - </p><p><em> - The behaviour of this undefined. Thus UAs should one of the two values. - </em></p></div></div><div id="encoding-2047"><h3><a href="#encoding-2047" class="plain">RFC2047 Encoding</a></h3> - <p> - These tests RFC 2047 style encoding. - </p> - <p> - Note that according to <a href="http://greenbytes.de/tech/webdav/rfc2047.html#rfc.section.5">Section 5 of RFC 2047</a>, - this encoding does not apply here: <q cite="http://greenbytes.de/tech/webdav/rfc2047.html#rfc.section.5">An 'encoded-word' MUST NOT appear within a 'quoted-string'.</q>, and - <q cite="http://greenbytes.de/tech/webdav/rfc2047.html#rfc.section.5">An 'encoded-word' MUST NOT be used in parameter of a MIME - Content-Type or Content-Disposition field, or in any structured - field body except within a 'comment' or 'phrase'.</q> - </p> - <p> - Therefore, these tests are only be present in order to check - whether the UA by mistake tries to implement RFC2047. - </p> - <div id="attrfc2047token"><h4><a href="#attrfc2047token" class="plain">attrfc2047token</a> - [<a href="http://greenbytes.de/tech/tc2231/attrfc2047token.asis">TEST</a>] - </h4><pre><b>Content-Disposition: </b>attachment; filename=<b>=?ISO-8859-1?Q?foo-=E4.html?=</b></pre><table class="aside"><thead><tr><th colspan="2"> - Test Results - </th></tr></thead><tbody><tr class="fail"><td>FF3</td><td>fail - (decodes it anyway to "foo-ä.html") - </td></tr><tr class="pass"><td>MSIE8</td><td>pass - (takes the whole value as filename, but does not decode it (replacing question marks by underscores)) - </td></tr><tr class="fail"><td>Op10</td><td>fail - (displays garbage ("=.htm")) - </td></tr><tr class="pass"><td>Saf4</td><td>pass - (takes the whole value as filename, but does not decode it (replacing question marks by underscores)) - </td></tr><tr class="fail"><td>Konq</td><td>fail - (decodes it anyway to "foo-ä.html") - </td></tr><tr class="fail"><td>Chrome</td><td>fail - (decodes it anyway to "foo-ä.html") - </td></tr></tbody></table><p> - Uses RFC 2047 style encoded word. "=" is invalid inside the <code>token</code> - production, so this is invalid. - </p></div><div id="attrfc2047quoted"><h4><a href="#attrfc2047quoted" class="plain">attrfc2047quoted</a> - [<a href="http://greenbytes.de/tech/tc2231/attrfc2047quoted.asis">TEST</a>] - </h4><pre><b>Content-Disposition: </b>attachment; filename=<b>"=?ISO-8859-1?Q?foo-=E4.html?="</b></pre><table class="aside"><thead><tr><th colspan="2"> - Test Results - </th></tr></thead><tbody><tr class="fail"><td>FF3</td><td>fail - (decodes it anyway to "foo-ä.html") - </td></tr><tr class="pass"><td>MSIE8</td><td>pass - (takes the whole value as filename, but does not decode it) - </td></tr><tr class="fail"><td>Op10</td><td>fail - (displays garbage ("=.htm")) - </td></tr><tr class="pass"><td>Saf4</td><td>pass - (takes the whole value as filename, but does not decode it) - </td></tr><tr class="fail"><td>Konq</td><td>fail - (decodes it anyway to "foo-ä.html") - </td></tr><tr class="fail"><td>Chrome</td><td>fail - (decodes it anyway to "foo-ä.html") - </td></tr></tbody></table><p> - Uses RFC 2047 style encoded word, using the <code>quoted-string</code> production. - </p></div></div> -</body></html>
\ No newline at end of file diff --git a/src/tests/html/charset_ISO_8859_1.html b/src/tests/html/charset_ISO_8859_1.html deleted file mode 100644 index 587a8bb5..00000000 --- a/src/tests/html/charset_ISO_8859_1.html +++ /dev/null @@ -1,12 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> -<html> -<head> -<meta content="text/html; charset=ISO-8859-1" http-equiv="content-type"> -<title>Charset ISO-8859-1</title> -</head> -<body> -CHARSET: ISO 8859 1<br /> -This document contains strange text: à è ì ò ù <br /> -Chinese text: ??, ????????? <br /> -</body> -</html> diff --git a/src/tests/html/charset_NULL.html b/src/tests/html/charset_NULL.html deleted file mode 100644 index 6e5598fa..00000000 --- a/src/tests/html/charset_NULL.html +++ /dev/null @@ -1,11 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> -<html> -<head> -<title>Charset NULL</title> -</head> -<body> -CHARSET: NULL<br /> -This document contains strange text: à è ì ò ù <br /> -Chinese text: ??, ????????? <br /> -</body> -</html> diff --git a/src/tests/html/charset_UTF_8.html b/src/tests/html/charset_UTF_8.html deleted file mode 100644 index cc63d0e1..00000000 --- a/src/tests/html/charset_UTF_8.html +++ /dev/null @@ -1,12 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> -<html> -<head> -<meta content="text/html; charset=utf8" http-equiv="content-type"> -<title>Charset UTF-8</title> -</head> -<body> -CHARSET: UTF-8<br /> -This document contains strange text: à è ì ò ù <br /> -Chinese text: 激光, 這兩個å—是甚麼æ„æ€ <br /> -</body> -</html> diff --git a/src/tests/html/font_test.html b/src/tests/html/font_test.html deleted file mode 100644 index 2e889ea8..00000000 --- a/src/tests/html/font_test.html +++ /dev/null @@ -1,24 +0,0 @@ -<html> - -<head> -</head> - -<body> - -<p style="font-family:'Dejavu Sans'"> -This should be Dejavu Sans. -</p> - -<p style="font-family:'Dejavu Sans Mono'"> -This should be Dejavu Sans Mono. -</p> - -<p style="font-family:'Dejavu Serif'"> -This should be Dejavu Serif. -</p> - - -</body> - - -</html> diff --git a/src/tests/html/js_window_close.html b/src/tests/html/js_window_close.html deleted file mode 100644 index bf945bbc..00000000 --- a/src/tests/html/js_window_close.html +++ /dev/null @@ -1,3 +0,0 @@ -<form> -<input type=button value="Chiudi" onClick="javascript:window.close()" name="button"> -</form>
\ No newline at end of file diff --git a/src/tests/html/link_test.html b/src/tests/html/link_test.html deleted file mode 100644 index 8798f3bc..00000000 --- a/src/tests/html/link_test.html +++ /dev/null @@ -1,165 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> -<head> -<title>link tests</title> -</head> - -<body> - -<h1>Usual Link Tests</h1> - -<table border="1" width="100%"> -<tr> -<th>URL</th> -<th>Description</th> -<th>link</th> -<th>_blank link</th> -</tr> - -<tr> -<td>file:///home</td> -<td>Just a simple local url</td> -<td><a href="file:///home">link</a></td> -<td><a href="file:///home" target="_blank">link</a></td> -</tr> - -<tr> -<td>gg:ciao</td> -<td>KDE shortcut</td> -<td><a href="gg:ciao">link</a></td> -<td><a href="gg:ciao" target="_blank">link</a></td> -</tr> - -<tr> -<td>ftp://ftp.eutelia.it/</td> -<td>FTP test link</td> -<td><a href="ftp://ftp.eutelia.it/">link</a></td> -<td><a href="ftp://ftp.eutelia.it/" target="_blank">link</a></td> -</tr> - -<tr> -<td>http://kde-apps.org</td> -<td>kde apps let us test css, javascript, adblock, etc..</td> -<td><a href="http://kde-apps.org">link</a></td> -<td><a href="http://kde-apps.org" target="_blank">link</a></td> -</tr> - -<tr> -<td>http://pcimpact.com</td> -<td>PCImpact, a link to test adblock</td> -<td><a href="http://pcimpact.com">link</a></td> -<td><a href="http://pcimpact.com" target="_blank">link</a></td> -</tr> - -<tr> -<td>http://www.redhat.com/magazine/015jan06/features/valgrind/</td> -<td>Sporadic crashes here :(</td> -<td><a href="http://www.redhat.com/magazine/015jan06/features/valgrind/">link</a></td> -<td><a href="http://www.redhat.com/magazine/015jan06/features/valgrind/" target="_blank">link</a></td> -</tr> - -<tr> -<td>http://upg.de/</td> -<td>Doesn't work :(</td> -<td><a href="http://upg.de/">link</a></td> -<td><a href="http://upg.de/" target="_blank">link</a></td> -</tr> - -<tr> -<td>http://shop.upg.de/</td> -<td>The link the previous should open :(</td> -<td><a href="http://shop.upg.de/">link</a></td> -<td><a href="http://shop.upg.de/" target="_blank">link</a></td> -</tr> - -<tr> -<td>https://launchpad.net/</td> -<td>Test https link</td> -<td><a href="https://launchpad.net/">link</a></td> -<td><a href="https://launchpad.net/" target="_blank">link</a></td> -</tr> - -<tr> -<td>https://koesterreich.de/rekonq-test</td> -<td>SSL test link</td> -<td><a href="https://koesterreich.de/rekonq-test">link</a></td> -<td><a href="https://koesterreich.de/rekonq-test" target="_blank">link</a></td> -</tr> - -<tr> -<td>http://www.packtpub.com/article/developing-the-joomla-com</td> -<td>Some Crashes here :(</td> -<td><a href="http://www.packtpub.com/article/developing-the-joomla-com">link</a></td> -<td><a href="http://www.packtpub.com/article/developing-the-joomla-com" target="_blank">link</a></td> -</tr> - -<tr> -<td>http://jamendo.com</td> -<td>Bug 214321 (CSS hover popups)</td> -<td><a href="http://jamendo.com">link</a></td> -<td><a href="http://jamendo.com" target="_blank">link</a></td> -</tr> - -<tr> -<td>http://npaste.de/4h</td> -<td>WebKit problem with pre tag</td> -<td><a href="http://npaste.de/4h">link</a></td> -<td><a href="http://npaste.de/4h" target="_blank">link</a></td> -</tr> - -<tr> -<td>http://wiki.ubuntuusers.de/Bfilter</td> -<td>Some crashes signaled here (it works here!)</td> -<td><a href="http://wiki.ubuntuusers.de/Bfilter">link</a></td> -<td><a href="http://wiki.ubuntuusers.de/Bfilter" target="_blank">link</a></td> -</tr> - -<tr> -<td>http://service.futuremark.com/peacekeeper/index.action</td> -<td>rekonq 0.3 + Qt 4.6 seems crash here :(</td> -<td><a href="http://service.futuremark.com/peacekeeper/index.action">link</a></td> -<td><a href="http://service.futuremark.com/peacekeeper/index.action" target="_blank">link</a></td> -</tr> - -<tr> -<td>http://reddit.com</td> -<td>Bug 216738, difficult adding comments.</td> -<td><a href="http://reddit.com">link</a></td> -<td><a href="http://reddit.com" target="_blank">link</a></td> -</tr> - -<tr> -<td>http://www.osnews.com</td> -<td>AdBlock related problem</td> -<td><a href="http://www.osnews.com">link</a></td> -<td><a href="http://www.osnews.com" target="_blank">link</a></td> -</tr> - -<tr> -<td>http://ads.cnn.com/</td> -<td>Again, adblock problem :(</td> -<td><a href="http://ads.cnn.com/">link</a></td> -<td><a href="http://ads.cnn.com/" target="_blank">link</a></td> -</tr> - - -<tr> -<td>http://ja.wikipedia.org/wiki/特別:最近ã®æ›´æ–°</td> -<td>KGet import links with particular encoding</td> -<td><a href="http://ja.wikipedia.org/wiki/特別:最近ã®æ›´æ–°">link</a></td> -</tr> - -<tr> -<td></td> -<td></td> -<td><a href="">link</a></td> -<td><a href="" target="_blank">link</a></td> -</tr> - - -</table> - - -</body> - -</html> diff --git a/src/tests/html/test_with_dark_colors.html b/src/tests/html/test_with_dark_colors.html deleted file mode 100644 index 8bb20d74..00000000 --- a/src/tests/html/test_with_dark_colors.html +++ /dev/null @@ -1,7 +0,0 @@ -<html><head> -<meta http-equiv="content-type" content="text/html; charset=UTF-8"> - - </head><body><h1>Hello World!</h1> - <p>No colours are set (text or background). This is not legible -with a dark colour scheme in KDE.</p> - </body></html>
\ No newline at end of file diff --git a/src/tests/listitem_test.cpp b/src/tests/listitem_test.cpp deleted file mode 100644 index bfa22139..00000000 --- a/src/tests/listitem_test.cpp +++ /dev/null @@ -1,95 +0,0 @@ -/* - * Copyright 2010-2011 Pierre Rossi <pierre.rossi@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 - */ - - - -#include <qtest_kde.h> - -#include "listitem.h" - - -class ListItemTest : public QObject -{ - Q_OBJECT - -public Q_SLOTS: - void initTestCase(); - void cleanupTestCase(); - -private Q_SLOTS: - - void wordHighLighting_data(); - void wordHighLighting(); - -}; - - -// ------------------------------------------- - -void ListItemTest::initTestCase() -{ -} - - -void ListItemTest::cleanupTestCase() -{ -} - - -// ------------------------------------------- - -void ListItemTest::wordHighLighting_data() -{ - QTest::addColumn<QString>("string"); - QTest::addColumn<QString>("wordsToHighlight"); - QTest::addColumn<QString>("expected"); - - QTest::newRow("plan b") << "<i>http://www.google.com/search?q=plan b&ie=UTF-8&oe=UTF-8</i>" - << "plan b" << "<i>http://www.google.com/search?q=<b>plan</b> <b>b</b>&ie=UTF-8&oe=UTF-8</i>"; - QTest::newRow("plan b #2") << "<i>http://en.wikipedia.org/wiki/Plan_B_(British_musician)</i>" - << "plan b" << "<i>http://en.wikipedia.org/wiki/<b>Plan</b>_<b>B</b>_(<b>B</b>ritish_musician)</i>"; - QTest::newRow("i") << "<i>http://i.imgur.com/jacoj.jpg</i>" << "i" - << "<i>http://<b>i</b>.<b>i</b>mgur.com/jacoj.jpg</i>"; - QTest::newRow("i#2") << "KDE - Experience Freedom!" << "i" << "KDE - Exper<b>i</b>ence Freedom!"; - QTest::newRow("i#3") << "The WebKit Open Source Project" << "i" << "The WebK<b>i</b>t Open Source Project"; - QTest::newRow("i#4") << "<i>http://webkit.org/</i>" << "i" << "<i>http://webk<b>i</b>t.org/</i>"; - QTest::newRow("b") << "<i>http://mail.google.com/mail/#inbox</i>" << "b" << "<i>http://mail.google.com/mail/#in<b>b</b>ox</i>"; - QTest::newRow("b#2") << "rekonq, WebKit KDE browser" << "b" << "rekonq, We<b>b</b>Kit KDE <b>b</b>rowser"; - QTest::newRow("<") << "Subject < Section < Wiki" << "<" << "Subject <b><</b> Section <b><</b> Wiki"; - QTest::newRow("&") << "<i>http://www.google.com/search?q=qt test&ie=UTF-8&oe=UTF-8</i>" << "&" - << "<i>http://www.google.com/search?q=qt test<b>&</b>ie=UTF-8<b>&</b>oe=UTF-8</i>"; - QTest::newRow("ciao") << "ciao" << "ciao" << "<b>ciao</b>"; - QTest::newRow("http://ciao") << "http://ciao" << "ciao" << "http://<b>ciao</b>"; -} - -void ListItemTest::wordHighLighting() -{ - QFETCH(QString, string); - QFETCH(QString, wordsToHighlight); - QFETCH(QString, expected); - - TextLabel test(string, wordsToHighlight); - QCOMPARE(test.text(), expected); -} - - -// ------------------------------------------- - -QTEST_KDEMAIN(ListItemTest, GUI) -#include "listitem_test.moc" diff --git a/src/tests/mainview_test.cpp b/src/tests/mainview_test.cpp deleted file mode 100644 index 8426dba1..00000000 --- a/src/tests/mainview_test.cpp +++ /dev/null @@ -1,418 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2008 by Benjamin C. Meyer <ben@meyerhome.net> -* Copyright (C) 2009-2011 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/>. -* -* ============================================================ */ - - -#include <qtest_kde.h> - -#include "mainwindow.h" -#include "mainview.h" -#include "webview.h" - - -class MainViewTest : public QObject -{ - Q_OBJECT - -public Q_SLOTS: - void initTestCase(); - void cleanupTestCase(); - -private Q_SLOTS: - void tabwidget_data(); - void tabwidget(); - - void closeTab_data(); - void closeTab(); - - void currentWebView_data(); - void currentWebView(); - - void newTab_data(); - void newTab(); - - void nextTab_data(); - void nextTab(); - - void previousTab_data(); - void previousTab(); - - void recentlyClosedTabs_data(); - void recentlyClosedTabs(); - - void setCurrentTitle_data(); - void setCurrentTitle(const QString &); - - void showStatusBarMessage_data(); - void showStatusBarMessage(const QString &); - - void currentChanged_data(); - void currentChanged(); - -private: - MainWindow *window; - MainView *view; -}; - - -// ------------------------------------------------------------------------------- - - -// This will be called before the first test function is executed. -// It is only called once. -void MainViewTest::initTestCase() -{ - window = new MainWindow; - view = window->mainView(); -} - -// This will be called after the last test function is executed. -// It is only called once. -void MainViewTest::cleanupTestCase() -{ -// delete window; // FIXME: this let the test fail. Why?? -} - -// ------------------------------------------- - -void MainViewTest::tabwidget_data() -{ -} - -void MainViewTest::tabwidget() -{ - QCOMPARE(view->currentIndex(), -1); - -// view->newTab(); -// QCOMPARE(view->currentIndex(), 1); -// view->newTab(); -// view->nextTab(); -// QCOMPARE(view->currentIndex(), 0); -// -// view->previousTab(); -// QCOMPARE(view->currentIndex(), 0); -} - -// ------------------------------------------- - -void MainViewTest::closeTab_data() -{ - QTest::addColumn<int>("index"); - QTest::newRow("null") << 0; -} - - -void MainViewTest::closeTab() -{ -// QFETCH(int, index); -// -// QSignalSpy spy1(view, SIGNAL(linkHovered(QString))); -// QSignalSpy spy2(view, SIGNAL(setCurrentTitle(QString))); -// QSignalSpy spy3(view, SIGNAL(tabsChanged())); -// QSignalSpy spy4(view, SIGNAL(lastTabClosed())); -// -// view->newTab(); -// view->closeTab(index); -// view->newTab(); -// view->closeTab(index); -// view->newTab(); -// -// QCOMPARE(spy1.count(), 0); -// QCOMPARE(spy2.count(), 2); -// QCOMPARE(spy3.count(), 0); -// QCOMPARE(spy4.count(), 0); -} - -// ------------------------------------------- - -void MainViewTest::currentWebView_data() -{ - /* - QTest::addColumn<WebView*>("currentWebView"); - QTest::newRow("null") << WebView*(); - */ -} - -void MainViewTest::currentWebView() -{ - /* - QFETCH(WebView*, currentWebView); - - SubMainView widget; - - QSignalSpy spy0(view, SIGNAL(linkHovered(QString))); - QSignalSpy spy2(view, SIGNAL(loadProgress(int))); - QSignalSpy spy3(view, SIGNAL(setCurrentTitle(QString))); - QSignalSpy spy4(view, SIGNAL(showStatusBarMessage(QString))); - QSignalSpy spy5(view, SIGNAL(tabsChanged())); - QSignalSpy spy6(view, SIGNAL(lastTabClosed())); - - QCOMPARE(widget.currentWebView(), currentWebView); - - QCOMPARE(spy0.count(), 0); - QCOMPARE(spy2.count(), 0); - QCOMPARE(spy3.count(), 0); - QCOMPARE(spy4.count(), 0); - QCOMPARE(spy5.count(), 0); - QCOMPARE(spy6.count(), 0); - */ - QSKIP("Test is not implemented.", SkipAll); -} - -// ------------------------------------------- - -void MainViewTest::newTab_data() -{ - QTest::addColumn<int>("foo"); - QTest::newRow("null") << 0; -} - - -void MainViewTest::newTab() -{ -// QFETCH(int, foo); -// -// QSignalSpy spy0(view, SIGNAL(linkHovered(QString))); -// QSignalSpy spy1(view, SIGNAL(setCurrentTitle(QString))); -// QSignalSpy spy2(view, SIGNAL(showStatusBarMessage(QString))); -// QSignalSpy spy3(view, SIGNAL(tabsChanged())); -// QSignalSpy spy4(view, SIGNAL(lastTabClosed())); -// -// view->newTab(); -// -// QCOMPARE(spy0.count(), 0); -// QCOMPARE(spy1.count(), 0); -// QCOMPARE(spy2.count(), 0); -// QCOMPARE(spy3.count(), 0); -// QCOMPARE(spy4.count(), 0); -} - -// ------------------------------------------- - -void MainViewTest::nextTab_data() -{ - QTest::addColumn<int>("foo"); - QTest::newRow("null") << 0; -} - -// public void nextTab() -void MainViewTest::nextTab() -{ - /* - QFETCH(int, foo); - - SubMainView widget; - - QSignalSpy spy0(view, SIGNAL(linkHovered(QString))); - QSignalSpy spy2(view, SIGNAL(loadProgress(int))); - QSignalSpy spy3(view, SIGNAL(setCurrentTitle(QString))); - QSignalSpy spy4(view, SIGNAL(showStatusBarMessage(QString))); - QSignalSpy spy5(view, SIGNAL(tabsChanged())); - QSignalSpy spy6(view, SIGNAL(lastTabClosed())); - - widget.nextTab(); - - QCOMPARE(spy0.count(), 0); - QCOMPARE(spy2.count(), 0); - QCOMPARE(spy3.count(), 0); - QCOMPARE(spy4.count(), 0); - QCOMPARE(spy5.count(), 0); - QCOMPARE(spy6.count(), 0); - */ - QSKIP("Test is not implemented.", SkipAll); -} - -// ------------------------------------------- - -void MainViewTest::previousTab_data() -{ - QTest::addColumn<int>("foo"); - QTest::newRow("null") << 0; -} - - -// public void previousTab() -void MainViewTest::previousTab() -{ - /* - QFETCH(int, foo); - - SubMainView widget; - - QSignalSpy spy0(view, SIGNAL(linkHovered(QString))); - QSignalSpy spy2(view, SIGNAL(loadProgress(int))); - QSignalSpy spy3(view, SIGNAL(setCurrentTitle(QString))); - QSignalSpy spy4(view, SIGNAL(showStatusBarMessage(QString))); - QSignalSpy spy5(view, SIGNAL(tabsChanged())); - QSignalSpy spy6(view, SIGNAL(lastTabClosed())); - - widget.previousTab(); - - QCOMPARE(spy0.count(), 0); - QCOMPARE(spy2.count(), 0); - QCOMPARE(spy3.count(), 0); - QCOMPARE(spy4.count(), 0); - QCOMPARE(spy5.count(), 0); - QCOMPARE(spy6.count(), 0); - */ - QSKIP("Test is not implemented.", SkipAll); -} - -// ------------------------------------------- - -void MainViewTest::recentlyClosedTabs_data() -{ -} - -void MainViewTest::recentlyClosedTabs() -{ - /* - SubMainView widget; - - QSignalSpy spy0(view, SIGNAL(linkHovered(QString))); - QSignalSpy spy2(view, SIGNAL(loadProgress(int))); - QSignalSpy spy3(view, SIGNAL(setCurrentTitle(QString))); - QSignalSpy spy4(view, SIGNAL(showStatusBarMessage(QString))); - QSignalSpy spy5(view, SIGNAL(tabsChanged())); - QSignalSpy spy6(view, SIGNAL(lastTabClosed())); - - QCOMPARE(spy0.count(), 0); - QCOMPARE(spy2.count(), 0); - QCOMPARE(spy3.count(), 0); - QCOMPARE(spy4.count(), 0); - QCOMPARE(spy5.count(), 0); - QCOMPARE(spy6.count(), 0); - */ - QSKIP("Test is not implemented.", SkipAll); -} - -// ------------------------------------------- - -void MainViewTest::setCurrentTitle_data() -{ - QTest::addColumn<QString>("url"); - QTest::newRow("null") << QString("foo"); -} - -// protected void setCurrentTitle(QString const &url) -void MainViewTest::setCurrentTitle(const QString &) -{ - /* - QFETCH(QString, url); - - SubMainView widget; - - QSignalSpy spy0(view, SIGNAL(linkHovered(QString))); - QSignalSpy spy2(view, SIGNAL(loadProgress(int))); - QSignalSpy spy3(view, SIGNAL(setCurrentTitle(QString))); - QSignalSpy spy4(view, SIGNAL(showStatusBarMessage(QString))); - QSignalSpy spy5(view, SIGNAL(tabsChanged())); - QSignalSpy spy6(view, SIGNAL(lastTabClosed())); - - widget.call_setCurrentTitle(url); - - QCOMPARE(spy0.count(), 0); - QCOMPARE(spy2.count(), 0); - QCOMPARE(spy3.count(), 0); - QCOMPARE(spy4.count(), 0); - QCOMPARE(spy5.count(), 0); - QCOMPARE(spy6.count(), 0); - */ - QSKIP("Test is not implemented.", SkipAll); -} - -// ------------------------------------------- - -void MainViewTest::showStatusBarMessage_data() -{ - QTest::addColumn<QString>("message"); - QTest::newRow("null") << QString("foo"); -} - -// protected void showStatusBarMessage(QString const &message) -void MainViewTest::showStatusBarMessage(const QString &) -{ - /* - QFETCH(QString, message); - - SubMainView widget; - - QSignalSpy spy0(view, SIGNAL(linkHovered(QString))); - QSignalSpy spy2(view, SIGNAL(loadProgress(int))); - QSignalSpy spy3(view, SIGNAL(setCurrentTitle(QString))); - QSignalSpy spy4(view, SIGNAL(showStatusBarMessage(QString))); - QSignalSpy spy5(view, SIGNAL(tabsChanged())); - QSignalSpy spy6(view, SIGNAL(lastTabClosed())); - - widget.call_showStatusBarMessage(message); - - QCOMPARE(spy0.count(), 0); - QCOMPARE(spy2.count(), 0); - QCOMPARE(spy3.count(), 0); - QCOMPARE(spy4.count(), 0); - QCOMPARE(spy5.count(), 0); - QCOMPARE(spy6.count(), 0); - */ - QSKIP("Test is not implemented.", SkipAll); -} - -// ------------------------------------------- - -void MainViewTest::currentChanged_data() -{ - QTest::addColumn<int>("foo"); - QTest::newRow("null") << 0; -} - -void MainViewTest::currentChanged() -{ - /* - QFETCH(int, foo); - - SubMainView widget; - - QSignalSpy spy0(view, SIGNAL(linkHovered(QString))); - QSignalSpy spy2(view, SIGNAL(loadProgress(int))); - QSignalSpy spy3(view, SIGNAL(setCurrentTitle(QString))); - QSignalSpy spy4(view, SIGNAL(showStatusBarMessage(QString))); - QSignalSpy spy5(view, SIGNAL(tabsChanged())); - QSignalSpy spy6(view, SIGNAL(lastTabClosed())); - - widget.call_tabsChanged(); - - QCOMPARE(spy0.count(), 0); - QCOMPARE(spy2.count(), 0); - QCOMPARE(spy3.count(), 0); - QCOMPARE(spy4.count(), 0); - QCOMPARE(spy5.count(), 0); - QCOMPARE(spy6.count(), 0); - */ - QSKIP("Test is not implemented.", SkipAll); -} - -// ------------------------------------------- - -QTEST_KDEMAIN(MainViewTest, GUI) -#include "mainview_test.moc" diff --git a/src/tests/mainwindow_test.cpp b/src/tests/mainwindow_test.cpp deleted file mode 100644 index 44dde8b6..00000000 --- a/src/tests/mainwindow_test.cpp +++ /dev/null @@ -1,70 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2010-2011 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/>. -* -* ============================================================ */ - - -#include <qtest_kde.h> - -#include <QtCore> -#include <QtGui> -#include <QtTest> - -#include "mainwindow.h" -#include "application.h" - - -class MainWindowTest : public QObject -{ - Q_OBJECT - -public Q_SLOTS: - void initTestCase(); - void cleanupTestCase(); - -private Q_SLOTS: - - -private: - MainWindow *window; -}; - - -// ------------------------------------------- - - -void MainWindowTest::initTestCase() -{ - window = new MainWindow; -} - - -void MainWindowTest::cleanupTestCase() -{ -// delete window; -} - -// ------------------------------------------- - -QTEST_KDEMAIN(MainWindowTest, GUI) -#include "mainwindow_test.moc" diff --git a/src/tests/networkaccessmanager_test.cpp b/src/tests/networkaccessmanager_test.cpp deleted file mode 100644 index ed6856f7..00000000 --- a/src/tests/networkaccessmanager_test.cpp +++ /dev/null @@ -1,68 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2010-2011 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/>. -* -* ============================================================ */ - - -#include <qtest_kde.h> - -#include "networkaccessmanager.h" - - -class NetworkAccessManagerTest : public QObject -{ - Q_OBJECT - -public Q_SLOTS: - void initTestCase(); - void cleanupTestCase(); - -private Q_SLOTS: - -private: - NetworkAccessManager *manager; -}; - - -// ------------------------------------------- - -void NetworkAccessManagerTest::initTestCase() -{ - manager = new NetworkAccessManager(this); -} - - -void NetworkAccessManagerTest::cleanupTestCase() -{ - delete manager; -} - - -// ------------------------------------------- - - - -// ------------------------------------------- - -QTEST_KDEMAIN(NetworkAccessManagerTest, GUI) -#include "networkaccessmanager_test.moc" diff --git a/src/tests/protocolhandler_test.cpp b/src/tests/protocolhandler_test.cpp deleted file mode 100644 index 2e73a1d2..00000000 --- a/src/tests/protocolhandler_test.cpp +++ /dev/null @@ -1,131 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2010-2011 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/>. -* -* ============================================================ */ - -#include <qtest_kde.h> - -#include "protocolhandler.h" - -#include <QWebView> -#include <QNetworkRequest> - - -class ProtocolhandlerTest : public QObject -{ - Q_OBJECT - -public Q_SLOTS: - void initTestCase(); - void cleanupTestCase(); - -private Q_SLOTS: - void preHandling_data(); - void preHandling(); - - void postHandling_data(); - void postHandling(); - -private: - ProtocolHandler *handler; -}; - - -// ------------------------------------------- - -void ProtocolhandlerTest::initTestCase() -{ - handler = new ProtocolHandler; -} - - -void ProtocolhandlerTest::cleanupTestCase() -{ - delete handler; -} - - -// ------------------------------------------- - - -void ProtocolhandlerTest::preHandling_data() -{ - QTest::addColumn<QString>("urlString"); - QTest::addColumn<bool>("result"); - - QTest::newRow("mailto") << "mailto:me@here.com" << true ; - QTest::newRow("relative") << "google.it" << false ; - QTest::newRow("javascript") << "javascript:alertbox('hello')" << true ; - QTest::newRow("aboutblank") << "about:blank" << false ; - QTest::newRow("abouthome") << "about:home" << true ; - QTest::newRow("ftp") << "ftp://ftp.kde.org" << false ; - QTest::newRow("file") << "file:///home" << false ; -} - - -void ProtocolhandlerTest::preHandling() -{ - QFETCH(QString, urlString); - QFETCH(bool , result); - - QWebView *view = new QWebView; - QWebFrame *frame = view->page()->mainFrame(); - - QNetworkRequest request = QNetworkRequest(QUrl(urlString)); - - QCOMPARE(handler->preHandling(request, frame) , result); -} - - -void ProtocolhandlerTest::postHandling_data() -{ - QTest::addColumn<QString>("urlString"); - QTest::addColumn<bool>("result"); - - QTest::newRow("mailto") << "mailto:me@here.com" << true ; - QTest::newRow("relative") << "google.it" << false ; - QTest::newRow("javascript") << "javascript:alertbox('hello')" << false ; - QTest::newRow("aboutblank") << "about:blank" << false ; - QTest::newRow("abouthome") << "about:home" << false ; - QTest::newRow("ftp") << "ftp://ftp.kde.org" << true ; - QTest::newRow("file") << "file:///home" << true ; -} - - -void ProtocolhandlerTest::postHandling() -{ - QFETCH(QString, urlString); - QFETCH(bool , result); - - QWebView *view = new QWebView; - QWebFrame *frame = view->page()->mainFrame(); - - QNetworkRequest request = QNetworkRequest(QUrl(urlString)); - - QCOMPARE(handler->postHandling(request, frame) , result); -} - -// ------------------------------------------- - -QTEST_KDEMAIN(ProtocolhandlerTest, GUI) -#include "protocolhandler_test.moc" diff --git a/src/tests/sessionmanager_test.cpp b/src/tests/sessionmanager_test.cpp deleted file mode 100644 index a2ddbfe3..00000000 --- a/src/tests/sessionmanager_test.cpp +++ /dev/null @@ -1,73 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2010-2011 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/>. -* -* ============================================================ */ - -#include <qtest_kde.h> - -#include <QtCore> -#include <QtGui> -#include <QtTest> - - -#include "sessionmanager.h" - - -class SessionManagerTest : public QObject -{ - Q_OBJECT - -public Q_SLOTS: - void initTestCase(); - void cleanupTestCase(); - -private Q_SLOTS: - -private: - SessionManager *sessman; -}; - - -// ------------------------------------------- - - -void SessionManagerTest::initTestCase() -{ - sessman = new SessionManager; -} - - -void SessionManagerTest::cleanupTestCase() -{ - delete sessman; -} - - -// ------------------------------------------- - - - -// ------------------------------------------- - -QTEST_KDEMAIN(SessionManagerTest, GUI) -#include "sessionmanager_test.moc" diff --git a/src/tests/tabbar_test.cpp b/src/tests/tabbar_test.cpp deleted file mode 100644 index 0ff73c3f..00000000 --- a/src/tests/tabbar_test.cpp +++ /dev/null @@ -1,152 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2008 by Benjamin C. Meyer <ben@meyerhome.net> -* Copyright (C) 2008-2011 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/>. -* -* ============================================================ */ - - -#include <qtest_kde.h> - -#include "mainwindow.h" -#include "mainview.h" -#include "tabbar.h" - - -/** - * Subclass that exposes the protected functions. - */ -class SubTabBar : public TabBar -{ -public: - - SubTabBar(QWidget *parent) : TabBar(parent) {}; - - QSize call_tabSizeHint(int index) const - { - return SubTabBar::tabSizeHint(index); - } - - void call_mouseMoveEvent(QMouseEvent* event) - { - return SubTabBar::mouseMoveEvent(event); - } - - void call_leaveEvent(QEvent* event) - { - return SubTabBar::leaveEvent(event); - } - - void call_mousePressEvent(QMouseEvent* event) - { - return SubTabBar::mousePressEvent(event); - } - - void call_mouseReleaseEvent(QMouseEvent* event) - { - return SubTabBar::mouseReleaseEvent(event); - } -}; - - -// ------------------------------------------------------------------ - - -class TabBarTest : public QObject -{ - Q_OBJECT - -public Q_SLOTS: - void initTestCase(); - void cleanupTestCase(); - -private Q_SLOTS: - void tabSizeHint_data(); - void tabSizeHint(); - - void mousePress_data(); - void mousePress(); - -private: - SubTabBar *_bar; -}; - - -// ------------------------------------------- - -void TabBarTest::initTestCase() -{ - MainWindow *w = new MainWindow; - MainView *mv = new MainView(w); - _bar = new SubTabBar(mv); -} - -void TabBarTest::cleanupTestCase() -{ - delete _bar; -} - -// ------------------------------------------- - -void TabBarTest::tabSizeHint_data() -{ - QTest::addColumn<int>("index"); - - QTest::newRow("1th") << 0; - QTest::newRow("2nd") << 1; - QTest::newRow("3rd") << 2; - QTest::newRow("4th") << 3; - QTest::newRow("5th") << 4; - QTest::newRow("6th") << 5; - QTest::newRow("7th") << 6; - QTest::newRow("8th") << 7; - QTest::newRow("9th") << 8; - QTest::newRow("10th") << 9; -} - - -void TabBarTest::tabSizeHint() -{ - QFETCH(int, index); - - QVERIFY(_bar->call_tabSizeHint(index).width() > 0); -} - - -void TabBarTest::mousePress_data() -{ -} - - -void TabBarTest::mousePress() -{ -// QTest::mousePress(_bar, Qt::MidButton); -// // QCOMPARE(); ? -// -// QTest::mousePress(_bar, Qt::LeftButton); -// // QCOMPARE(); ? -} - -// ------------------------------------------- - -QTEST_KDEMAIN(TabBarTest, GUI) -#include "tabbar_test.moc" diff --git a/src/tests/urlbar_test.cpp b/src/tests/urlbar_test.cpp deleted file mode 100644 index 4e1aaae5..00000000 --- a/src/tests/urlbar_test.cpp +++ /dev/null @@ -1,75 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2010-2011 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/>. -* -* ============================================================ */ - - -#include <qtest_kde.h> - -#include "webpage.h" -#include "webview.h" -#include "webtab.h" - -#include "urlbar.h" - - -class UrlBarTest : public QObject -{ - Q_OBJECT - -public Q_SLOTS: - void initTestCase(); - void cleanupTestCase(); - -private Q_SLOTS: - -private: - UrlBar *bar; - WebTab *tab; -}; - - -// ------------------------------------------- - -void UrlBarTest::initTestCase() -{ - tab = new WebTab; - bar = new UrlBar(tab); -} - - -void UrlBarTest::cleanupTestCase() -{ - delete bar; - delete tab; -} - - -// ------------------------------------------- - - - -// ------------------------------------------- - -QTEST_KDEMAIN(UrlBarTest, GUI) -#include "urlbar_test.moc" diff --git a/src/tests/walletbar_test.cpp b/src/tests/walletbar_test.cpp deleted file mode 100644 index ac186bcc..00000000 --- a/src/tests/walletbar_test.cpp +++ /dev/null @@ -1,70 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2010-2011 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/>. -* -* ============================================================ */ - - -#include <qtest_kde.h> - -#include "walletbar.h" - - -class WalletBarTest : public QObject -{ - Q_OBJECT - -public Q_SLOTS: - void initTestCase(); - void cleanupTestCase(); - -private Q_SLOTS: - -private: - WalletBar *bar; -}; - - -// ------------------------------------------- - - -void WalletBarTest::initTestCase() -{ - QWidget *w = new QWidget; - bar = new WalletBar(w); -} - - -void WalletBarTest::cleanupTestCase() -{ - delete bar; -} - - -// ------------------------------------------- - - - -// ------------------------------------------- - -QTEST_KDEMAIN(WalletBarTest, GUI) -#include "walletbar_test.moc" diff --git a/src/tests/webpage_test.cpp b/src/tests/webpage_test.cpp deleted file mode 100644 index 9b170329..00000000 --- a/src/tests/webpage_test.cpp +++ /dev/null @@ -1,112 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2010-2011 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/>. -* -* ============================================================ */ - - -#include <qtest_kde.h> - -#include "webpage.h" -#include "webview.h" -#include "webtab.h" - - -class WebPageTest : public QObject -{ - Q_OBJECT - -public Q_SLOTS: - void initTestCase(); - void cleanupTestCase(); - -private Q_SLOTS: - void manageNetworkErrors(); - void downloadRequest(); - void downloadAllContentsWithKGet(); - - void createWindow(); - void acceptNavigationRequest(); - - void handleUnsupportedContent(); - - void loadFinished(); - -private: - WebTab *tab; - WebPage *page; - WebView *view; -}; - - -// ------------------------------------------- - - -void WebPageTest::initTestCase() -{ - tab = new WebTab; - view = tab->view(); - page = tab->page(); -} - - -void WebPageTest::cleanupTestCase() -{ - delete tab; -} - - -// ------------------------------------------- - - -void WebPageTest::manageNetworkErrors() -{ -} - -void WebPageTest::downloadRequest() -{ -} - -void WebPageTest::downloadAllContentsWithKGet() -{ -} - -void WebPageTest::createWindow() -{ -} - -void WebPageTest::acceptNavigationRequest() -{ -} - -void WebPageTest::handleUnsupportedContent() -{ -} - -void WebPageTest::loadFinished() -{ -} - -// ------------------------------------------- - -QTEST_KDEMAIN(WebPageTest, GUI) -#include "webpage_test.moc" diff --git a/src/tests/websnap_test.cpp b/src/tests/websnap_test.cpp deleted file mode 100644 index 31d2e5cf..00000000 --- a/src/tests/websnap_test.cpp +++ /dev/null @@ -1,69 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2010-2011 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/>. -* -* ============================================================ */ - - -#include <qtest_kde.h> - -#include "websnap.h" - - -class WebSnapTest : public QObject -{ - Q_OBJECT - - -public Q_SLOTS: - void initTestCase(); - void cleanupTestCase(); - -private Q_SLOTS: - -private: - WebSnap *snap; -}; - - -// ------------------------------------------- - - -void WebSnapTest::initTestCase() -{ -} - - -void WebSnapTest::cleanupTestCase() -{ - delete snap; -} - - -// ------------------------------------------- - - - -// ------------------------------------------- - -QTEST_KDEMAIN(WebSnapTest, GUI) -#include "websnap_test.moc" diff --git a/src/tests/webtab_test.cpp b/src/tests/webtab_test.cpp deleted file mode 100644 index 073f1521..00000000 --- a/src/tests/webtab_test.cpp +++ /dev/null @@ -1,69 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2008 by Benjamin C. Meyer <ben@meyerhome.net> -* Copyright (C) 2009-2011 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/>. -* -* ============================================================ */ - - -#include <qtest_kde.h> - -#include "webpage.h" -#include "webview.h" -#include "webtab.h" - - -class WebTabTest : public QObject -{ - Q_OBJECT - -public Q_SLOTS: - void initTestCase(); - void cleanupTestCase(); - -private: - WebTab *tab; -}; - - -// ------------------------------------------- - - -void WebTabTest::initTestCase() -{ - tab = new WebTab; -} - - -void WebTabTest::cleanupTestCase() -{ - delete tab; -} - - -// ------------------------------------------- - - -// ------------------------------------------- - -QTEST_KDEMAIN(WebTabTest, GUI) -#include "webtab_test.moc" diff --git a/src/tests/webview_test.cpp b/src/tests/webview_test.cpp deleted file mode 100644 index 1846e142..00000000 --- a/src/tests/webview_test.cpp +++ /dev/null @@ -1,71 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2010-2011 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/>. -* -* ============================================================ */ - - -#include <qtest_kde.h> - -#include "webview.h" -#include "webtab.h" - - -class WebViewTest : public QObject -{ - Q_OBJECT - -public Q_SLOTS: - void initTestCase(); - void cleanupTestCase(); - -private Q_SLOTS: - -private: - WebView *view; - WebTab *tab; -}; - - -// ------------------------------------------- - - -void WebViewTest::initTestCase() -{ - tab = new WebTab; - view = tab->view(); -} - - -void WebViewTest::cleanupTestCase() -{ - delete tab; -} - - -// ------------------------------------------- - - -// ------------------------------------------- - -QTEST_KDEMAIN(WebViewTest, GUI) -#include "webview_test.moc" diff --git a/src/thumbupdater.cpp b/src/thumbupdater.cpp deleted file mode 100644 index 01323c44..00000000 --- a/src/thumbupdater.cpp +++ /dev/null @@ -1,81 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2012 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/>. -* -* ============================================================ */ - - -#include "thumbupdater.h" -#include "thumbupdater.moc" - -#include "application.h" -#include "iconmanager.h" -#include "websnap.h" - -#include <KLocale> -#include <KStandardDirs> - -#include <QWebFrame> - - -ThumbUpdater::ThumbUpdater(QWebElement el, const QString & urlString, const QString & nameString, QObject *parent) - : QObject(parent) - , _thumb(el) - , _url(urlString) - , _title(nameString) -{ -} - - -void ThumbUpdater::updateThumb() -{ - // Set loading animation - _thumb.findFirst(QL1S(".preview img")).setAttribute(QL1S("src"), QL1S("file:///") + KStandardDirs::locate("appdata", "pics/busywidget.gif")); - _thumb.findFirst(QL1S("span a")).setPlainText(i18n("Loading Preview...")); - - // Load URL - QWebFrame *frame = qobject_cast<QWebFrame *>(parent()); - WebSnap *snap = new WebSnap(KUrl(_url), frame); - connect(snap, SIGNAL(snapDone(bool)), this, SLOT(updateImage(bool)), Qt::UniqueConnection); -} - - -ThumbUpdater::~ThumbUpdater() -{ - kDebug() << "bye bye"; -} - - -void ThumbUpdater::updateImage(bool ok) -{ - KUrl u(_url); - - QString previewPath = ok - ? QL1S("file://") + WebSnap::imagePathFromUrl(u) - : rApp->iconManager()->iconPathForUrl(u) - ; - - _thumb.findFirst(QL1S(".preview img")).setAttribute(QL1S("src"), previewPath); - _thumb.findFirst(QL1S("span a")).setPlainText(_title); - - this->deleteLater(); -} diff --git a/src/thumbupdater.h b/src/thumbupdater.h deleted file mode 100644 index 2544969f..00000000 --- a/src/thumbupdater.h +++ /dev/null @@ -1,58 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2012 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 THUMB_UPDATER_H -#define THUMB_UPDATER_H - - -// Rekonq Includes -#include "rekonq_defines.h" - -// Qt Includes -#include <QObject> -#include <QWebElement> - - -class REKONQ_TESTS_EXPORT ThumbUpdater : public QObject -{ - Q_OBJECT - -public: - ThumbUpdater(QWebElement el, const QString & urlString, const QString & nameString, QObject *parent = 0); - ~ThumbUpdater(); - - void updateThumb(); - -private Q_SLOTS: - void updateImage(bool); - -private: - QWebElement _thumb; - QString _url; - QString _title; -}; - -#endif // THUMB_UPDATER_H diff --git a/src/urlbar/bookmarkwidget.cpp b/src/urlbar/bookmarkwidget.cpp deleted file mode 100644 index c1963ff0..00000000 --- a/src/urlbar/bookmarkwidget.cpp +++ /dev/null @@ -1,383 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2010-2011 by Yoann Laissus <yoann dot laissus at gmail dot com> -* Copyright (C) 2012 by Andrea Diamantini <adjam7 at gmail dot com> -* Copyright (c) 2011-2012 by Phaneendra Hegde <pnh.pes@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) 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 "bookmarkmanager.h" -#include "bookmarkowner.h" - -// KDE Includes -#include <KComboBox> -#include <KLocalizedString> -#include <KIcon> -#include <KLineEdit> -#include <KRatingWidget> -#include <KBookmarkDialog> - -// Qt Includes -#include <QDialogButtonBox> -#include <QFormLayout> -#include <QLabel> -#include <QPushButton> -#include <QCompleter> -#include <QTextCursor> -#include <QDBusConnection> -#include <QDBusConnectionInterface> - -// Nepomuk config include -#include "config-nepomuk.h" - -#ifdef HAVE_NEPOMUK -// Local Nepomuk Includes -#include "resourcelinkdialog.h" - -//Nepomuk Includes -#include <Soprano/Vocabulary/NAO> -#endif - - - -BookmarkWidget::BookmarkWidget(const KBookmark &bookmark, QWidget *parent) - : QMenu(parent) - , m_bookmark(bookmark) -{ - setAttribute(Qt::WA_DeleteOnClose); - setFixedWidth(320); - -#ifdef HAVE_NEPOMUK - m_nfoResource = (QUrl)m_bookmark.url(); - m_isNepomukEnabled = QDBusConnection::sessionBus().interface()->isServiceRegistered("org.kde.NepomukServer"); - kDebug() << "IS NEPOMUK ACTUALLY RUNNING? " << m_isNepomukEnabled; -#endif - - QFormLayout *layout = new QFormLayout(this); - layout->setHorizontalSpacing(20); - - // Title - QHBoxLayout *hLayout = new QHBoxLayout; - QLabel *bookmarkInfo = new QLabel(this); - bookmarkInfo->setText(i18n(" Bookmark")); - QFont f = bookmarkInfo->font(); - f.setBold(true); - bookmarkInfo->setFont(f); - - // Remove button - QLabel *removeLabel = new QLabel(this); - removeLabel->setText(i18n("<a href='Remove'>Remove</a>")); - removeLabel->setAlignment(Qt::AlignRight); - hLayout->addWidget(bookmarkInfo); - hLayout->addWidget(removeLabel); - layout->addRow(hLayout); - - connect(removeLabel, SIGNAL(linkActivated(QString)), this, SLOT(removeBookmark())); - - //Bookmark Folder - QLabel *folderLabel = new QLabel(this); - folderLabel->setText(i18n("Folder:")); - - m_folder = new KComboBox(this); - layout->addRow(folderLabel, m_folder); - setupFolderComboBox(); - connect(m_folder, SIGNAL(currentIndexChanged(int)), this, SLOT(onFolderIndexChanged(int))); - - // Bookmark name - 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); - -#ifdef HAVE_NEPOMUK - - if (m_isNepomukEnabled) - { - QLabel* rateLabel = new QLabel(this); - rateLabel->setText(i18n("Rate:")); - KRatingWidget *ratingWidget = new KRatingWidget(this); - if (m_nfoResource.rating() != 0) - { - ratingWidget->setRating(m_nfoResource.rating()); - } - connect(ratingWidget, SIGNAL(ratingChanged(int)), this, SLOT(setRatingSlot(int))); - ratingWidget->setToolTip(i18n("Rate this page")); - layout->addRow(rateLabel, ratingWidget); - - //Add comments - QLabel *commentLabel = new QLabel(this); - commentLabel->setText(i18n("Describe:")); - commentLabel->setAlignment(Qt::AlignCenter); - m_commentEdit = new QPlainTextEdit(this); - if (!m_nfoResource.description().isEmpty()) - { - m_commentEdit->setPlainText(m_nfoResource.description()); - } - connect(m_commentEdit, SIGNAL(textChanged()), this, SLOT(addCommentSlot())); - layout->addRow(commentLabel, m_commentEdit); - - // Create tags - QLabel *tagLabel = new QLabel(this); - tagLabel->setText(i18n("Tags:")); - tagLabel->setAlignment(Qt::AlignLeft); - m_tagLine = new KLineEdit(this); - m_tagLine->setPlaceholderText(i18n("add tags(comma separated)")); - - - QList<Nepomuk::Tag> tagList = Nepomuk::Tag::allTags(); - Q_FOREACH(Nepomuk::Tag t, tagList) - { - m_tList.append(t.label()); - } - QCompleter *completeTag = new QCompleter(m_tList); - completeTag->setCompletionMode(QCompleter::PopupCompletion); - m_tagLine->setCompleter(completeTag); - loadTags(); - - layout->addRow(tagLabel, m_tagLine); - - QPushButton *linkToResource = new QPushButton(this); - linkToResource->setText(i18n("Link Resources")); - connect(linkToResource, SIGNAL(clicked()), this, SLOT(linkToResourceSlot())); - layout->addWidget(linkToResource); - } - else - { - QLabel *nepomukLabel = new QLabel(this); - QPalette p = nepomukLabel->palette(); - p.setColor(QPalette::WindowText, Qt::red); - nepomukLabel->setPalette(p); - nepomukLabel->setText(i18n("Nepomuk is actually disabled.")); - layout->addWidget(nepomukLabel); - } -#endif - - // Ok & Cancel buttons - QDialogButtonBox *buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel, Qt::Horizontal, this); - connect(buttonBox, SIGNAL(accepted()), this, SLOT(accept())); - connect(buttonBox, SIGNAL(rejected()), this, SLOT(close())); - layout->addWidget(buttonBox); -} - - -void BookmarkWidget::showAt(const QPoint &pos) -{ - adjustSize(); - - QPoint p(pos.x() - width(), pos.y() + 10); - move(p); - show(); -} - - -void BookmarkWidget::accept() -{ - if (!m_bookmark.isNull() && m_name->text() != m_bookmark.fullText()) - { - m_bookmark.setFullText(m_name->text()); - rApp->bookmarkManager()->emitChanged(); - } - QString folderAddress = m_folder->itemData(m_folder->currentIndex()).toString(); - KBookmarkGroup a = rApp->bookmarkManager()->manager()->findByAddress(folderAddress).toGroup(); - - KBookmarkGroup parent = m_bookmark.parentGroup(); - parent.deleteBookmark(m_bookmark); - a.addBookmark(m_bookmark); - rApp->bookmarkManager()->manager()->emitChanged(a); - -#ifdef HAVE_NEPOMUK - if (m_isNepomukEnabled) - { - parseTags(); - } -#endif - - close(); -} - - -void BookmarkWidget::setupFolderComboBox() -{ - KBookmarkGroup toolBarRoot = rApp->bookmarkManager()->manager()->toolbar(); - KBookmarkGroup root = rApp->bookmarkManager()->rootGroup(); - - if (toolBarRoot.address() == root.address()) - { - m_folder->addItem(KIcon("bookmark-toolbar"), - i18n("Bookmark Toolbar"), - toolBarRoot.address()); - } - else - { - m_folder->addItem(KIcon("bookmark-toolbar"), - toolBarRoot.text(), - toolBarRoot.address()); - } - m_folder->insertSeparator(1); - - if (m_bookmark.parentGroup().address() != toolBarRoot.address()) - { - QString parentText = m_bookmark.parentGroup().text(); - - if (m_bookmark.parentGroup().address() == root.address()) - { - parentText = i18n("Root folder"); - } - - m_folder->addItem(parentText, - m_bookmark.parentGroup().address()); - m_folder->insertSeparator(3); - } - - for (KBookmark bookmark = toolBarRoot.first(); !bookmark.isNull(); bookmark = toolBarRoot.next(bookmark)) - { - if (bookmark.isGroup() && bookmark.address() != m_bookmark.parentGroup().address()) - { - m_folder->addItem(bookmark.text(), bookmark.address()); - } - } - - m_folder->insertSeparator(m_folder->count()); - m_folder->addItem(KIcon("folder"), i18n("Choose...")); - - int index = m_folder->findData(m_bookmark.parentGroup().address()); - m_folder->setCurrentIndex(index); -} - - -void BookmarkWidget::onFolderIndexChanged(int index) -{ - if (index == m_folder->count() - 1) - { - KBookmarkDialog dialog(rApp->bookmarkManager()->manager()); - KBookmarkGroup selectedGroup = dialog.selectFolder(m_bookmark.parentGroup()); - - if (selectedGroup.address() != m_bookmark.parentGroup().address() && !selectedGroup.isNull()) - { - m_bookmark.parentGroup().deleteBookmark(m_bookmark); - selectedGroup.addBookmark(m_bookmark); - rApp->bookmarkManager()->manager()->emitChanged(); - } - } -} - - -void BookmarkWidget::removeBookmark() -{ - rApp->bookmarkManager()->owner()->deleteBookmark(m_bookmark); - close(); - - emit updateIcon(); -} - - -#ifdef HAVE_NEPOMUK -void BookmarkWidget::addTags(QList<Nepomuk::Tag> tagList) -{ - Q_FOREACH(const Nepomuk::Tag & tag, tagList) - { - if (!m_nfoResource.tags().contains(tag)) - { - m_nfoResource.addTag(tag); - } - } - Q_FOREACH(Nepomuk::Tag tag, m_nfoResource.tags()) - { - if (!tagList.contains(tag)) - { - tag.remove(); - } - } -} - -void BookmarkWidget::parseTags() -{ - QList<Nepomuk::Tag> tagList; - if (m_tagLine->text().contains(',')) - { - QString text = m_tagLine->text(); - QStringList tagStringList = text.split(QChar::fromAscii(',')); - - Q_FOREACH(const QString & tag, tagStringList) - { - QString trimmedTag = tag.trimmed(); - if (!trimmedTag.isEmpty()) - tagList << trimmedTag; - } - } - else - { - tagList << m_tagLine->text().trimmed(); - } - addTags(tagList); -} - - -void BookmarkWidget::loadTags() -{ - QString list; - if (!m_nfoResource.tags().isEmpty()) - { - Q_FOREACH(const Nepomuk::Tag & tag, m_nfoResource.tags()) - { - list.append(tag.genericLabel()); - list.append(","); - } - m_tagLine->setText(list); - } -} - - -void BookmarkWidget::setRatingSlot(int rate) -{ - m_nfoResource.setRating(rate); -} - - -void BookmarkWidget::addCommentSlot() -{ - m_nfoResource.setDescription(m_commentEdit->toPlainText()); -} - - -void BookmarkWidget::linkToResourceSlot() -{ - Nepomuk::ResourceLinkDialog r(m_nfoResource); - r.exec(); -} -#endif diff --git a/src/urlbar/bookmarkwidget.h b/src/urlbar/bookmarkwidget.h deleted file mode 100644 index a57b2774..00000000 --- a/src/urlbar/bookmarkwidget.h +++ /dev/null @@ -1,104 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2010-2011 by Yoann Laissus <yoann dot laissus at gmail dot com> -* Copyright (C) 2012 by Andrea Diamantini <adjam7 at gmail dot com> -* Copyright (c) 2011-2012 by Phaneendra Hegde <pnh.pes@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) 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 - -// Qt Includes -#include <QMenu> -#include <QGridLayout> -#include <QPlainTextEdit> - -// KDE Includes -#include <KBookmark> - -// Nepomuk config include -#include "config-nepomuk.h" - -#ifdef HAVE_NEPOMUK - -// Nepomuk Includes -#include <Nepomuk/Resource> -#include <Nepomuk/Tag> -#include <Nepomuk/Vocabulary/NFO> - -#endif - -// Forward Declarations -class KBookmark; -class KLineEdit; -class KComboBox; - - -class BookmarkWidget : public QMenu -{ - Q_OBJECT - -public: - explicit BookmarkWidget(const KBookmark &bookmark, QWidget *parent = 0); - - void showAt(const QPoint &pos); - -#ifdef HAVE_NEPOMUK - void addTags(QList<Nepomuk::Tag>); - void parseTags(); - void loadTags(); -#endif - -Q_SIGNALS: - void updateIcon(); - -private: - void setupFolderComboBox(); - -private Q_SLOTS: - void accept(); - void removeBookmark(); - void onFolderIndexChanged(int index); - -#ifdef HAVE_NEPOMUK - void setRatingSlot(int rate); - void addCommentSlot(); - void linkToResourceSlot(); -#endif - -private: - KBookmark m_bookmark; - KLineEdit *m_name; - KComboBox *m_folder; - KLineEdit *m_tagLine; - QPlainTextEdit *m_commentEdit; - QStringList m_tList; - -#ifdef HAVE_NEPOMUK - Nepomuk::Resource m_nfoResource; - bool m_isNepomukEnabled; -#endif -}; - -#endif diff --git a/src/urlbar/completionwidget.cpp b/src/urlbar/completionwidget.cpp deleted file mode 100644 index 04f7bad0..00000000 --- a/src/urlbar/completionwidget.cpp +++ /dev/null @@ -1,402 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2009-2012 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 "completionwidget.h" -#include "completionwidget.moc" - -// Auto Includes -#include "rekonq.h" - -// Local Includes -#include "application.h" -#include "listitem.h" -#include "searchengine.h" -#include "urlbar.h" - -// KDE Includes -#include <KGlobalSettings> -#include <KUrl> - -// Qt Includes -#include <QPoint> -#include <QSize> -#include <QEvent> - -#include <QVBoxLayout> -#include <QKeyEvent> - - - -CompletionWidget::CompletionWidget(QWidget *parent) - : QFrame(parent, Qt::ToolTip) - , _parent(parent) - , _currentIndex(0) - , _hasSuggestions(false) -{ - setFrameStyle(QFrame::Panel); - setLayoutDirection(Qt::LeftToRight); - QVBoxLayout *layout = new QVBoxLayout; - layout->setMargin(0); - layout->setSpacing(0); - setLayout(layout); -} - - -void CompletionWidget::insertItems(const UrlSearchList &list, const QString& text, int offset) -{ - Q_FOREACH(const UrlSearchItem & item, list) - { - ListItem *suggestion = ListItemFactory::create(item, text, this); - suggestion->setBackgroundRole(offset % 2 ? QPalette::AlternateBase : QPalette::Base); - connect(suggestion, - SIGNAL(itemClicked(ListItem*, Qt::MouseButton, Qt::KeyboardModifiers)), - this, - SLOT(itemChosen(ListItem*, Qt::MouseButton, Qt::KeyboardModifiers))); - connect(suggestion, SIGNAL(updateList()), this, SLOT(updateList())); - connect(this, SIGNAL(nextItemSubChoice()), suggestion, SLOT(nextItemSubChoice())); - - suggestion->setObjectName(QString::number(offset++)); - layout()->addWidget(suggestion); - } -} - - -void CompletionWidget::updateSearchList(const UrlSearchList &list, const QString& text) -{ - if (_hasSuggestions || _typedString != text) - return; - _hasSuggestions = true; - - if (_resList.count() > 0) - { - clear(); - - insertItems(_resList, text); - _list = _resList; - - UrlSearchList sugList = list.mid(0, 4); - insertItems(sugList, text, _list.count()); - _list.append(sugList); - popup(); - } -} - - -void CompletionWidget::sizeAndPosition() -{ - setFixedWidth(_parent->width()); - - int h = 0; - for (int i = 0; i < layout()->count(); i++) - { - QWidget *widget = layout()->itemAt(i)->widget(); - h += widget->sizeHint().height(); - } - setFixedSize(_parent->width(), h + 5); - - // position - QPoint p = _parent->mapToGlobal(QPoint(0, 0)); - move(p.x(), p.y() + _parent->height()); -} - - -void CompletionWidget::popup() -{ - findChild<ListItem *>(QString::number(0))->activate(); //activate first listitem - sizeAndPosition(); - if (!isVisible()) - show(); -} - - -void CompletionWidget::up() -{ - if (_currentIndex >= 0) - findChild<ListItem *>(QString::number(_currentIndex))->deactivate(); // deactivate previous - - --_currentIndex; - if (_currentIndex < -1) - { - _currentIndex = _list.count() - 1; - } - - activateCurrentListItem(); -} - - -void CompletionWidget::down() -{ - if (_currentIndex >= 0) - findChild<ListItem *>(QString::number(_currentIndex))->deactivate(); // deactivate previous - - ++_currentIndex; - if (_currentIndex == _list.count()) - _currentIndex = -1; - - activateCurrentListItem(); -} - - -void CompletionWidget::activateCurrentListItem() -{ - UrlBar *bar = qobject_cast<UrlBar *>(_parent); - - // activate "new" current - ListItem *widget = findChild<ListItem *>(QString::number(_currentIndex)); - - // update text of the url bar - bar->blockSignals(true); // without compute suggestions - if (widget) - { - widget->activate(); - bar->setQUrl(widget->text()); - } - else - { - bar->setText(_typedString); - } - bar->blockSignals(false); - bar->setFocus(); - bar->setCursorPosition(bar->text().length()); -} - - -void CompletionWidget::clear() -{ - QLayoutItem *child; - while ((child = layout()->takeAt(0)) != 0) - { - delete child->widget(); - delete child; - } - _currentIndex = 0; - _hasSuggestions = false; -} - - -bool CompletionWidget::eventFilter(QObject *obj, QEvent *ev) -{ - int type = ev->type(); - QWidget *wid = qobject_cast<QWidget*>(obj); - - if (obj == this) - { - return false; - } - - // hide conditions of the CompletionWidget - if (wid - && ((wid == _parent - && (type == QEvent::Move || type == QEvent::Resize)) || ((wid->windowFlags() & Qt::Window) - && (type == QEvent::Move || type == QEvent::Hide || type == QEvent::WindowDeactivate) - && wid == _parent->window()) || (type == QEvent::MouseButtonPress && !isAncestorOf(wid))) - ) - { - hide(); - return false; - } - - //actions on the CompletionWidget - if (wid && wid->isAncestorOf(_parent) && isVisible()) - { - ListItem *child; - UrlBar *w; - - if (type == QEvent::KeyPress) - { - QKeyEvent *kev = static_cast<QKeyEvent *>(ev); - switch (kev->key()) - { - case Qt::Key_Up: - case Qt::Key_Backtab: - if (kev->modifiers() == Qt::NoButton || (kev->modifiers() & Qt::ShiftModifier)) - { - up(); - kev->accept(); - return true; - } - break; - - case Qt::Key_Down: - case Qt::Key_Tab: - if (kev->modifiers() == Qt::NoButton) - { - down(); - kev->accept(); - return true; - } - if (kev->modifiers() & Qt::ControlModifier) - { - emit nextItemSubChoice(); - kev->accept(); - return true; - } - break; - - case Qt::Key_Enter: - case Qt::Key_Return: - w = qobject_cast<UrlBar *>(parent()); - if (kev->modifiers() == Qt::AltModifier) - { - if (kev->key() == Qt::Key_Return || kev->key() == Qt::Key_Enter) - { - emit chosenUrl(w->text(), Rekonq::NewFocusedTab); - } - } - - if (!w->text().startsWith(QL1S("http://"), Qt::CaseInsensitive)) - { - QString append; - if (kev->modifiers() == Qt::ControlModifier) - { - append = QL1S(".com"); - } - else if (kev->modifiers() == (Qt::ControlModifier | Qt::ShiftModifier)) - { - append = QL1S(".org"); - } - else if (kev->modifiers() == Qt::ShiftModifier) - { - append = QL1S(".net"); - } - - if (!append.isEmpty()) - { - QUrl url(QL1S("http://") + w->text()); - QString host = url.host(); - if (!host.endsWith(append, Qt::CaseInsensitive)) - { - host += append; - url.setHost(host); - } - - emit chosenUrl(url, Rekonq::CurrentTab); - } - } - - kDebug() << "Suggestion INDEX chosen: " << _currentIndex; - if (_currentIndex == -1) - _currentIndex = 0; - child = findChild<ListItem *>(QString::number(_currentIndex)); - - if (child) //the completionwidget is visible and the user had press down - { - //we can use the url of the listitem - emit chosenUrl(child->url(), Rekonq::CurrentTab); - } - else //the user type too fast (completionwidget not visible or suggestion not downloaded) - { - UrlResolver res(w->text()); - UrlSearchList list = res.orderedSearchItems(); - if (list.isEmpty()) - { - emit chosenUrl(KUrl(_typedString), Rekonq::CurrentTab); - } - else - { - emit chosenUrl(list.first().url, Rekonq::CurrentTab); - } - } - kev->accept(); - hide(); - return true; - - case Qt::Key_Escape: - hide(); - return true; - } - } - } - - return QFrame::eventFilter(obj, ev); -} - - -void CompletionWidget::setVisible(bool visible) -{ - if (visible) - { - rApp->installEventFilter(this); - } - else - { - rApp->removeEventFilter(this); - } - - - QFrame::setVisible(visible); -} - - -void CompletionWidget::itemChosen(ListItem *item, Qt::MouseButton button, Qt::KeyboardModifiers modifier) -{ - if (button == Qt::MidButton - || modifier == Qt::ControlModifier) - { - emit chosenUrl(item->url(), Rekonq::NewFocusedTab); - } - else - { - emit chosenUrl(item->url(), Rekonq::CurrentTab); - } - hide(); -} - - -void CompletionWidget::updateList() -{ - suggestUrls(_typedString); -} - - -void CompletionWidget::suggestUrls(const QString &text) -{ - _typedString = text; - - QWidget *w = qobject_cast<QWidget *>(parent()); - if (!w->hasFocus()) - return; - - if (text.isEmpty()) - { - hide(); - return; - } - - if (!isVisible()) - { - UrlResolver::setSearchEngine(SearchEngine::defaultEngine()); - } - - UrlResolver *res = new UrlResolver(text); - connect(res, SIGNAL(suggestionsReady(UrlSearchList, QString)), - this, SLOT(updateSearchList(UrlSearchList, QString))); - _resList = res->orderedSearchItems(); - - // NOTE: It's important to call this AFTER orderedSearchItems() to let everything work - res->computeSuggestions(); -} diff --git a/src/urlbar/completionwidget.h b/src/urlbar/completionwidget.h deleted file mode 100644 index 92d1bd39..00000000 --- a/src/urlbar/completionwidget.h +++ /dev/null @@ -1,93 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2009-2012 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 COMPLETION_WIDGET_H -#define COMPLETION_WIDGET_H - - -// Rekonq Includes -#include "rekonq_defines.h" - -// Local Includes -#include "urlresolver.h" - -// KDE Includes -#include <KService> - -// Qt Includes -#include <QFrame> - -// Forward Declarations -class ListItem; - - -class CompletionWidget : public QFrame -{ - Q_OBJECT - -public: - CompletionWidget(QWidget *parent); - - virtual bool eventFilter(QObject *obj, QEvent *ev); - void setVisible(bool visible); - - void suggestUrls(const QString &text); - -private Q_SLOTS: - void itemChosen(ListItem *item, Qt::MouseButton = Qt::LeftButton, Qt::KeyboardModifiers = Qt::NoModifier); - void updateSearchList(const UrlSearchList &list, const QString& text); - void updateList(); - -Q_SIGNALS: - void chosenUrl(const KUrl &, Rekonq::OpenType); - void nextItemSubChoice(); - -private: - void insertItems(const UrlSearchList &list, const QString& text, int offset = 0); - - void popup(); - void clear(); - - void sizeAndPosition(); - void up(); - void down(); - void activateCurrentListItem(); - - QWidget *_parent; - - UrlSearchList _list; - - int _currentIndex; - - KService::Ptr _searchEngine; - - QString _typedString; - bool _hasSuggestions; - - UrlSearchList _resList; -}; - -#endif // COMPLETION_WIDGET_H diff --git a/src/urlbar/favoritewidget.cpp b/src/urlbar/favoritewidget.cpp deleted file mode 100644 index 6a4ffaba..00000000 --- a/src/urlbar/favoritewidget.cpp +++ /dev/null @@ -1,115 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2011 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 "favoritewidget.h" -#include "favoritewidget.moc" - -// Auto Includes -#include "rekonq.h" - -// Local includes -#include "application.h" -#include "bookmarkmanager.h" -#include "bookmarkowner.h" -#include "webtab.h" - -// KDE Includes -#include <KLocalizedString> -#include <KIcon> -#include <KLineEdit> - -// Qt Includes -#include <QDialogButtonBox> -#include <QFormLayout> -#include <QLabel> -#include <QPushButton> - - -FavoriteWidget::FavoriteWidget(WebTab *tab, QWidget *parent) - : QMenu(parent) - , m_tab(tab) -{ - setAttribute(Qt::WA_DeleteOnClose); - setFixedWidth(350); - - QFormLayout *layout = new QFormLayout(this); - QVBoxLayout *vLay = new QVBoxLayout; - - // Favorite icon - QLabel *bookmarkIcon = new QLabel(this); - bookmarkIcon->setPixmap(KIcon("emblem-favorite").pixmap(32, 32)); - - // Title - QLabel *favoriteInfo = new QLabel(this); - favoriteInfo->setText(i18n("<h4>Remove this favorite?</h4>")); - vLay->addWidget(favoriteInfo); - - // Favorite name - QLabel *nameLabel = new QLabel(this); - nameLabel->setText(i18n("Name: %1", m_tab->view()->title())); - vLay->addWidget(nameLabel); - - // Favorite url - QLabel *urlLabel = new QLabel(this); - urlLabel->setText(i18n("URL: %1", m_tab->url().url())); - vLay->addWidget(urlLabel); - - layout->addRow(bookmarkIcon, vLay); - - // Ok & Cancel buttons - QDialogButtonBox *buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel, Qt::Horizontal, this); - connect(buttonBox, SIGNAL(accepted()), this, SLOT(accept())); - connect(buttonBox, SIGNAL(rejected()), this, SLOT(close())); - layout->addWidget(buttonBox); -} - - -void FavoriteWidget::showAt(const QPoint &pos) -{ - adjustSize(); - - QPoint p(pos.x() - width(), pos.y() + 10); - move(p); - show(); -} - - -void FavoriteWidget::accept() -{ - QStringList urls = ReKonfig::previewUrls(); - if (urls.removeOne(m_tab->url().url())) - { - ReKonfig::setPreviewUrls(urls); - QStringList titles = ReKonfig::previewNames(); - titles.removeOne(m_tab->view()->title()); - ReKonfig::setPreviewNames(titles); - - emit updateIcon(); - } - - close(); -} diff --git a/src/urlbar/favoritewidget.h b/src/urlbar/favoritewidget.h deleted file mode 100644 index d0b05f14..00000000 --- a/src/urlbar/favoritewidget.h +++ /dev/null @@ -1,58 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2011 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 FAVORITE_WIDGET_H -#define FAVORITE_WIDGET_H - - -// Qt Includes -#include <QMenu> -#include <QCheckBox> - -// Forward Declarations -class WebTab; - - -class FavoriteWidget : public QMenu -{ - Q_OBJECT - -public: - explicit FavoriteWidget(WebTab *tab, QWidget *parent = 0); - - void showAt(const QPoint &pos); - -Q_SIGNALS: - void updateIcon(); - -private Q_SLOTS: - void accept(); - -private: - WebTab *m_tab; -}; - -#endif // FAVORITE_WIDGET_H diff --git a/src/urlbar/listitem.cpp b/src/urlbar/listitem.cpp deleted file mode 100644 index 8b753569..00000000 --- a/src/urlbar/listitem.cpp +++ /dev/null @@ -1,661 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2009-2012 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 "listitem.h" -#include "listitem.moc" - -// Auto Includes -#include "rekonq.h" - -// Local Includes -#include "urlresolver.h" -#include "application.h" -#include "websnap.h" -#include "completionwidget.h" -#include "searchengine.h" -#include "iconmanager.h" - -// KDE Includes -#include <KIcon> -#include <KAction> -#include <kio/jobclasses.h> -#include <kio/scheduler.h> - -// Qt Includes -#include <QActionGroup> -#include <QHBoxLayout> -#include <QVBoxLayout> -#include <QSizePolicy> -#include <QPixmap> -#include <QStylePainter> -#include <QMouseEvent> -#include <QWebSettings> -#include <QFile> -#include <QTextDocument> -#include <QBitArray> - - -ListItem::ListItem(const UrlSearchItem &item, QWidget *parent) - : QWidget(parent) - , m_option() - , m_url(item.url) -{ - m_option.initFrom(this); - m_option.direction = Qt::LeftToRight; - - // use the same application palette (hence, the same colors) - // Qt docs says that using this cctor is possible & fast (qt:qpalette) - QPalette p(rApp->palette()); - setPalette(p); - - deactivate(); -} - - -ListItem::~ListItem() -{ - disconnect(); -} - - -void ListItem::activate() -{ - m_option.state |= QStyle::State_Selected; - update(); -} - - -void ListItem::deactivate() -{ - m_option.state &= ~QStyle::State_Selected; - update(); -} - - -void ListItem::paintEvent(QPaintEvent *event) -{ - Q_UNUSED(event); - - QWidget::paintEvent(event); - QPainter painter(this); - m_option.rect = QRect(QPoint(), size()); - painter.fillRect(m_option.rect, palette().brush(backgroundRole())); - - if (m_option.state.testFlag(QStyle::State_Selected) || m_option.state.testFlag(QStyle::State_MouseOver)) - { - style()->drawPrimitive(QStyle::PE_PanelItemViewItem, &m_option, &painter, this); - } - -} - - -void ListItem::enterEvent(QEvent *e) -{ - m_option.state |= QStyle::State_MouseOver; - update(); - QWidget::enterEvent(e); -} - - -void ListItem::leaveEvent(QEvent *e) -{ - m_option.state &= ~QStyle::State_MouseOver; - update(); - QWidget::enterEvent(e); -} - - -void ListItem::mousePressEvent(QMouseEvent *e) -{ - emit itemClicked(this, e->button(), e->modifiers()); - QWidget::mousePressEvent(e); -} - - -KUrl ListItem::url() -{ - return m_url; -} - - -QString ListItem::text() -{ - return m_url.url(); -} - - -void ListItem::nextItemSubChoice() -{ - // will be override -} - - -// --------------------------------------------------------------- - - -TypeIconLabel::TypeIconLabel(int type, QWidget *parent) - : QLabel(parent) -{ - setMinimumWidth(16); - QHBoxLayout *hLayout = new QHBoxLayout; - hLayout->setMargin(0); - hLayout->setAlignment(Qt::AlignRight); - setLayout(hLayout); - - if (type & UrlSearchItem::Search) - hLayout->addWidget(getIcon("edit-find")); - if (type & UrlSearchItem::Browse) - hLayout->addWidget(getIcon("applications-internet")); - if (type & UrlSearchItem::Bookmark) - hLayout->addWidget(getIcon("rating")); - if (type & UrlSearchItem::History) - hLayout->addWidget(getIcon("view-history")); - if (type & UrlSearchItem::Suggestion) - hLayout->addWidget(getIcon("help-hint")); -} - - -QLabel *TypeIconLabel::getIcon(QString icon) -{ - QLabel *iconLabel = new QLabel(this); - iconLabel->setFixedSize(16, 16); - QPixmap pixmap = KIcon(icon).pixmap(16); - iconLabel->setPixmap(pixmap); - return iconLabel; -} - - -// --------------------------------------------------------------- - - -IconLabel::IconLabel(const QString &icon, QWidget *parent) - : QLabel(parent) -{ - QPixmap pixmapIcon = rApp->iconManager()->iconForUrl(KUrl(icon)).pixmap(16); - setFixedSize(16, 16); - setPixmap(pixmapIcon); -} - - -IconLabel::IconLabel(const KIcon &icon, QWidget *parent) - : QLabel(parent) -{ - QPixmap pixmapIcon = icon.pixmap(16); - setFixedSize(16, 16); - setPixmap(pixmapIcon); -} - - -// --------------------------------------------------------------- - - -static QString highlightWordsInText(const QString &text, const QStringList &words) -{ - QString ret = text; - QBitArray boldSections(ret.size()); - Q_FOREACH(const QString & wordToPointOut, words) - { - int index = ret.indexOf(wordToPointOut, 0, Qt::CaseInsensitive); - while (index > -1) - { - boldSections.fill(true, index, index + wordToPointOut.size()); - index = ret.indexOf(wordToPointOut, index + wordToPointOut.size(), Qt::CaseInsensitive); - } - } - - - if (boldSections.isEmpty()) - return ret; - - int numSections = 0; - for (int i = 0; i < boldSections.size() - 1; ++i) - { - if (boldSections.testBit(i) && !boldSections.testBit(i + 1)) - ++numSections; - } - if (boldSections.testBit(boldSections.size() - 1)) //last char was still part of a bold section - ++numSections; - const int tagLength = 7; // length of "<b>" and "</b>" we're going to add for each bold section. - ret.reserve(ret.size() + numSections * tagLength); - bool bold = false; - for (int i = boldSections.size() - 1; i >= 0; --i) - { - if (!bold && boldSections.testBit(i)) - { - ret.insert(i + 1, QL1S("</b>")); - bold = true; - } - else if (bold && !boldSections.testBit(i)) - { - ret.insert(i + 1, QL1S("<b>")); - bold = false; - } - } - if (bold) - ret.insert(0, QL1S("<b>")); - return ret; -} - - -TextLabel::TextLabel(const QString &text, const QString &textToPointOut, QWidget *parent) - : QLabel(parent) -{ - setTextFormat(Qt::RichText); - setMouseTracking(false); - QString t = text; - const bool wasItalic = t.startsWith(QL1S("<i>")); - if (wasItalic) - t.remove(QRegExp(QL1S("<[/ib]*>"))); - t = Qt::escape(t); - QStringList words = Qt::escape(textToPointOut.simplified()).split(QL1C(' ')); - t = highlightWordsInText(t, words); - if (wasItalic) - t = QL1S("<i>") + t + QL1S("</i>"); - setText(t); - setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Maximum); -} - - -TextLabel::TextLabel(QWidget *parent) - : QLabel(parent) -{ - setTextFormat(Qt::RichText); - setMouseTracking(false); - setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Maximum); -} - - -void TextLabel::setEngineText(const QString &engine, const QString &text) -{ - setText(i18nc("%1=search engine, e.g. Google, Wikipedia %2=text to search for", "Search %1 for <b>%2</b>", engine, Qt::escape(text))); -} - - -// --------------------------------------------------------------- - - -DescriptionLabel::DescriptionLabel(const QString &text, QWidget *parent) - : QLabel(parent) -{ - QString t = text; - const bool wasItalic = t.startsWith(QL1S("<i>")); - if (wasItalic) - t.remove(QRegExp("<[/ib]*>")); - - if (wasItalic) - t = QL1S("<i>") + t + QL1S("</i>"); - - setWordWrap(false); //NOTE: why setWordWrap(true) make items have a strange behavior ? - setText(t); - setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Maximum); -} - - -//-------------------------------------------------------------------------------------------- - - -PreviewListItem::PreviewListItem(const UrlSearchItem &item, const QString &text, QWidget *parent) - : ListItem(item, parent) -{ - QHBoxLayout *hLayout = new QHBoxLayout; - hLayout->setSpacing(4); - - // icon - hLayout->addWidget(new TypeIconLabel(item.type, this)); - - // url + text - QVBoxLayout *vLayout = new QVBoxLayout; - vLayout->setMargin(0); - - QString title = item.title; - if (title.isEmpty()) - { - title = item.url; - title = title.remove("http://"); - title.truncate(title.indexOf("/")); - } - - vLayout->addWidget(new TextLabel(title, text, this)); - vLayout->addWidget(new TextLabel("<i>" + item.url + "</i>", text, this)); - hLayout->addLayout(vLayout); - - // preview label icon - QLabel *previewLabelIcon = new QLabel(this); - previewLabelIcon->setFixedSize(45, 33); - new PreviewLabel(item.url, 38, 29, previewLabelIcon); - IconLabel* icon = new IconLabel(item.url, previewLabelIcon); - icon->move(27, 16); - hLayout->addWidget(previewLabelIcon); - - setLayout(hLayout); -} - - -// --------------------------------------------------------------- - - -PreviewLabel::PreviewLabel(const QString &url, int width, int height, QWidget *parent) - : QLabel(parent) -{ - setFixedSize(width, height); - setFrameStyle(QFrame::StyledPanel | QFrame::Raised); - - KUrl u = KUrl(url); - if (WebSnap::existsImage(KUrl(u))) - { - QPixmap preview; - preview.load(WebSnap::imagePathFromUrl(u)); - setPixmap(preview.scaled(width, height, Qt::IgnoreAspectRatio, Qt::SmoothTransformation)); - } -} - - -// --------------------------------------------------------------- - - -ImageLabel::ImageLabel(const QString &url, int width, int height, QWidget *parent) - : QLabel(parent), - m_url(url) -{ - setFixedSize(width, height); - if (WebSnap::existsImage(KUrl(url))) - { - QPixmap pix; - pix.load(WebSnap::imagePathFromUrl(url)); - setPixmap(pix); - } - else - { - KIO::TransferJob *job = KIO::get(KUrl(url), KIO::NoReload, KIO::HideProgressInfo); - connect(job, SIGNAL(data(KIO::Job*, QByteArray)), - this, SLOT(slotData(KJob*, QByteArray))); - connect(job, SIGNAL(result(KJob*)), - this, SLOT(slotResult(KJob*))); - } -} - - -void ImageLabel::slotData(KJob *job, const QByteArray &data) -{ - Q_UNUSED(job); - m_data.append(data); -} - - -void ImageLabel::slotResult(KJob *) -{ - QPixmap pix; - if (!pix.loadFromData(m_data)) - kDebug() << "error while loading image: "; - setPixmap(pix); - pix.save(WebSnap::imagePathFromUrl(m_url), "PNG"); -} - - -// --------------------------------------------------------------- - - -SearchListItem::SearchListItem(const UrlSearchItem &item, const QString &text, QWidget *parent) - : ListItem(item, parent) - , m_text(text) -{ - m_iconLabel = new IconLabel(SearchEngine::buildQuery(UrlResolver::searchEngine(), ""), this); - m_titleLabel = new TextLabel(this); - m_titleLabel->setEngineText(UrlResolver::searchEngine()->name(), item.title); - m_engineBar = new EngineBar(UrlResolver::searchEngine(), parent); - - QHBoxLayout *hLayout = new QHBoxLayout; - hLayout->setSpacing(4); - - hLayout->addWidget(m_iconLabel); - hLayout->addWidget(m_titleLabel); - hLayout->addWidget(new QLabel(i18n("Engines: "), this)); - hLayout->addWidget(m_engineBar); - hLayout->addWidget(new TypeIconLabel(item.type, this)); - - setLayout(hLayout); - - connect(m_engineBar, SIGNAL(searchEngineChanged(KService::Ptr)), this, SLOT(changeSearchEngine(KService::Ptr))); -} - - -QString SearchListItem::text() -{ - return m_text; -} - - -void SearchListItem::changeSearchEngine(KService::Ptr engine) -{ - // NOTE: This to let rekonq loading text typed in the requested engine on click. - // There probably is a better way to do it. I just cannot see it now... - UrlSearchItem item = UrlSearchItem(UrlSearchItem::Search, SearchEngine::buildQuery(engine, m_text), m_text); - SearchListItem sItem(item, m_text, this); - emit itemClicked(&sItem, Qt::LeftButton, Qt::NoModifier); -} - - -void SearchListItem::nextItemSubChoice() -{ - m_engineBar->selectNextEngine(); -} - - -// ----------------------------------------------------------------------------------------------- - - -EngineBar::EngineBar(KService::Ptr selectedEngine, QWidget *parent) - : KToolBar(parent) -{ - setIconSize(QSize(16, 16)); - setToolButtonStyle(Qt::ToolButtonIconOnly); - - m_engineGroup = new QActionGroup(this); - m_engineGroup->setExclusive(true); - - if (SearchEngine::defaultEngine().isNull()) - return; - m_engineGroup->addAction(newEngineAction(SearchEngine::defaultEngine(), selectedEngine)); - Q_FOREACH(const KService::Ptr & engine, SearchEngine::favorites()) - { - if (engine->desktopEntryName() != SearchEngine::defaultEngine()->desktopEntryName()) - { - m_engineGroup->addAction(newEngineAction(engine, selectedEngine)); - } - } - - addActions(m_engineGroup->actions()); -} - - -KAction *EngineBar::newEngineAction(KService::Ptr engine, KService::Ptr selectedEngine) -{ - QUrl u = engine->property("Query").toUrl(); - KUrl url = KUrl(u.toString(QUrl::RemovePath | QUrl::RemoveQuery)); - - KAction *a = new KAction(rApp->iconManager()->iconForUrl(url), engine->name(), this); - a->setCheckable(true); - if (engine->desktopEntryName() == selectedEngine->desktopEntryName()) a->setChecked(true); - a->setData(engine->entryPath()); - connect(a, SIGNAL(triggered(bool)), this, SLOT(changeSearchEngine())); - return a; -} - - -void EngineBar::changeSearchEngine() -{ - KAction *a = qobject_cast<KAction*>(sender()); - emit searchEngineChanged(KService::serviceByDesktopPath(a->data().toString())); -} - - -void EngineBar::selectNextEngine() -{ - QList<QAction *> e = m_engineGroup->actions(); - int i = 0; - while (i < e.count() && !e.at(i)->isChecked()) - { - i++; - } - - if (i + 1 == e.count()) - { - e.at(0)->setChecked(true); - e.at(0)->trigger(); - } - else - { - e.at(i + 1)->setChecked(true); - e.at(i + 1)->trigger(); - } -} - - -// --------------------------------------------------------------- - - -SuggestionListItem::SuggestionListItem(const UrlSearchItem &item, const QString &text, QWidget *parent) - : ListItem(item, parent) - , m_text(item.title) -{ - QHBoxLayout *hLayout = new QHBoxLayout; - hLayout->setSpacing(4); - - hLayout->addWidget(new IconLabel(item.url, this)); - hLayout->addWidget(new TextLabel(item.title, text, this)); - hLayout->addWidget(new TypeIconLabel(item.type, this)); - - setLayout(hLayout); -} - - -QString SuggestionListItem::text() -{ - return m_text; -} - - -// --------------------------------------------------------------- - - -VisualSuggestionListItem::VisualSuggestionListItem(const UrlSearchItem &item, const QString &text, QWidget *parent) - : ListItem(item, parent) - , m_text(item.title) -{ - - QHBoxLayout *hLayout = new QHBoxLayout; - hLayout->setSpacing(4); - QLabel *previewLabelIcon = new QLabel(this); - - if (!item.image.isEmpty()) - { - previewLabelIcon->setFixedSize(item.image_width + 10, item.image_height + 10); - new ImageLabel(item.image, item.image_width, item.image_height, previewLabelIcon); - IconLabel* icon = new IconLabel(item.url, previewLabelIcon); - icon->move(item.image_width - 10, item.image_height - 10); - } - else - { - previewLabelIcon->setFixedSize(18, 18); - new IconLabel(item.url, previewLabelIcon); - } - - hLayout->addWidget(previewLabelIcon); - QVBoxLayout *vLayout = new QVBoxLayout; - vLayout->setMargin(0); - vLayout->addItem(new QSpacerItem(0, 0, QSizePolicy::Expanding, QSizePolicy::MinimumExpanding)); - vLayout->addWidget(new TextLabel(item.title, text, this)); - DescriptionLabel *d = new DescriptionLabel("", this); - vLayout->addWidget(d); - vLayout->addItem(new QSpacerItem(0, 0, QSizePolicy::Expanding, QSizePolicy::MinimumExpanding)); - hLayout->addLayout(vLayout); - hLayout->addWidget(new TypeIconLabel(item.type, this)); - setLayout(hLayout); - d->setText("<i>" + item.description + "</i>"); -} - - -QString VisualSuggestionListItem::text() -{ - return m_text; -} - - -// --------------------------------------------------------------- - - -BrowseListItem::BrowseListItem(const UrlSearchItem &item, const QString &text, QWidget *parent) - : ListItem(item, parent) -{ - QHBoxLayout *hLayout = new QHBoxLayout; - hLayout->setSpacing(4); - - hLayout->addWidget(new IconLabel(item.url, this)); - hLayout->addWidget(new TextLabel(item.url, text, this)); - hLayout->addWidget(new TypeIconLabel(item.type, this)); - - setLayout(hLayout); -} - - -// --------------------------------------------------------------- - - -ListItem *ListItemFactory::create(const UrlSearchItem &item, const QString &text, QWidget *parent) -{ - if (item.type & UrlSearchItem::Search) - { - return new SearchListItem(item, text, parent); - } - - if (item.type & UrlSearchItem::Browse) - { - return new BrowseListItem(item, text, parent); - } - - if (item.type & UrlSearchItem::History) - { - return new PreviewListItem(item, text, parent); - } - - if (item.type & UrlSearchItem::Bookmark) - { - return new PreviewListItem(item, text, parent); - } - - if (item.type & UrlSearchItem::Suggestion) - { - if (item.description.isEmpty()) - { - return new SuggestionListItem(item, text, parent); - } - - return new VisualSuggestionListItem(item, text, parent); - } - - return new PreviewListItem(item, text, parent); -} diff --git a/src/urlbar/listitem.h b/src/urlbar/listitem.h deleted file mode 100644 index 84e3501b..00000000 --- a/src/urlbar/listitem.h +++ /dev/null @@ -1,291 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2009-2012 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 LISTITEM_H -#define LISTITEM_H - - -// Rekonq Includes -#include "rekonq_defines.h" - -// KDE Includes -#include <KToolBar> -#include <KService> -#include <KUrl> - -// Qt Includes -#include <QWidget> -#include <QLabel> -#include <QStyleOptionViewItemV4> -#include <QString> -#include <QByteArray> - -// Forward Declarations -class UrlSearchItem; - -class KAction; -class KIcon; -class KJob; - -class QActionGroup; - - -class ListItem : public QWidget -{ - Q_OBJECT - -public: - explicit ListItem(const UrlSearchItem &item, QWidget *parent = 0); - virtual ~ListItem(); - - void activate(); - void deactivate(); - - KUrl url(); - virtual QString text(); - -public Q_SLOTS: - virtual void nextItemSubChoice(); - -Q_SIGNALS: - void itemClicked(ListItem *item, Qt::MouseButton, Qt::KeyboardModifiers); - void updateList(); - -protected: - virtual void paintEvent(QPaintEvent *event); - virtual void enterEvent(QEvent *); - virtual void leaveEvent(QEvent *); - virtual void mousePressEvent(QMouseEvent *e); - -private: - QStyleOptionViewItemV4 m_option; - -protected: - KUrl m_url; -}; - - -// ------------------------------------------------------------------------- - - -class TypeIconLabel : public QLabel -{ - Q_OBJECT - -public: - explicit TypeIconLabel(int type, QWidget *parent = 0); - -private: - QLabel *getIcon(QString icon); -}; - - -// ------------------------------------------------------------------------- - - -class IconLabel : public QLabel -{ - Q_OBJECT - -public: - explicit IconLabel(const QString &icon, QWidget *parent = 0); - explicit IconLabel(const KIcon &icon, QWidget *parent = 0); -}; - - -// ------------------------------------------------------------------------- - - -class REKONQ_TESTS_EXPORT TextLabel : public QLabel -{ - Q_OBJECT - -public: - explicit TextLabel(const QString &text, const QString &textToPointOut = QString(), QWidget *parent = 0); - explicit TextLabel(QWidget *parent = 0); - - void setEngineText(const QString &engine, const QString &text); -}; - -// ------------------------------------------------------------------------- - - -class DescriptionLabel : public QLabel -{ - Q_OBJECT - -public: - explicit DescriptionLabel(const QString &text, QWidget *parent = 0); -}; - - -// ------------------------------------------------------------------------- - - -class EngineBar : public KToolBar -{ - Q_OBJECT - -public: - explicit EngineBar(KService::Ptr selectedEngine, QWidget *parent = 0); - void selectNextEngine(); - -Q_SIGNALS: - void searchEngineChanged(KService::Ptr engine); - -private Q_SLOTS: - void changeSearchEngine(); - -private: - KAction *newEngineAction(KService::Ptr engine, KService::Ptr selectedEngine); - QActionGroup *m_engineGroup; -}; - - -// ------------------------------------------------------------------------- - - -class SearchListItem : public ListItem -{ - Q_OBJECT - -public: - explicit SearchListItem(const UrlSearchItem &item, const QString &text, QWidget *parent = 0); - QString text(); - -public Q_SLOTS: - virtual void nextItemSubChoice(); - -private Q_SLOTS: - void changeSearchEngine(KService::Ptr engine); - -private: - TextLabel* m_titleLabel; - IconLabel* m_iconLabel; - EngineBar* m_engineBar; - QString m_text; - KService::Ptr m_currentEngine; -}; - - -// ------------------------------------------------------------------------- - - -class SuggestionListItem : public ListItem -{ - Q_OBJECT - -public: - SuggestionListItem(const UrlSearchItem &item, const QString &text, QWidget *parent = 0); - QString text(); - -private: - QString m_text; -}; - - -// ------------------------------------------------------------------------- - - -class VisualSuggestionListItem : public ListItem -{ - Q_OBJECT - -public: - VisualSuggestionListItem(const UrlSearchItem &item, const QString &text, QWidget *parent = 0); - QString text(); - -private: - QString m_text; -}; - - -// ------------------------------------------------------------------------- - - -class PreviewListItem : public ListItem -{ - Q_OBJECT - -public: - PreviewListItem(const UrlSearchItem &item, const QString &text, QWidget *parent = 0); -}; - - -// ------------------------------------------------------------------------- - - -class PreviewLabel : public QLabel -{ - Q_OBJECT - -public: - PreviewLabel(const QString &url, int width, int height, QWidget *parent = 0); -}; - - -// ------------------------------------------------------------------------- - -class ImageLabel : public QLabel -{ - Q_OBJECT - -public: - ImageLabel(const QString &url, int width, int height, QWidget *parent); - -private: - QString m_url; - QByteArray m_data; - -private Q_SLOTS: - void slotData(KJob* job, const QByteArray& data); - void slotResult(KJob* job); -}; - - -// ------------------------------------------------------------------------- - - -class BrowseListItem : public ListItem -{ - Q_OBJECT - -public: - BrowseListItem(const UrlSearchItem &item, const QString &text, QWidget *parent = 0); -}; - - -//------------------------------------------------------------------------------------------------- - - -class ListItemFactory -{ -public: - static ListItem *create(const UrlSearchItem &item, const QString &text, QWidget *parent); -}; - - -#endif diff --git a/src/urlbar/newresourcedialog.cpp b/src/urlbar/newresourcedialog.cpp deleted file mode 100644 index 39cffc36..00000000 --- a/src/urlbar/newresourcedialog.cpp +++ /dev/null @@ -1,121 +0,0 @@ -/* ============================================================ -* -* This is a part of the GSoC project 2011 - Fancy Bookmarking -* -* Copyright (c) 2011-2012 by Phaneendra Hegde <pnh.pes@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) 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 "newresourcedialog.h" -#include "newresourcedialog.moc" - -// Nepomuk Includes -#include <Nepomuk/Vocabulary/NCO> -#include <Nepomuk/Vocabulary/PIMO> -#include <Nepomuk/Resource> -#include <Nepomuk/Tag> - -// Qt Includes -#include <QPlainTextEdit> -#include <QVBoxLayout> -#include <QLabel> - - -class Nepomuk::NewResourceDialog::Private -{ -public: - KLineEdit *m_resourceName; - QPlainTextEdit *m_description; - QLabel *m_titleResource; - QLabel *m_desResource; - Nepomuk::NewResourceDialog *q; - Nepomuk::Resource m_nofResource; - int m_index; -}; - - -Nepomuk::NewResourceDialog::NewResourceDialog(int index, Nepomuk::Resource& nfoResource, QWidget* parent): - KDialog(parent), - d(new Private()) -{ - d->q = this; - d->m_index = index; - d->m_nofResource = nfoResource; - setWindowTitle(i18n("Link to new Resource")); - setButtonText(Ok, i18n("Link")); - setMinimumSize(200, 150); - - QVBoxLayout *layout = new QVBoxLayout(mainWidget()); - d->m_resourceName = new KLineEdit(mainWidget()); - d->m_titleResource = new QLabel(mainWidget()); - d->m_titleResource->setText(i18n("* Resource Name:")); - layout->addWidget(d->m_titleResource); - layout->addWidget(d->m_resourceName); - d->m_description = new QPlainTextEdit(mainWidget()); - d->m_desResource = new QLabel(mainWidget()); - d->m_desResource->setText(i18n("Description (Optional)")); - layout->addWidget(d->m_desResource); - layout->addWidget(d->m_description); - - connect(this, SIGNAL(okClicked()), this, SLOT(newResourceSlot())); -} - - -Nepomuk::NewResourceDialog::~NewResourceDialog() -{ - delete d; -} - - -void Nepomuk::NewResourceDialog::newResourceSlot() -{ - if (d->m_index == 1) - { - Nepomuk::Resource newResource(d->m_resourceName->text(), Nepomuk::Vocabulary::PIMO::Person()); - newResource.addSymbol("user-identity"); - d->m_nofResource.addIsRelated(newResource); - } - else if (d->m_index == 2) - { - Nepomuk::Resource newResource(d->m_resourceName->text(), Nepomuk::Vocabulary::PIMO::Project()); - newResource.addSymbol("project-development"); - d->m_nofResource.addIsRelated(newResource); - } - else if (d->m_index == 3) - { - Nepomuk::Resource newResource(d->m_resourceName->text(), Nepomuk::Vocabulary::PIMO::Task()); - newResource.addSymbol("view-pim-tasks"); - d->m_nofResource.addIsRelated(newResource); - } - else if (d->m_index == 4) - { - Nepomuk::Resource newResource(d->m_resourceName->text(), Nepomuk::Vocabulary::PIMO::Location()); - newResource.addSymbol("user-location"); - d->m_nofResource.addIsRelated(newResource); - } - else if (d->m_index == 5) - { - Nepomuk::Resource newResource(d->m_resourceName->text(), Nepomuk::Vocabulary::PIMO::Note()); - newResource.addSymbol("knotes"); - d->m_nofResource.addIsRelated(newResource); - } -} diff --git a/src/urlbar/newresourcedialog.h b/src/urlbar/newresourcedialog.h deleted file mode 100644 index 651c631c..00000000 --- a/src/urlbar/newresourcedialog.h +++ /dev/null @@ -1,57 +0,0 @@ -/* ============================================================ -* -* This is a part of the GSoC project 2011 - Fancy Bookmarking -* -* Copyright (c) 2011-2012 by Phaneendra Hegde <pnh.pes@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) 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 NEWRESOURCEDIALOG_H -#define NEWRESOURCEDIALOG_H - - -// KDE Includes -#include <KDialog> -#include <KLineEdit> - -#include <Nepomuk/Resource> - - -namespace Nepomuk -{ -class NewResourceDialog : public KDialog -{ - Q_OBJECT - -public: - explicit NewResourceDialog(int index, Nepomuk::Resource& nfoResource, QWidget* parent = 0); - virtual ~NewResourceDialog(); - -private Q_SLOTS: - void newResourceSlot(); - -private: - class Private; - Private* const d; -}; -} - -#endif // NEWRESOURCEDIALOG_H diff --git a/src/urlbar/resourcelinkdialog.cpp b/src/urlbar/resourcelinkdialog.cpp deleted file mode 100644 index 8a4b5685..00000000 --- a/src/urlbar/resourcelinkdialog.cpp +++ /dev/null @@ -1,385 +0,0 @@ -/* ============================================================ -* -* This is a part of the GSoC project 2011 - Fancy Bookmarking -* -* Copyright (c) 2011-2012 by Phaneendra Hegde <pnh.pes@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) 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 "resourcelinkdialog.h" -#include "resourcelinkdialog.moc" - -// Local Includes -#include "newresourcedialog.h" - -// Qt Includes -#include <QGridLayout> -#include <QHBoxLayout> -#include <QComboBox> -#include <QAbstractItemView> -#include <QLabel> -#include <QListView> -#include <QPushButton> -#include <QColumnView> -#include <QStringListModel> -#include <QStandardItem> -#include <QModelIndexList> -#include <QItemSelectionModel> -#include <QMenu> -#include <QListWidget> - -// KDE Includes -#include <KLocale> -#include <KDebug> -#include <KAction> -#include <KIcon> - -// Nepomuk Includes -#include <Nepomuk/Utils/SimpleResourceModel> -#include <Nepomuk/Query/Term> -#include <Nepomuk/Query/Result> -#include <Nepomuk/Query/ResourceTypeTerm> -#include <Nepomuk/Query/QueryServiceClient> -#include <Nepomuk/Vocabulary/PIMO> -#include <Nepomuk/Vocabulary/NCO> -#include <Nepomuk/Query/QueryParser> -#include <Nepomuk/Variant> - - -class Nepomuk::ResourceLinkDialog::Private -{ -public: - void _k_selectionChanged(); - - KLineEdit *m_searchBox; - QListView *m_resourceView; - QListView *m_linkedResources; - KAction *m_removeResourceAction; - QComboBox *m_resourceSelect; - QLabel *m_resourceLabel; - QLabel *m_linkedResourceLabel; - QColumnView *m_leftPanel; - QStringListModel *m_model; - QPushButton *m_newResourceButton; - Utils::SimpleResourceModel *m_resourceModel; - Utils::SimpleResourceModel *m_linkedResourceModel; - Nepomuk::ResourceLinkDialog *q; - - Nepomuk::Resource m_nfoResource; - -}; - - -void Nepomuk::ResourceLinkDialog::Private::_k_selectionChanged() -{ - q->enableButton(KDialog::User1, !m_resourceView->selectionModel()->selectedRows().isEmpty()); -} - - -Nepomuk::ResourceLinkDialog::ResourceLinkDialog(Nepomuk::Resource &nfoResource, QWidget* parent): - KDialog(parent), - d(new Private()) -{ - d->m_nfoResource = nfoResource; - setWindowTitle(i18n("Resource Linker")); - setButtons(Ok | User1 | User2 | Cancel); - enableButtonCancel(true); - enableButtonOk(true); - enableButton(User1, false); - setButtonText(Ok, i18n("Done")); - setButtonText(User1, i18n("Link")); - setButtonText(User2, "Unlink"); - setMinimumSize(400, 350); -// d->m_resourceView->setSelectionMode(QAbstractItemView::ExtendedSelection); - QGridLayout *mainLayout = new QGridLayout(mainWidget()); - - d->q = this; - - d->m_linkedResources = new QListView(mainWidget()); - d->m_linkedResourceModel = new Utils::SimpleResourceModel(this); - d->m_linkedResources->setModel(d->m_linkedResourceModel); - setRelatedResources(); - - d->m_searchBox = new KLineEdit(mainWidget()); - d->m_searchBox->setPlaceholderText(i18n("Search resources")); - connect(d->m_searchBox, SIGNAL(textChanged(QString)), this, SLOT(dynamicSearchingSlot())); - - d->m_resourceView = new QListView(mainWidget()); - d->m_resourceView->setToolTip(i18n(" Double click to link resource ")); - d->m_resourceModel = new Utils::SimpleResourceModel(this); - d->m_resourceView->setModel(d->m_resourceModel); - - d->m_resourceSelect = new QComboBox(mainWidget()); - QStringList rlist; - rlist << i18n("Any resource") << i18n("Persons") << i18n("Projects") << i18n("Tasks") << i18n("Places") << i18n("Notes"); - d->m_resourceSelect->addItems(rlist); - d->m_resourceSelect->setItemIcon(1, KIcon("user-identity")); - d->m_resourceSelect->setItemIcon(2, KIcon("project-development")); - d->m_resourceSelect->setItemIcon(3, KIcon("view-pim-tasks")); - d->m_resourceSelect->setItemIcon(4, KIcon("user-location")); - d->m_resourceSelect->setItemIcon(5, KIcon("knotes")); - connect(d->m_resourceSelect, SIGNAL(currentIndexChanged(int)), this, SLOT(resourceSelectedSlot(int))); - - d->m_resourceLabel = new QLabel(i18n("Matching resources:"), mainWidget()); - d->m_linkedResourceLabel = new QLabel(i18n("Linked Resources:"), mainWidget()); - - - d->m_newResourceButton = new QPushButton(mainWidget()); - d->m_newResourceButton->setText(i18n("Create New Resource")); - if (d->m_resourceSelect->currentIndex() == 0) - { - d->m_newResourceButton->setEnabled(false); - } - connect(d->m_newResourceButton, SIGNAL(clicked()), this, SLOT(createNewResourceSlot())); - - QVBoxLayout *vlayoutR = new QVBoxLayout; - QVBoxLayout *vlayoutL = new QVBoxLayout; - vlayoutL->addWidget(d->m_searchBox); - vlayoutL->addWidget(d->m_resourceLabel); - vlayoutL->addWidget(d->m_resourceView); - vlayoutR->addWidget(d->m_resourceSelect); - vlayoutR->addWidget(d->m_linkedResourceLabel); - vlayoutR->addWidget(d->m_linkedResources); - vlayoutR->addWidget(d->m_newResourceButton); - mainLayout->addLayout(vlayoutL, 1 , 1); - mainLayout->addLayout(vlayoutR, 1, 2); - mainLayout->setColumnMinimumWidth(1, 100); - - d->m_linkedResources->setContextMenuPolicy(Qt::CustomContextMenu); - - connect(d->m_resourceView->selectionModel(), SIGNAL(selectionChanged(QItemSelection, QItemSelection)), - this, SLOT(_k_selectionChanged())); - connect(d->m_linkedResources->selectionModel(), SIGNAL(selectionChanged(QItemSelection, QItemSelection)), - this, SLOT(_k_selectionChanged())); - connect(this, SIGNAL(user1Clicked()), this, SLOT(linkResourceSlot())); - connect(this, SIGNAL(user2Clicked()), this, SLOT(unlinkResourceSlot())); - connect(d->m_resourceView, SIGNAL(doubleClicked(QModelIndex)), this, SLOT(linkResourceSlot())); - connect(d->m_linkedResources, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(showContextMenu(QPoint))); - - if (!d->m_linkedResources->selectionModel()->selectedRows().isEmpty()) - { - enableButton(User2, true); - } -} - - -Nepomuk::ResourceLinkDialog::~ResourceLinkDialog() -{ - delete d; -} - - -void Nepomuk::ResourceLinkDialog::setRelatedResources() -{ - QList<Nepomuk::Resource> relatedResourceList = d->m_nfoResource.isRelateds(); - d->m_linkedResourceModel->setResources(relatedResourceList); - -} - - -void Nepomuk::ResourceLinkDialog::linkResourceSlot() -{ - QModelIndexList selectedResourceList; - selectedResourceList << d->m_resourceView->selectionModel()->selectedIndexes(); - Q_FOREACH(const QModelIndex & i, selectedResourceList) - { - d->m_resourceView->selectionModel()->setCurrentIndex(i, QItemSelectionModel::NoUpdate); - d->m_nfoResource.addIsRelated(d->m_resourceModel->resourceForIndex(d->m_resourceView->selectionModel()->currentIndex())); - } - setRelatedResources(); -} - - -void Nepomuk::ResourceLinkDialog::unlinkResourceSlot() -{ - d->m_nfoResource.removeProperty(Nepomuk::Resource::isRelatedUri(), - d->m_linkedResourceModel->resourceForIndex( - d->m_linkedResources->selectionModel()->currentIndex())); - setRelatedResources(); -} - - -void Nepomuk::ResourceLinkDialog::showContextMenu(const QPoint &pos) -{ - d->m_removeResourceAction = new KAction(this); - d->m_removeResourceAction->setText(i18n("&Unlink ")); - d->m_removeResourceAction->setIcon(KIcon("edit-delete")); - connect(d->m_removeResourceAction, SIGNAL(triggered(bool)), this, SLOT(unlinkResourceSlot())); - - QMenu myMenu; - QPoint globalPos = d->m_linkedResources->mapToGlobal(pos); - myMenu.addAction(d->m_removeResourceAction); - myMenu.exec(globalPos); -} - - -void Nepomuk::ResourceLinkDialog::createNewResourceSlot() -{ - Nepomuk::NewResourceDialog newResource(d->m_resourceSelect->currentIndex(), d->m_nfoResource); - //close(); - newResource.exec(); - setRelatedResources(); -} - - -void Nepomuk::ResourceLinkDialog::dynamicSearchingSlot() -{ - Nepomuk::Query::Query query; - Nepomuk::Query::QueryServiceClient *test; - switch (d->m_resourceSelect->currentIndex()) - { - case 1: - query = Nepomuk::Query::QueryParser::parseQuery(d->m_searchBox->text()); - query = query && Nepomuk::Query::ResourceTypeTerm(Nepomuk::Vocabulary::PIMO::Person()); - test = new Nepomuk::Query::QueryServiceClient(this); - test->query(query); - d->m_resourceModel->clear(); - connect(test, SIGNAL(newEntries(QList<Nepomuk::Query::Result>)), - d->m_resourceModel, SLOT(addResults(QList<Nepomuk::Query::Result>))); - break; - - case 2: - query = Nepomuk::Query::QueryParser::parseQuery(d->m_searchBox->text()); - query = query && Nepomuk::Query::ResourceTypeTerm(Nepomuk::Vocabulary::PIMO::Project()); - test = new Nepomuk::Query::QueryServiceClient(this); - test->query(query); - d->m_resourceModel->clear(); - connect(test, SIGNAL(newEntries(QList<Nepomuk::Query::Result>)), - d->m_resourceModel, SLOT(addResults(QList<Nepomuk::Query::Result>))); - break; - - case 3: - query = Nepomuk::Query::QueryParser::parseQuery(d->m_searchBox->text()); - query = query && Nepomuk::Query::ResourceTypeTerm(Nepomuk::Vocabulary::PIMO::Task()); - test = new Nepomuk::Query::QueryServiceClient(this); - test->query(query); - d->m_resourceModel->clear(); - connect(test, SIGNAL(newEntries(QList<Nepomuk::Query::Result>)), - d->m_resourceModel, SLOT(addResults(QList<Nepomuk::Query::Result>))); - break; - - case 4: - query = Nepomuk::Query::QueryParser::parseQuery(d->m_searchBox->text()); - query = query && Nepomuk::Query::ResourceTypeTerm(Nepomuk::Vocabulary::PIMO::Location()); - test = new Nepomuk::Query::QueryServiceClient(this); - test->query(query); - d->m_resourceModel->clear(); - connect(test, SIGNAL(newEntries(QList<Nepomuk::Query::Result>)), - d->m_resourceModel, SLOT(addResults(QList<Nepomuk::Query::Result>))); - break; - - case 5: - query = Nepomuk::Query::QueryParser::parseQuery(d->m_searchBox->text()); - query = query && Nepomuk::Query::ResourceTypeTerm(Nepomuk::Vocabulary::PIMO::Note()); - test = new Nepomuk::Query::QueryServiceClient(this); - test->query(query); - d->m_resourceModel->clear(); - connect(test, SIGNAL(newEntries(QList<Nepomuk::Query::Result>)), - d->m_resourceModel, SLOT(addResults(QList<Nepomuk::Query::Result>))); - break; - - default: - break; - } -} - - -void Nepomuk::ResourceLinkDialog::resourceSelectedSlot(int index) -{ - enableButton(User1, true); - d->m_newResourceButton->setEnabled(true); - if (index == 0) - { - d->m_resourceModel->clear(); - d->m_newResourceButton->setEnabled(false); - } - //List Personal Contacts - if (index == 1) - { - Nepomuk::Query::Term term = Nepomuk::Query::ResourceTypeTerm(Nepomuk::Vocabulary::PIMO::Person()); - Nepomuk::Query::Query query(term); - query.setLimit(20); - QList<Nepomuk::Query::Result>results = Nepomuk::Query::QueryServiceClient::syncQuery(query); - QList <Nepomuk::Resource> resource; - Q_FOREACH(const Nepomuk::Query::Result & result, results) - { - resource.append(result.resource()); - } - d->m_resourceModel->setResources(resource); - } - //List Projects - else if (index == 2) - { - Nepomuk::Query::Term term = Nepomuk::Query::ResourceTypeTerm(Nepomuk::Vocabulary::PIMO::Project()); - Nepomuk::Query::Query query(term); - query.setLimit(20); - QList<Nepomuk::Query::Result>results = Nepomuk::Query::QueryServiceClient::syncQuery(query); - QList <Nepomuk::Resource> resource; - Q_FOREACH(const Nepomuk::Query::Result & result, results) - { - resource.append(result.resource()); - } - d->m_resourceModel->setResources(resource); - } - //List Tasks - else if (index == 3) - { - Nepomuk::Query::Term term = Nepomuk::Query::ResourceTypeTerm(Nepomuk::Vocabulary::PIMO::Task()); - Nepomuk::Query::Query query(term); - query.setLimit(20); - QList<Nepomuk::Query::Result>results = Nepomuk::Query::QueryServiceClient::syncQuery(query); - QList <Nepomuk::Resource> resource; - Q_FOREACH(const Nepomuk::Query::Result & result, results) - { - resource.append(result.resource()); - } - d->m_resourceModel->setResources(resource); - } - //List Places - else if (index == 4) - { - Nepomuk::Query::Term term = Nepomuk::Query::ResourceTypeTerm(Nepomuk::Vocabulary::PIMO::Location()); - Nepomuk::Query::Query query(term); - query.setLimit(20); - QList<Nepomuk::Query::Result>results = Nepomuk::Query::QueryServiceClient::syncQuery(query); - QList <Nepomuk::Resource> resource; - Q_FOREACH(const Nepomuk::Query::Result & result, results) - { - resource.append(result.resource()); - } - d->m_resourceModel->setResources(resource); - } - //List Notes - else if (index == 5) - { - Nepomuk::Query::Term term = Nepomuk::Query::ResourceTypeTerm(Nepomuk::Vocabulary::PIMO::Note()); - Nepomuk::Query::Query query(term); - query.setLimit(20); - QList<Nepomuk::Query::Result>results = Nepomuk::Query::QueryServiceClient::syncQuery(query); - QList <Nepomuk::Resource> resource; - Q_FOREACH(const Nepomuk::Query::Result & result, results) - { - resource.append(result.resource()); - } - d->m_resourceModel->setResources(resource); - } -} diff --git a/src/urlbar/resourcelinkdialog.h b/src/urlbar/resourcelinkdialog.h deleted file mode 100644 index e628aa10..00000000 --- a/src/urlbar/resourcelinkdialog.h +++ /dev/null @@ -1,73 +0,0 @@ -/* ============================================================ -* -* This is a part of the GSoC project 2011 - Fancy Bookmarking -* -* Copyright (c) 2011-2012 by Phaneendra Hegde <pnh.pes@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) 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 RESOURCELINKDIALOG_H -#define RESOURCELINKDIALOG_H - -//Qt includes -#include <QListView> - -//kde includes -#include <KDialog> -#include <KLineEdit> -#include <KConfigDialog> - - -namespace Nepomuk -{ -class Resource; - -namespace Query -{ -class Query; -} - -class ResourceLinkDialog : public KDialog -{ - Q_OBJECT - -public: - explicit ResourceLinkDialog(Nepomuk::Resource& nfoResource, QWidget* parent = 0); - virtual ~ResourceLinkDialog(); - void setRelatedResources(); - -private Q_SLOTS: - void dynamicSearchingSlot(); - void resourceSelectedSlot(int); - void linkResourceSlot(); - void unlinkResourceSlot(); - void createNewResourceSlot(); - void showContextMenu(const QPoint&); - - -private: - class Private; - Private* const d; - -}; -} - -#endif // RESOURCELINKDIALOG_H diff --git a/src/urlbar/rsswidget.cpp b/src/urlbar/rsswidget.cpp deleted file mode 100644 index 2e452fbb..00000000 --- a/src/urlbar/rsswidget.cpp +++ /dev/null @@ -1,166 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2010-2011 by Matthieu Gicquel <matgic78 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 "rsswidget.h" -#include "rsswidget.moc" - -// Local includes -#include "application.h" -#include "iconmanager.h" -#include "mainwindow.h" -#include "webtab.h" - -// KDE Includes -#include <KComboBox> -#include <KLocalizedString> -#include <KMessageBox> -#include <KProcess> -#include <KUrl> - -// Qt Includes -#include <QDBusConnectionInterface> -#include <QDBusInterface> - -#include <QDialogButtonBox> -#include <QFormLayout> -#include <QLabel> -#include <QPushButton> - - -RSSWidget::RSSWidget(const QMap< KUrl, QString > &map, QWidget *parent) - : QMenu(parent) - , m_map(map) -{ - setAttribute(Qt::WA_DeleteOnClose); - setFixedWidth(350); - - QFormLayout *layout = new QFormLayout(this); - - // Title - QLabel *title = new QLabel(this); - title->setText(i18n("Subscribe to RSS Feeds")); - QFont f = title->font(); - f.setBold(true); - title->setFont(f); - layout->addRow(title); - - // Agregators - QLabel *agregator = new QLabel(this); - agregator->setText(i18n("Aggregator:")); - - m_agregators = new KComboBox(this); - m_agregators->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); - - m_agregators->addItem(KIcon("akregator"), QString("Akregator")); - m_agregators->addItem(rApp->iconManager()->iconForUrl(KUrl("http://google.com/reader")), i18n("Google Reader")); - - layout->addRow(agregator, m_agregators); - - // Feeds List - QLabel *feed = new QLabel(this); - feed->setText(i18n("Feed:")); - - m_feeds = new KComboBox(this); - m_feeds->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); - - Q_FOREACH(const QString & title, m_map) - { - m_feeds->addItem(title); - } - - layout->addRow(feed, m_feeds); - - // Buttons - QDialogButtonBox *buttonBox = new QDialogButtonBox(QDialogButtonBox::Cancel, Qt::Horizontal, this); - - QPushButton *addFeed = new QPushButton(KIcon("list-add"), i18n("Add Feed"), buttonBox); - buttonBox->addButton(addFeed, QDialogButtonBox::AcceptRole); - - connect(buttonBox, SIGNAL(accepted()), this, SLOT(accept())); - connect(buttonBox, SIGNAL(rejected()), this, SLOT(close())); - - layout->addRow(buttonBox); -} - - -void RSSWidget::showAt(const QPoint &pos) -{ - adjustSize(); - - QPoint p(pos.x() - width(), pos.y() + 10); - move(p); - show(); -} - - -void RSSWidget::accept() -{ - QString url = m_map.key(m_feeds->currentText()).toMimeDataString(); - - if (m_agregators->currentIndex() == 0) - addWithAkregator(url); - else - addWithGoogleReader(url); - - close(); -} - - -void RSSWidget::addWithGoogleReader(const QString &url) -{ - KUrl toLoad = KUrl("http://www.google.com/ig/add?feedurl=" + url); - rApp->mainWindow()->currentTab()->view()->load(toLoad); -} - - -void RSSWidget::addWithAkregator(const QString &url) -{ - // Akregator is running - if (QDBusConnection::sessionBus().interface()->isServiceRegistered("org.kde.akregator")) - { - QDBusInterface akregator("org.kde.akregator", "/Akregator", "org.kde.akregator.part"); - QDBusReply<void> reply = akregator.call("addFeedsToGroup", QStringList(url) , i18n("Imported Feeds")); - - if (!reply.isValid()) - { - KMessageBox::error(0, QString(i18n("Could not add feed to Akregator. Please add it manually:") - + "<br /><br /> <a href=\"" + url + "\">" + url + "</a>")); - } - } - // Akregator is not running - else - { - KProcess proc; - proc << "akregator" << "-g" << i18n("Imported Feeds"); - proc << "-a" << url; - if (proc.startDetached() == 0) - { - KMessageBox::error(0, QString(i18n("There was an error. Please verify Akregator is installed on your system.") - + "<br /><br /> <a href=\"" + url + "\">" + url + "</a>")); - } - } -} diff --git a/src/urlbar/rsswidget.h b/src/urlbar/rsswidget.h deleted file mode 100644 index eaa3de7d..00000000 --- a/src/urlbar/rsswidget.h +++ /dev/null @@ -1,61 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2010-2011 by Matthieu Gicquel <matgic78 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 RSSWIDGET_H -#define RSSWIDGET_H - -// Qt Includes -#include <QMenu> - -// Forward Declarations -class KComboBox; -class KUrl; - - -class RSSWidget : public QMenu -{ - Q_OBJECT - -public: - // QMap< feedUrl, feedTitle> - RSSWidget(const QMap<KUrl, QString> &map, QWidget *parent = 0); - - void showAt(const QPoint &pos); - -private Q_SLOTS: - void accept(); - -private: - void addWithAkregator(const QString &url); - void addWithGoogleReader(const QString &url); - - QMap<KUrl, QString> m_map; - - KComboBox *m_agregators; - KComboBox *m_feeds; -}; - -#endif // RSSWIDGET_H diff --git a/src/urlbar/sslwidget.cpp b/src/urlbar/sslwidget.cpp deleted file mode 100644 index 52724733..00000000 --- a/src/urlbar/sslwidget.cpp +++ /dev/null @@ -1,252 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2011-2012 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/>. -* -* ============================================================ */ - - -// Auto Includes -#include "sslwidget.h" -#include "sslwidget.moc" - -// Local includes -#include "application.h" -#include "historymanager.h" -#include "sslinfodialog.h" - -// Qt Includes -#include <QPointer> - -#include <QDialogButtonBox> -#include <QGridLayout> -#include <QLabel> -#include <QPushButton> -#include <QTextDocument> - - -SSLWidget::SSLWidget(const QUrl &url, const WebSslInfo &info, QWidget *parent) - : QMenu(parent) - , m_url(url) - , m_info(info) -{ - setAttribute(Qt::WA_DeleteOnClose); - setMinimumWidth(400); - - QList<QSslCertificate> certList = m_info.certificateChain(); - QSslCertificate cert; - if (!certList.isEmpty()) - cert = certList.first(); - - QList<QStringList> certErrorList = SslInfoDialog::errorsFromString(m_info.certificateErrors()); - QStringList firstCertErrorList; - if (!certErrorList.isEmpty()) - firstCertErrorList = certErrorList.first(); - - QGridLayout *layout = new QGridLayout(this); - - QLabel *label; - QLabel *imageLabel; - - int rows = 0; - // ------------------------------------------------------------------------------------------------------ - imageLabel = new QLabel(this); - layout->addWidget(imageLabel, rows , 0, Qt::AlignCenter); - - label = new QLabel(this); - label->setWordWrap(true); - label->setText(i18n("Identity")); - QFont f1 = label->font(); - f1.setBold(true); - label->setFont(f1); - layout->addWidget(label, rows++, 1); - - label = new QLabel(this); - label->setWordWrap(true); - if (cert.isNull()) - { - label->setText(i18n("Warning: this site is NOT carrying a certificate.")); - imageLabel->setPixmap(KIcon("security-low").pixmap(32)); - layout->addWidget(label, rows++, 1); - } - else - { - if (cert.isValid() && firstCertErrorList.isEmpty()) - { - label->setText(i18n("The certificate for this site is valid and has been verified by:\n%1.", - Qt::escape(cert.issuerInfo(QSslCertificate::CommonName)))); - - imageLabel->setPixmap(KIcon("security-high").pixmap(32)); - } - else - { - QString c = QL1S("<ul>"); - Q_FOREACH(const QString & s, firstCertErrorList) - { - c += QL1S("<li>") + s + QL1S("</li>"); - } - c += QL1S("</ul>"); - - label->setText(i18n("The certificate for this site is NOT valid, for the following reasons:\n%1.", c)); - label->setTextFormat(Qt::RichText); - imageLabel->setPixmap(KIcon("security-low").pixmap(32)); - } - - layout->addWidget(label, rows++, 1); - - label = new QLabel(this); - label->setWordWrap(true); - label->setText(QL1S("<a href=\"moresslinfos\">") + i18n("Certificate Information") + QL1S("</a>")); - connect(label, SIGNAL(linkActivated(QString)), this, SLOT(showMoreSslInfos(QString))); - layout->addWidget(label, rows++, 1); - } - - // ------------------------------------------------------------------------------------------------------------- - label = new QLabel(this); - label->setWordWrap(true); - label->setText(i18n("Encryption")); - QFont f2 = label->font(); - f2.setBold(true); - label->setFont(f2); - layout->addWidget(label, rows, 1); - - imageLabel = new QLabel(this); - layout->addWidget(imageLabel, rows++ , 0, Qt::AlignCenter); - - QString ciph = m_info.ciphers(); - if (ciph.isEmpty()) // NOTE: Can I verify encryption in another (better?) way? - { - label = new QLabel(this); - label->setWordWrap(true); - label->setText(i18n("Your connection to %1 is NOT encrypted.\n", m_url.host())); - layout->addWidget(label, rows++ , 1); - - imageLabel->setPixmap(KIcon("security-low").pixmap(32)); - } - else - { - label = new QLabel(this); - label->setWordWrap(true); - label->setText(i18n("Your connection to \"%1\" is encrypted.\n", m_url.host())); - layout->addWidget(label, rows++, 1); - - QString vers = m_info.protocol(); - QString sslVersion; - if (vers == QL1S("SSLv3")) - { - sslVersion = QL1S("SSL 3.0"); - imageLabel->setPixmap(KIcon("security-high").pixmap(32)); - } - else if (vers == QL1S("SSLv2")) - { - sslVersion = QL1S("SSL 2.0"); - imageLabel->setPixmap(KIcon("security-low").pixmap(32)); - } - else if (vers == QL1S("TLSv1")) - { - sslVersion = QL1S("TLS 1.0"); - imageLabel->setPixmap(KIcon("security-high").pixmap(32)); - } - else - { - sslVersion = i18n("Unknown"); - imageLabel->setPixmap(KIcon("security-low").pixmap(32)); - } - - label = new QLabel(this); - label->setWordWrap(true); - label->setText(i18n("It uses protocol: %1.\n", sslVersion)); - layout->addWidget(label, rows++, 1); - - const QStringList cipherInfo = m_info.ciphers().split('\n', QString::SkipEmptyParts); - label = new QLabel(this); - label->setWordWrap(true); - label->setText( - i18n("It is encrypted using %1 at %2 bits, with %3 for message authentication and %4 with Auth %5 as key exchange mechanism.\n\n", - cipherInfo[0], - m_info.usedChiperBits(), - cipherInfo[3], - cipherInfo[2], - cipherInfo[1]) - ); - layout->addWidget(label, rows++, 1); - - } - - // ------------------------------------------------------------------------------------------------------------------ - imageLabel = new QLabel(this); - layout->addWidget(imageLabel, rows , 0, Qt::AlignCenter); - - label = new QLabel(this); - label->setWordWrap(true); - label->setText(i18n("Site Information")); - QFont f3 = label->font(); - f3.setBold(true); - label->setFont(f3); - layout->addWidget(label, rows++, 1); - - label = new QLabel(this); - label->setWordWrap(true); - - QList<HistoryItem> hList = rApp->historyManager()->find(url.toString()); - HistoryItem firstVisit = hList.isEmpty() ? - HistoryItem() : - hList.first() ; - - if (firstVisit.visitCount == 1) - { - label->setText(i18n("It is your first time visiting this site.")); - imageLabel->setPixmap(KIcon("security-medium").pixmap(32)); - } - else - { - label->setText(i18n("You just visited this site.\nYour first visit was on %1.\n", firstVisit.firstDateTimeVisit.toString())); - imageLabel->setPixmap(KIcon("security-high").pixmap(32)); - } - layout->addWidget(label, rows++, 1); - -} - - -void SSLWidget::showAt(const QPoint &pos) -{ - adjustSize(); - - QPoint p(pos.x() - width(), pos.y() + 10); - move(p); - show(); -} - - -void SSLWidget::accept() -{ - close(); -} - - -void SSLWidget::showMoreSslInfos(const QString &) -{ - QPointer<SslInfoDialog> dlg = new SslInfoDialog(m_url.host(), m_info, this); - dlg->exec(); - delete dlg; - - return; -} diff --git a/src/urlbar/sslwidget.h b/src/urlbar/sslwidget.h deleted file mode 100644 index dd6f020d..00000000 --- a/src/urlbar/sslwidget.h +++ /dev/null @@ -1,58 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2011-2012 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 SSL_WIDGET_H -#define SSL_WIDGET_H - - -// Local Includes -#include "websslinfo.h" - -// Qt Includes -#include <QMenu> - -#include <QUrl> - - -class SSLWidget : public QMenu -{ - Q_OBJECT - -public: - SSLWidget(const QUrl &url, const WebSslInfo &info, QWidget *parent = 0); - - void showAt(const QPoint &pos); - -private Q_SLOTS: - void showMoreSslInfos(const QString &); - void accept(); - -private: - QUrl m_url; - WebSslInfo m_info; -}; - -#endif // SSL_WIDGET_H diff --git a/src/urlbar/stackedurlbar.cpp b/src/urlbar/stackedurlbar.cpp deleted file mode 100644 index 728a9c1b..00000000 --- a/src/urlbar/stackedurlbar.cpp +++ /dev/null @@ -1,68 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2010-2011 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 "stackedurlbar.h" -#include "stackedurlbar.moc" - -// Local Includes -#include "urlbar.h" - - -StackedUrlBar::StackedUrlBar(QWidget *parent) - : QStackedWidget(parent) -{ - // cosmetic - setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); - setMinimumWidth(200); - setMinimumHeight(20); -} - - -UrlBar *StackedUrlBar::currentUrlBar() -{ - return urlBar(currentIndex()); -} - - -UrlBar *StackedUrlBar::urlBar(int index) -{ - UrlBar *urlBar = qobject_cast<UrlBar*>(QStackedWidget::widget(index)); - if (!urlBar) - { - kWarning() << "URL bar with index" << index << "not found. Returning NULL. line:" << __LINE__; - } - - return urlBar; -} - - -void StackedUrlBar::moveBar(int from, int to) -{ - QWidget *fromBar = widget(from); - removeWidget(fromBar); - insertWidget(to, fromBar); -} diff --git a/src/urlbar/stackedurlbar.h b/src/urlbar/stackedurlbar.h deleted file mode 100644 index 7296a2f8..00000000 --- a/src/urlbar/stackedurlbar.h +++ /dev/null @@ -1,55 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2010-2011 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 STACKED_URLBAR_H -#define STACKED_URLBAR_H - - -// Rekonq Includes -#include "rekonq_defines.h" - -// Qt Includes -#include <QStackedWidget> - -// Forward Declarations -class UrlBar; - - -class REKONQ_TESTS_EXPORT StackedUrlBar : public QStackedWidget -{ - Q_OBJECT - -public: - StackedUrlBar(QWidget *parent = 0); - - UrlBar *currentUrlBar(); - UrlBar *urlBar(int index); - -private Q_SLOTS: - void moveBar(int, int); -}; - -#endif // STACKED_URLBAR_H diff --git a/src/urlbar/urlbar.cpp b/src/urlbar/urlbar.cpp deleted file mode 100644 index 21debceb..00000000 --- a/src/urlbar/urlbar.cpp +++ /dev/null @@ -1,773 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2008-2012 by Andrea Diamantini <adjam7 at gmail dot com> -* Copyright (C) 2009 by Domrachev Alexandr <alexandr.domrachev@gmail.com> -* Copyright (C) 2009 by Paweł Prażak <pawelprazak at gmail dot com> -* Copyright (C) 2009-2011 by Lionel Chauvin <megabigbug@yahoo.fr> -* -* -* 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 "urlbar.h" -#include "urlbar.moc" - -// Auto Includes -#include "rekonq.h" - -// Local Includes -#include "application.h" -#include "mainwindow.h" -#include "webtab.h" -#include "webpage.h" -#include "webview.h" -#include "completionwidget.h" -#include "bookmarkmanager.h" -#include "bookmarkowner.h" -#include "bookmarkwidget.h" -#include "iconmanager.h" -#include "favoritewidget.h" -#include "searchengine.h" -#include "websnap.h" - -// KDE Includes -#include <KCompletionBox> -#include <KStandardDirs> -#include <KColorScheme> -#include <KMenu> -#include <KIconLoader> - -// Qt Includes -#include <QPainter> -#include <QPaintEvent> -#include <QPalette> -#include <QVBoxLayout> -#include <QClipboard> -#include <QTimer> - -// const values -const int c_iconMargin = 4; - - -IconButton::IconButton(QWidget *parent) - : QToolButton(parent) -{ - setToolButtonStyle(Qt::ToolButtonIconOnly); - setStyleSheet("IconButton { background-color:transparent; border: none; padding: 0px}"); - setCursor(Qt::ArrowCursor); - - setContextMenuPolicy(Qt::PreventContextMenu); -} - - -void IconButton::mouseReleaseEvent(QMouseEvent* event) -{ - emit clicked(event->globalPos()); -} - - -// ----------------------------------------------------------------------------------------------------------- - - -QString guessUrlWithCustomFirstLevel(const QString &str1, const QString &str2) -{ - QUrl url(QL1S("http://www.") + str1); - QString host = url.host().toLower(); - if (!host.endsWith(str2, Qt::CaseInsensitive)) - { - host += str2; - url.setHost(host); - } - return url.toString(); -} - -// ----------------------------------------------------------------------------------------------------------- - - -UrlBar::UrlBar(QWidget *parent) - : KLineEdit(parent) - , _tab(0) - , _icon(new IconButton(this)) - , _suggestionTimer(new QTimer(this)) -{ - setLayoutDirection(Qt::LeftToRight); - - // set initial icon - _icon->setIcon(KIcon("arrow-right")); - - // initial style - setStyleSheet(QString("UrlBar { padding: 2px 0 2px %1px; height: %1px } ").arg(_icon->sizeHint().width())); - - // doesn't show the clear button - setClearButtonShown(false); - - // enable dragging - setDragEnabled(true); - - // insert decoded URLs - setUrlDropsEnabled(true); - - // tooltip - setToolTip(i18n("Type here to search your bookmarks, history and the web...")); - - // accept focus, via tabbing, clicking & wheeling - setFocusPolicy(Qt::WheelFocus); - - // disable completion object (we have our own :) ) - setCompletionObject(0); - - _tab = qobject_cast<WebTab *>(parent); - - connect(_tab, SIGNAL(loadProgressing()), this, SLOT(update())); - - connect(_tab->view(), SIGNAL(urlChanged(QUrl)), this, SLOT(setQUrl(QUrl))); - connect(_tab->view(), SIGNAL(loadFinished(bool)), this, SLOT(loadFinished())); - connect(_tab->view(), SIGNAL(loadStarted()), this, SLOT(clearRightIcons())); - connect(_tab->view(), SIGNAL(iconChanged()), this, SLOT(refreshFavicon())); - - // search icon - connect(rApp->opensearchManager(), SIGNAL(openSearchEngineAdded(QString)), this, SLOT(updateRightIcons())); - - // bookmark icon - connect(rApp->bookmarkManager(), SIGNAL(bookmarksUpdated()), this, SLOT(updateRightIcons())); - - _suggestionTimer->setSingleShot(true); - connect(_suggestionTimer, SIGNAL(timeout()), this, SLOT(suggest())); - - activateSuggestions(true); -} - - -UrlBar::~UrlBar() -{ - _suggestionTimer->stop(); - activateSuggestions(false); - _box.clear(); - - disconnect(); -} - - -void UrlBar::setQUrl(const QUrl& url) -{ - if (url.scheme() == QL1S("about")) - { - clear(); - setFocus(); - } - else - { - clearFocus(); - KLineEdit::setUrl(url); - setCursorPosition(0); - refreshFavicon(); - } -} - - -void UrlBar::loadRequestedUrl(const KUrl& url, Rekonq::OpenType type) -{ - activateSuggestions(false); - clearFocus(); - setUrl(url); - rApp->loadUrl(url, type); -} - - -void UrlBar::loadDigitedUrl() -{ - UrlResolver res(text()); - UrlSearchList list = res.orderedSearchItems(); - if (list.isEmpty()) - { - loadRequestedUrl(KUrl(text())); - } - else - { - loadRequestedUrl(list.first().url); - } -} - - -void UrlBar::paintEvent(QPaintEvent *event) -{ - KColorScheme colorScheme(palette().currentColorGroup()); - QColor backgroundColor; - QColor foregroundColor; - - if (QWebSettings::globalSettings()->testAttribute(QWebSettings::PrivateBrowsingEnabled)) - { - backgroundColor = QColor(220, 220, 220); // light gray - foregroundColor = Qt::black; - } - else - { - backgroundColor = rApp->palette().color(QPalette::Base); - foregroundColor = rApp->palette().color(QPalette::Text); - } - - // set background color of UrlBar - QPalette p = palette(); - - int progr = _tab->progress(); - if (progr == 0 || progr == 100) - { - if (_tab->url().scheme() == QL1S("https")) - { - backgroundColor = _tab->page()->hasSslValid() - ? colorScheme.background(KColorScheme::PositiveBackground).color() - : colorScheme.background(KColorScheme::NegativeBackground).color(); - - foregroundColor = colorScheme.foreground(KColorScheme::NormalText).color(); - } - p.setBrush(QPalette::Base, backgroundColor); - p.setBrush(QPalette::Text, foregroundColor); - } - else - { - QColor highlight = rApp->palette().color(QPalette::Highlight); - - int r = (highlight.red() + 2 * backgroundColor.red()) / 3; - int g = (highlight.green() + 2 * backgroundColor.green()) / 3; - int b = (highlight.blue() + 2 * backgroundColor.blue()) / 3; - - QColor loadingColor(r, g, b); - - if (abs(loadingColor.lightness() - backgroundColor.lightness()) < 20) //eg. Gaia color scheme - { - r = (2 * highlight.red() + backgroundColor.red()) / 3; - g = (2 * highlight.green() + backgroundColor.green()) / 3; - b = (2 * highlight.blue() + backgroundColor.blue()) / 3; - loadingColor = QColor(r, g, b); - } - - QLinearGradient gradient(QPoint(0, 0), QPoint(width(), 0)); - gradient.setColorAt(0, loadingColor); - gradient.setColorAt(((double)progr) / 100 - .000001, loadingColor); - gradient.setColorAt(((double)progr) / 100, backgroundColor); - p.setBrush(QPalette::Base, gradient); - } - setPalette(p); - - // you need this before our code to draw inside the line edit.. - KLineEdit::paintEvent(event); - - if (text().isEmpty() && (progr == 0 || progr == 100)) - { - QStyleOptionFrame option; - initStyleOption(&option); - QRect textRect = style()->subElementRect(QStyle::SE_LineEditContents, &option, this); - QPainter painter(this); - painter.setPen(Qt::gray); - painter.drawText(textRect, - Qt::AlignVCenter | Qt::AlignCenter, - i18n("Type here to search your bookmarks, history and the web...") - ); - } -} - - -void UrlBar::keyPressEvent(QKeyEvent *event) -{ - QString currentText = text().trimmed(); - - if (currentText.isEmpty()) - return KLineEdit::keyPressEvent(event); - - // this handles the Modifiers + Return key combinations - if (event->key() == Qt::Key_Return || event->key() == Qt::Key_Enter) - { - switch (event->modifiers()) - { - case Qt::AltModifier: - loadRequestedUrl(currentText, Rekonq::NewFocusedTab); - break; - - case Qt::ControlModifier: - loadRequestedUrl(guessUrlWithCustomFirstLevel(currentText, QL1S(".com"))); - break; - - case 0x06000000: // Qt::ControlModifier | Qt::ShiftModifier: - loadRequestedUrl(guessUrlWithCustomFirstLevel(currentText, QL1S(".org"))); - break; - - case Qt::ShiftModifier: - loadRequestedUrl(guessUrlWithCustomFirstLevel(currentText, QL1S(".net"))); - break; - - default: - loadRequestedUrl(currentText); - break; - } - } - - if (event->key() == Qt::Key_Escape) - { - clearFocus(); - if (!(_tab->url().protocol() == QL1S("about"))) - setText(_tab->url().url()); - event->accept(); - } - - KLineEdit::keyPressEvent(event); -} - - -void UrlBar::focusInEvent(QFocusEvent *event) -{ - activateSuggestions(true); - rApp->mainWindow()->updateTabActions(); - - KLineEdit::focusInEvent(event); -} - - -void UrlBar::dropEvent(QDropEvent *event) -{ - // handles only plain-text with url format - if (event->mimeData()->hasFormat("text/plain") && event->source() != this) - { - QUrl url = QUrl::fromUserInput(event->mimeData()->data("text/plain")); - - if (url.isValid()) - { - setQUrl(url); - loadRequestedUrl(text()); - return; - } - } - - // handles everything else - KLineEdit::dropEvent(event); - loadRequestedUrl(text()); -} - - -void UrlBar::loadFinished() -{ - if (_tab->url().scheme() == QL1S("about")) - { - update(); - return; - } - - // show bookmark info - IconButton *bt = addRightIcon(UrlBar::BK); - connect(bt, SIGNAL(clicked(QPoint)), this, SLOT(manageBookmarks())); - - // show favorite icon - IconButton *fbt = addRightIcon(UrlBar::Favorite); - connect(fbt, SIGNAL(clicked(QPoint)), this, SLOT(manageFavorites(QPoint))); - - // show KGet downloads?? - if (!KStandardDirs::findExe("kget").isNull() && ReKonfig::kgetList()) - { - IconButton *bt = addRightIcon(UrlBar::KGet); - connect(bt, SIGNAL(clicked(QPoint)), _tab->page(), SLOT(downloadAllContentsWithKGet())); - } - - // show RSS - if (_tab->hasRSSInfo()) - { - IconButton *bt = addRightIcon(UrlBar::RSS); - connect(bt, SIGNAL(clicked(QPoint)), _tab, SLOT(showRSSInfo(QPoint))); - } - - // show SSL - if (_tab->url().scheme() == QL1S("https")) - { - // NOTE: the choice for the right SSL icon is done in the addRightIcon method - IconButton *bt = addRightIcon(UrlBar::SSL); - connect(bt, SIGNAL(clicked(QPoint)), _tab->page(), SLOT(showSSLInfo(QPoint))); - } - - // show add search engine - if (_tab->hasNewSearchEngine()) - { - IconButton *bt = addRightIcon(UrlBar::SearchEngine); - connect(bt, SIGNAL(clicked(QPoint)), _tab, SLOT(showSearchEngine(QPoint))); - } - - if (_tab->hasAdBlockedElements()) - { - IconButton *bt = addRightIcon(UrlBar::AdBlock); - - connect(bt, SIGNAL(clicked(QPoint)), (QObject *) rApp->adblockManager(), SLOT(showBlockedItemDialog())); - } - - // we need to update urlbar after the right icon settings - // removing this code (where setStyleSheet automatically calls update) needs adding again - // an update call - int oneIconWidth = _icon->sizeHint().width(); - int rightIconWidth = (oneIconWidth + c_iconMargin) * (_rightIconsList.count()); - setStyleSheet(QString("UrlBar { padding: 2px %2px 2px %1px; height: %1px } ").arg(oneIconWidth).arg(rightIconWidth)); -} - - -void UrlBar::updateRightIcons() -{ - if (!_tab->isPageLoading()) - { - clearRightIcons(); - loadFinished(); - } -} - - -void UrlBar::activateSuggestions(bool b) -{ - if (b) - { - if (_box.isNull()) - { - _box = new CompletionWidget(this); - installEventFilter(_box.data()); - connect(_box.data(), SIGNAL(chosenUrl(KUrl, Rekonq::OpenType)), this, SLOT(loadRequestedUrl(KUrl, Rekonq::OpenType))); - - // activate suggestions on edit text - connect(this, SIGNAL(textChanged(QString)), this, SLOT(detectTypedString(QString))); - } - } - else - { - disconnect(this, SIGNAL(textChanged(QString)), this, SLOT(detectTypedString(QString))); - removeEventFilter(_box.data()); - if (!_box.isNull()) - _box.data()->deleteLater(); - } -} - - -void UrlBar::mouseDoubleClickEvent(QMouseEvent *event) -{ - Q_UNUSED(event); - - selectAll(); -} - - -void UrlBar::contextMenuEvent(QContextMenuEvent* event) -{ - KMenu menu; - const bool clipboardFilled = !rApp->clipboard()->text().isEmpty(); - - // Cut - KAction *a = KStandardAction::cut(this, SLOT(cut()), this); - a->setEnabled(hasSelectedText()); - menu.addAction(a); - - // Copy - a = KStandardAction::copy(this, SLOT(copy()), this); - a->setEnabled(hasSelectedText()); - menu.addAction(a); - - // Paste - a = KStandardAction::paste(this, SLOT(paste()), this); - a->setEnabled(clipboardFilled); - menu.addAction(a); - - // Paste & Go - const QString clipboardText = rApp->clipboard()->text(); - if (isValidURL(clipboardText) || clipboardText.isEmpty()) - { - a = new KAction(i18n("Paste && Go"), this); - connect(a, SIGNAL(triggered(bool)), this, SLOT(pasteAndGo())); - } - else - { - a = new KAction(i18n("Paste && Search"), this); - connect(a, SIGNAL(triggered(bool)), this, SLOT(pasteAndSearch())); - } - a->setEnabled(clipboardFilled); - menu.addAction(a); - - // Delete - a = new KAction(KIcon("edit-delete"), i18n("Delete"), this); - connect(a, SIGNAL(triggered(bool)), this, SLOT(delSlot())); - a->setEnabled(hasSelectedText()); - menu.addAction(a); - - menu.addSeparator(); - - // Select All - a = KStandardAction::selectAll(this, SLOT(selectAll()), this); - a->setEnabled(!text().isEmpty()); - menu.addAction(a); - - menu.exec(event->globalPos()); -} - - -bool UrlBar::isValidURL(QString url) -{ - bool isValid = false; - if (url.startsWith(QL1S("http://")) - || url.startsWith(QL1S("https://")) - || url.startsWith(QL1S("ftp://")) - ) - url = url.remove(QRegExp("(http|https|ftp)://")); - - if (url.contains(QL1C('.')) - && url.indexOf(QL1C('.')) > 0 - && url.indexOf(QL1C('.')) < url.length() - && !url.trimmed().contains(QL1C(' ')) - && QUrl::fromUserInput(url).isValid() - ) - isValid = true; - - return isValid; -} - - -IconButton *UrlBar::addRightIcon(UrlBar::icon ic) -{ - IconButton *rightIcon = new IconButton(this); - - switch (ic) - { - case UrlBar::KGet: - rightIcon->setIcon(KIcon("download")); - rightIcon->setToolTip(i18n("List all links with KGet")); - break; - case UrlBar::RSS: - rightIcon->setIcon(KIcon("application-rss+xml")); - rightIcon->setToolTip(i18n("List all available RSS feeds")); - break; - case UrlBar::SSL: - _tab->page()->hasSslValid() - ? rightIcon->setIcon(KIcon("object-locked")) - : rightIcon->setIcon(KIcon("object-unlocked")); - rightIcon->setToolTip(i18n("Show SSL Info")); - break; - case UrlBar::BK: - if (rApp->bookmarkManager()->bookmarkForUrl(_tab->url()).isNull()) - { - rightIcon->setIcon(KIcon("bookmarks").pixmap(32, 32, QIcon::Disabled)); - rightIcon->setToolTip(i18n("Bookmark this page")); - } - else - { - rightIcon->setIcon(KIcon("bookmarks")); - rightIcon->setToolTip(i18n("Edit this bookmark")); - } - break; - case UrlBar::SearchEngine: - { - KIcon wsIcon("edit-web-search"); - if (wsIcon.isNull()) - { - wsIcon = KIcon("preferences-web-browser-shortcuts"); - } - rightIcon->setIcon(wsIcon); - rightIcon->setToolTip(i18n("Add search engine")); - break; - } - case UrlBar::Favorite: - if (ReKonfig::previewUrls().contains(_tab->url().url())) - { - rightIcon->setIcon(KIcon("emblem-favorite")); - rightIcon->setToolTip(i18n("Remove from favorite")); - } - else - { - rightIcon->setIcon(KIcon("emblem-favorite").pixmap(32, 32, QIcon::Disabled)); - rightIcon->setToolTip(i18n("Add to favorites")); - } - break; - case UrlBar::AdBlock: - rightIcon->setIcon(KIcon("preferences-web-browser-adblock")); - rightIcon->setToolTip(i18n("There are elements blocked by AdBlock")); - break; - default: - ASSERT_NOT_REACHED("ERROR.. default non extant case!!"); - break; - } - - _rightIconsList << rightIcon; - - int iconsCount = _rightIconsList.count(); - updateRightIconPosition(rightIcon, iconsCount); - - rightIcon->show(); - - return rightIcon; -} - - -void UrlBar::clearRightIcons() -{ - qDeleteAll(_rightIconsList); - _rightIconsList.clear(); -} - - -void UrlBar::resizeEvent(QResizeEvent *event) -{ - int ih = _icon->sizeHint().height(); - int iconsCount = _rightIconsList.count(); - int iconHeight = (height() - ih) / 2; - - _icon->move(c_iconMargin, iconHeight); - - for (int i = 0; i < iconsCount; ++i) - { - IconButton *bt = _rightIconsList.at(i); - updateRightIconPosition(bt, i + 1); - } - - KLineEdit::resizeEvent(event); -} - - -void UrlBar::detectTypedString(const QString &typed) -{ - if (typed.count() == 1) - { - QTimer::singleShot(0, this, SLOT(suggest())); - return; - } - - if (_suggestionTimer->isActive()) - _suggestionTimer->stop(); - _suggestionTimer->start(50); -} - - -void UrlBar::suggest() -{ - if (!_box.isNull()) - _box.data()->suggestUrls(text()); -} - - -void UrlBar::refreshFavicon() -{ - if (QWebSettings::globalSettings()->testAttribute(QWebSettings::PrivateBrowsingEnabled)) - { - _icon->setIcon(KIcon("view-media-artist")); - return; - } - - KUrl u = _tab->url(); - if (u.scheme() == QL1S("about")) - { - _icon->setIcon(KIcon("arrow-right")); - return; - } - _icon->setIcon(rApp->iconManager()->iconForUrl(u)); -} - - -void UrlBar::pasteAndGo() -{ - loadRequestedUrl(rApp->clipboard()->text()); -} - - -void UrlBar::pasteAndSearch() -{ - KService::Ptr defaultEngine = SearchEngine::defaultEngine(); - if (defaultEngine) - loadRequestedUrl(KUrl(SearchEngine::buildQuery(defaultEngine, rApp->clipboard()->text()))); -} - - -void UrlBar::delSlot() -{ - del(); -} - - -void UrlBar::manageBookmarks() -{ - if (_tab->url().scheme() == QL1S("about")) - return; - - KBookmark bookmark = rApp->bookmarkManager()->bookmarkForUrl(_tab->url()); - - if (bookmark.isNull()) - { - bookmark = rApp->bookmarkManager()->owner()->bookmarkCurrentPage(); - } - - // calculate position - int iconSize = IconSize(KIconLoader::Small) + c_iconMargin; - - // Add a generic 10 to move it a bit below and right. - // No need to be precise... - int iconWidth = 10 + width() - ((iconSize + c_iconMargin)); - int iconHeight = 10 + (height() - iconSize) / 2; - - QPoint p = mapToGlobal(QPoint(iconWidth, iconHeight)); - - // show bookmark widget - BookmarkWidget *widget = new BookmarkWidget(bookmark, window()); - widget->showAt(p); -} - - -void UrlBar::manageFavorites(QPoint pos) -{ - IconButton *bt = qobject_cast<IconButton *>(this->sender()); - if (!bt) - return; - - if (_tab->url().scheme() == QL1S("about")) - return; - - if (ReKonfig::previewUrls().contains(_tab->url().url())) - { - // remove site from favorites - FavoriteWidget *widget = new FavoriteWidget(_tab, window()); - connect(widget, SIGNAL(updateIcon()), this, SLOT(updateRightIcons())); - widget->showAt(pos); - return; - } - - // else, add as favorite - QStringList urls = ReKonfig::previewUrls(); - urls << _tab->url().url(); - ReKonfig::setPreviewUrls(urls); - - QStringList titles = ReKonfig::previewNames(); - titles << _tab->view()->title(); - ReKonfig::setPreviewNames(titles); - - // also, save a site snapshot - WebSnap *snap = new WebSnap(_tab->url(), this); - - updateRightIcons(); -} - - -void UrlBar::updateRightIconPosition(IconButton *icon, int iconsCount) -{ - // NOTE: cannot show a (let's say) 16x16 icon in a 16x16 square. - // It needs some margin. It usually is 3, but using 4 (default rekonq icon margin) - // seems NOT a big problem and let's us using just one const ;) - int iconSize = IconSize(KIconLoader::Small) + c_iconMargin; - - int iconWidth = width() - ((iconSize + c_iconMargin) * iconsCount); - int iconHeight = (height() - iconSize) / 2; - - icon->move(iconWidth, iconHeight); -} diff --git a/src/urlbar/urlbar.h b/src/urlbar/urlbar.h deleted file mode 100644 index b2cf44ac..00000000 --- a/src/urlbar/urlbar.h +++ /dev/null @@ -1,156 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2008-2012 by Andrea Diamantini <adjam7 at gmail dot com> -* Copyright (C) 2009 by Domrachev Alexandr <alexandr.domrachev@gmail.com> -* Copyright (C) 2009 by Paweł Prażak <pawelprazak at gmail dot com> -* Copyright (C) 2009-2011 by Lionel Chauvin <megabigbug@yahoo.fr> -* -* -* 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 URLBAR_H -#define URLBAR_H - -// Rekonq Includes -#include "rekonq_defines.h" - -// KDE Includes -#include <KUrl> -#include <KLineEdit> - -// Qt Includes -#include <QWeakPointer> -#include <QToolButton> - -// Forward Declarations -class QWidget; -class CompletionWidget; -class WebTab; -class QTimer; - - -class IconButton : public QToolButton -{ - Q_OBJECT - -public: - IconButton(QWidget *parent = 0); - -Q_SIGNALS: - void clicked(QPoint); - -protected: - void mouseReleaseEvent(QMouseEvent *event); -}; - - -// Definitions -typedef QList<IconButton *> IconButtonPointerList; - - -// ------------------------------------------------------------------------------------ - - -class REKONQ_TESTS_EXPORT UrlBar : public KLineEdit -{ - Q_OBJECT - -public: - - enum icon - { - KGet = 0x00000001, - RSS = 0x00000010, - SSL = 0x00000100, - BK = 0x00001000, - SearchEngine = 0x00010000, - Favorite = 0x00100000, - AdBlock = 0x01000000 - }; - - explicit UrlBar(QWidget *parent = 0); - ~UrlBar(); - - void activateSuggestions(bool); - -public Q_SLOTS: - void setQUrl(const QUrl &url); - - /** - * Let us add bookmarks as the major browsers do - * - */ - void manageBookmarks(); - -private Q_SLOTS: - void loadRequestedUrl(const KUrl& url, Rekonq::OpenType = Rekonq::CurrentTab); - - void loadFinished(); - - void clearRightIcons(); - void updateRightIcons(); - - void detectTypedString(const QString &); - void suggest(); - - void manageFavorites(QPoint); - - void refreshFavicon(); - - void pasteAndGo(); - void pasteAndSearch(); - void delSlot(); - bool isValidURL(QString url); - - /** - * Load digited url - */ - void loadDigitedUrl(); - -protected: - void paintEvent(QPaintEvent *event); - void keyPressEvent(QKeyEvent *event); - void focusInEvent(QFocusEvent *event); - void dropEvent(QDropEvent *event); - void mouseDoubleClickEvent(QMouseEvent *); - void contextMenuEvent(QContextMenuEvent *event); - void resizeEvent(QResizeEvent *); - -private: - /** - * Updates right icon position, given its number in the right icons list - * and considering rekonq window position/dimension - */ - void updateRightIconPosition(IconButton *, int); - IconButton *addRightIcon(UrlBar::icon); - - QWeakPointer<CompletionWidget> _box; - WebTab *_tab; - - IconButton *_icon; - IconButtonPointerList _rightIconsList; - - QTimer *_suggestionTimer; -}; - - -#endif diff --git a/src/urlbar/urlresolver.cpp b/src/urlbar/urlresolver.cpp deleted file mode 100644 index c6d0f7a4..00000000 --- a/src/urlbar/urlresolver.cpp +++ /dev/null @@ -1,403 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2009-2012 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 "urlresolver.h" -#include "urlresolver.moc" - -// Local Includes -#include "historymanager.h" -#include "bookmarkmanager.h" -#include "searchengine.h" - -// KDE Includes -#include <KBookmark> -#include <KService> -#include <KProtocolInfo> - -// Qt Includes -#include <QByteArray> - - -// NOTE -// default kurifilter plugin list (at least in my box): -// 1. "kshorturifilter" -// 2. "kurisearchfilter" -// 3. "localdomainurifilter" -// 4 ."kuriikwsfilter" -// 5. "fixhosturifilter" - - -// ------------------------------------------------------------------------ - -KService::Ptr UrlResolver::_searchEngine; - -QRegExp UrlResolver::_browseRegexp; -QRegExp UrlResolver::_searchEnginesRegexp; - - -UrlResolver::UrlResolver(const QString &typedUrl) - : QObject() - , _typedString(typedUrl.trimmed()) - , _typedQuery() - , _isKDEUrl(false) -{ - if (!_searchEngine) - setSearchEngine(SearchEngine::defaultEngine()); - - if (_browseRegexp.isEmpty()) - { - QString protocol = QString("^(%1)").arg(KProtocolInfo::protocols().join("|")); - - QString localhost = QL1S("^localhost"); - - QString local = QL1S("^/"); - - QString ipv4 = QL1S("^0*([1-9]?\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.0*([1-9]?\\d|1\\d\\d|2[0-4]\\d|25[0-5])"\ - "\\.0*([1-9]?\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.0*([1-9]?\\d|1\\d\\d|2[0-4]\\d|25[0-5])"); - - QString ipv6 = QL1S("^([0-9a-fA-F]{4}|0)(\\:([0-9a-fA-F]{4}|0)){7}"); - - QString address = QL1S("[\\d\\w-.]+\\.(a[cdefgilmnoqrstuwz]|b[abdefghijmnorstvwyz]|"\ - "c[acdfghiklmnoruvxyz]|d[ejkmnoz]|e[ceghrstu]|f[ijkmnor]|g[abdefghilmnpqrstuwy]|"\ - "h[kmnrtu]|i[delmnoqrst]|j[emop]|k[eghimnprwyz]|l[abcikrstuvy]|"\ - "m[acdghklmnopqrstuvwxyz]|n[acefgilopruz]|om|p[aefghklmnrstwy]|qa|r[eouw]|"\ - "s[abcdeghijklmnortuvyz]|t[cdfghjkmnoprtvwz]|u[augkmsyz]|v[aceginu]|w[fs]|"\ - "y[etu]|z[amw]|aero|arpa|biz|com|coop|edu|info|int|gov|local|mil|museum|name|net|org|"\ - "pro)"); - - QString joiner = QL1S(")|("); - _browseRegexp = QRegExp(QL1C('(') + - protocol + joiner + - localhost + joiner + - local + joiner + - address + joiner + - ipv6 + joiner + - ipv4 + QL1C(')') - ); - } - - if (_searchEnginesRegexp.isEmpty()) - { - QString reg; - QString engineUrl; - Q_FOREACH(KService::Ptr s, SearchEngine::favorites()) - { - engineUrl = QRegExp::escape(s->property("Query").toString()).replace(QL1S("\\\\\\{@\\}"), QL1S("[\\d\\w-.]+")); - if (reg.isEmpty()) - reg = QL1C('(') + engineUrl + QL1C(')'); - else - reg = reg + QL1S("|(") + engineUrl + QL1C(')'); - } - _searchEnginesRegexp = QRegExp(reg); - } -} - - -UrlSearchList UrlResolver::orderedSearchItems() -{ - if (_typedString.startsWith(QL1S("about:"))) - { - QStringList aboutUrlList; - aboutUrlList - << QL1S("about:home") - << QL1S("about:favorites") - << QL1S("about:closedTabs") - << QL1S("about:bookmarks") - << QL1S("about:history") - << QL1S("about:downloads") - << QL1S("about:tabs") - << QL1S("about:info"); - - QStringList aboutUrlResults = aboutUrlList.filter(_typedString, Qt::CaseInsensitive); - - UrlSearchList list; - - if (aboutUrlResults.isEmpty()) - { - UrlSearchItem info(UrlSearchItem::Browse, QL1S("about:info"), QL1S("info")); - list << info; - - return list; - } - - Q_FOREACH(const QString & urlResult, aboutUrlResults) - { - QString name = urlResult; - name.remove(0, 6); - UrlSearchItem item(UrlSearchItem::Browse, urlResult, name); - list << item; - } - - return list; - } - - //compute lists - computeHistory(); - computeQurlFromUserInput(); - computeWebSearches(); - computeBookmarks(); - - return orderLists(); -} - - -UrlSearchList UrlResolver::orderLists() -{ - // NOTE - // The const int here decides the number of proper suggestions, taken from history & bookmarks - // You have to add here the "browse & search" options, always available. - const int availableEntries = 8; - - bool webSearchFirst = false; - // Browse & Search results - UrlSearchList browseSearch; - QString lowerTypedString = _typedString.toLower(); - if (!_isKDEUrl - && (_browseRegexp.indexIn(lowerTypedString) != -1)) - { - webSearchFirst = true; - browseSearch << _webSearches; - } - else - { - browseSearch << _webSearches; - browseSearch << _qurlFromUserInput; - } - - - // find relevant items (the one you are more probably searching...) - UrlSearchList relevant; - - // history - Q_FOREACH(const UrlSearchItem & item, _history) - { - QString hst = KUrl(item.url).host(); - if (item.url.startsWith(_typedString) - || hst.startsWith(_typedString) - || hst.remove("www.").startsWith(_typedString)) - { - relevant << item; - _history.removeOne(item); - break; - } - } - - // bookmarks - Q_FOREACH(const UrlSearchItem & item, _bookmarks) - { - QString hst = KUrl(item.url).host(); - if (item.url.startsWith(_typedString) - || hst.startsWith(_typedString) - || hst.remove("www.").startsWith(_typedString)) - { - relevant << item; - _bookmarks.removeOne(item); - break; - } - } - - // decide history & bookmarks number - int historyCount = _history.count(); - int bookmarksCount = _bookmarks.count(); - int relevantCount = relevant.count(); - - const int historyEntries = (availableEntries - relevantCount) / 2; - const int bookmarksEntries = availableEntries - relevantCount - historyEntries; - - if (historyCount >= historyEntries && bookmarksCount >= bookmarksEntries) - { - _history = _history.mid(0, historyEntries); - _bookmarks = _bookmarks.mid(0, bookmarksEntries); - } - else if (historyCount < historyEntries && bookmarksCount >= bookmarksEntries) - { - if (historyCount + bookmarksCount > availableEntries) - { - _bookmarks = _bookmarks.mid(0, availableEntries - historyCount); - } - } - else if (historyCount >= historyEntries && bookmarksCount < bookmarksEntries) - { - if (historyCount + bookmarksCount > availableEntries) - { - _history = _history.mid(0, availableEntries - bookmarksCount); - } - } - - // and finally, results - UrlSearchList list; - - if (webSearchFirst) - list << _qurlFromUserInput; - list += relevant + browseSearch + _history + _bookmarks; - return list; -} - - -////////////////////////////////////////////////////////////////////////// -// PRIVATE ENGINES - - -// QUrl from User Input (easily the best solution... ) -void UrlResolver::computeQurlFromUserInput() -{ - QString url = _typedString; - QUrl urlFromUserInput = QUrl::fromUserInput(url); - if (urlFromUserInput.isValid()) - { - // ensure http(s) hosts are lower cases - if (urlFromUserInput.scheme().startsWith(QL1S("http"))) - { - QString hst = urlFromUserInput.host(); - urlFromUserInput.setHost(hst.toLower()); - } - - QString urlString = urlFromUserInput.toString(); - QString gTitle = i18nc("Browse a website", "Browse"); - UrlSearchItem gItem(UrlSearchItem::Browse, urlString, gTitle); - _qurlFromUserInput << gItem; - } -} - - -// webSearches -void UrlResolver::computeWebSearches() -{ - QString query = _typedString; - KService::Ptr engine = SearchEngine::fromString(_typedString); - if (engine) - { - query = query.remove(0, _typedString.indexOf(SearchEngine::delimiter()) + 1); - setSearchEngine(engine); - _isKDEUrl = true; - } - - if (_searchEngine) - { - UrlSearchItem item = UrlSearchItem(UrlSearchItem::Search, SearchEngine::buildQuery(_searchEngine, query), query); - UrlSearchList list; - list << item; - _webSearches = list; - } -} - - -// history -void UrlResolver::computeHistory() -{ - QList<HistoryItem> found = rApp->historyManager()->find(_typedString); - qSort(found.begin(), found.end(), isHistoryItemRelevant); - - Q_FOREACH(const HistoryItem & i, found) - { - if (_searchEnginesRegexp.isEmpty() || _searchEnginesRegexp.indexIn(i.url) == -1) //filter all urls that are search engine results - { - UrlSearchItem gItem(UrlSearchItem::History, i.url, i.title); - _history << gItem; - } - } -} - - -// bookmarks -void UrlResolver::computeBookmarks() -{ - QList<KBookmark> found = rApp->bookmarkManager()->find(_typedString); - Q_FOREACH(const KBookmark & b, found) - { - UrlSearchItem gItem(UrlSearchItem::Bookmark, b.url().url(), b.fullText()); - _bookmarks << gItem; - } -} - - -// opensearch suggestion -void UrlResolver::computeSuggestions() -{ - // NOTE - // This attempt basically cuts out open search suggestions. - UrlSearchList list; - emit suggestionsReady(list, _typedString); - return; - -// // if a string startsWith /, it is probably a local path -// // so, no need for suggestions... -// if (_typedString.startsWith('/') || !rApp->opensearchManager()->isSuggestionAvailable()) -// { -// UrlSearchList list; -// emit suggestionsReady(list, _typedString); -// return; -// } -// -// QString query = _typedString; -// KService::Ptr engine = SearchEngine::fromString(_typedString); -// if (engine) -// { -// query = query.remove(0, _typedString.indexOf(SearchEngine::delimiter()) + 1); -// setSearchEngine(engine); -// } -// -// connect(rApp->opensearchManager(), -// SIGNAL(suggestionsReceived(QString,ResponseList)), -// this, -// SLOT(suggestionsReceived(QString,ResponseList))); -// -// _typedQuery = query; -// rApp->opensearchManager()->requestSuggestion(query); -} - - -bool UrlResolver::isHistoryItemRelevant(const HistoryItem &a, const HistoryItem &b) -{ - return a.relevance() > b.relevance(); -} - - -void UrlResolver::suggestionsReceived(const QString &text, const ResponseList &suggestions) -{ - if (text != _typedQuery) - return; - - UrlSearchList sugList; - QString urlString; - Q_FOREACH(const Response & i, suggestions) - { - if (text == i.title) - continue; - - urlString = i.url; - if (urlString.isEmpty()) - { - urlString = SearchEngine::buildQuery(UrlResolver::searchEngine(), i.title); - } - - UrlSearchItem gItem(UrlSearchItem::Suggestion, urlString, i.title, i.description, i.image, i.image_width, i.image_height); - sugList << gItem; - } - emit suggestionsReady(sugList, _typedString); - this->deleteLater(); -} diff --git a/src/urlbar/urlresolver.h b/src/urlbar/urlresolver.h deleted file mode 100644 index d799231f..00000000 --- a/src/urlbar/urlresolver.h +++ /dev/null @@ -1,179 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2009-2012 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 URL_RESOLVER_H -#define URL_RESOLVER_H - - -// Rekonq Includes -#include "rekonq_defines.h" - -// Locale Includes -#include "application.h" -#include "opensearchmanager.h" -#include "suggestionparser.h" - -// KDE Includes -#include <KUrl> -#include <KService> - -// Qt Includes -#include <QString> -#include <QList> - - -class UrlSearchItem -{ -public: - - enum types - { - Undefined = 0x00000000, - Search = 0x00000001, - Browse = 0x00000010, - History = 0x00000100, - Bookmark = 0x00001000, - Suggestion = 0x00010000 - }; - - int type; - QString url; - QString title; - QString description; - QString image; - int image_width; - int image_height; - QString bookmarkPath; - - UrlSearchItem(const UrlSearchItem &item) - : type(item.type) - , url(item.url) - , title(item.title) - , description(item.description) - , image(item.image) - , image_width(item.image_width) - , image_height(item.image_height) - {}; - - UrlSearchItem() - : type(UrlSearchItem::Undefined) - , url(QString()) - , title(QString()) - , description(QString()) - , image(QString()) - , image_width(0) - , image_height(0) - {}; - - UrlSearchItem(const int &_type, - const QString &_url, - const QString &_title = QString(), - const QString &_description = QString(), - const QString &_image = QString(), - const int &_image_width = 0, - const int &_image_height = 0 - ) - : type(_type) - , url(_url) - , title(_title) - , description(_description) - , image(_image) - , image_width(_image_width) - , image_height(_image_height) - {}; - - inline bool operator==(const UrlSearchItem &i) const - { - return i.url == url;//TODO && i.title == title; - } -}; - -typedef QList <UrlSearchItem> UrlSearchList; - - -// ---------------------------------------------------------------------- - -class HistoryItem; - -class UrlResolver : public QObject -{ - Q_OBJECT - -public: - UrlResolver(const QString &typedUrl); - - UrlSearchList orderedSearchItems(); - - static KService::Ptr searchEngine() - { - return _searchEngine; - }; - - static void setSearchEngine(KService::Ptr engine) - { - _searchEngine = engine; - if (engine) - rApp->opensearchManager()->setSearchProvider(engine->desktopEntryName()); - }; - - void computeSuggestions(); - - static bool isHistoryItemRelevant(const HistoryItem &a, const HistoryItem &b); - -private Q_SLOTS: - void suggestionsReceived(const QString &text, const ResponseList &suggestions); - -Q_SIGNALS: - void suggestionsReady(const UrlSearchList &, const QString &); - -private: - void computeWebSearches(); - void computeHistory(); - void computeQurlFromUserInput(); - void computeBookmarks(); - - UrlSearchList orderLists(); - - QString _typedString; - QString _typedQuery; - - UrlSearchList _webSearches; - UrlSearchList _qurlFromUserInput; - UrlSearchList _history; - UrlSearchList _bookmarks; - UrlSearchList _suggestions; - - static QRegExp _browseRegexp; - static QRegExp _searchEnginesRegexp; - - static KService::Ptr _searchEngine; - - bool _isKDEUrl; -}; - -// ------------------------------------------------------------------------------ - -#endif // URL_RESOLVER_H diff --git a/src/urlbar/webshortcutwidget.cpp b/src/urlbar/webshortcutwidget.cpp deleted file mode 100644 index c6dc3b79..00000000 --- a/src/urlbar/webshortcutwidget.cpp +++ /dev/null @@ -1,163 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2009 by Fredy Yanardi <fyanardi@gmail.com> -* Copyright (C) 2010-2011 by Lionel Chauvin <megabigbug@yahoo.fr> -* Copyright (C) 2012 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 "webshortcutwidget.h" -#include "webshortcutwidget.moc" - -// KDE Includes -#include <KGlobalSettings> -#include <KIcon> -#include <KLocale> -#include <KServiceTypeTrader> - -// Qt Includes -#include <QSet> -#include <QLabel> -#include <QLineEdit> -#include <QDialogButtonBox> -#include <QFormLayout> - - -WebShortcutWidget::WebShortcutWidget(QWidget *parent) - : QMenu(parent) - , m_wsLineEdit(new QLineEdit(this)) - , m_nameLineEdit(new QLineEdit(this)) - , m_noteLabel(new QLabel(this)) -{ - setAttribute(Qt::WA_DeleteOnClose); - setFixedWidth(350); - - QFormLayout *layout = new QFormLayout(this); - QVBoxLayout *vLay = new QVBoxLayout; - - // Web Search Icon - QLabel *webSearchIcon = new QLabel(this); - webSearchIcon->setPixmap(KIcon("edit-web-search").pixmap(32, 32)); - - // Title - QLabel *titleLabel = new QLabel(this); - titleLabel->setText("<h4>" + i18n("Add Search Engine") + "</h4>"); - vLay->addWidget(titleLabel); - - // Name - vLay->addWidget(m_nameLineEdit); - - layout->addRow(webSearchIcon, vLay); - - // Shortcuts - QLabel *shortcutsLabel = new QLabel(i18n("Shortcuts:"), this); - layout->addRow(shortcutsLabel, m_wsLineEdit); - connect(m_wsLineEdit, SIGNAL(textChanged(QString)), SLOT(shortcutsChanged(QString))); - - // Note - m_noteLabel->setWordWrap(true); - layout->addRow(m_noteLabel); - m_noteLabel->hide(); - - // Ok & Cancel buttons - QDialogButtonBox *buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel, Qt::Horizontal, this); - connect(buttonBox, SIGNAL(accepted()), this, SLOT(accept())); - connect(buttonBox, SIGNAL(rejected()), this, SLOT(close())); - layout->addWidget(buttonBox); - - m_providers = KServiceTypeTrader::self()->query("SearchProvider"); - - m_wsLineEdit->setFocus(); -} - - -void WebShortcutWidget::showAt(const QPoint &pos) -{ - adjustSize(); - - QPoint p(pos.x() - width(), pos.y() + 10); - move(p); - exec(); -} - - -void WebShortcutWidget::show(const KUrl &url, const QString &openSearchName, const QPoint &pos) -{ - m_wsLineEdit->clear(); - m_nameLineEdit->setText(openSearchName); - m_url = url; - showAt(pos); -} - - -void WebShortcutWidget::accept() -{ - emit webShortcutSet(m_url, m_nameLineEdit->text(), m_wsLineEdit->text()); - - // close widget (and destroy it) - close(); -} - - -void WebShortcutWidget::shortcutsChanged(const QString& newShorthands) -{ - int savedCursorPosition = m_wsLineEdit->cursorPosition(); - QString normalizedShorthands = QString(newShorthands).replace(QL1C(' '), QL1C(',')); - m_wsLineEdit->setText(normalizedShorthands); - m_wsLineEdit->setCursorPosition(savedCursorPosition); - - QSet<QString> shorthands = normalizedShorthands.split(QL1C(',')).toSet(); - QString contenderName = ""; - QString contenderWS = ""; - - Q_FOREACH(const QString & shorthand, shorthands) - { - Q_FOREACH(KService::Ptr provider, m_providers) - { - if (provider->property("Keys").toStringList().contains(shorthand)) - { - contenderName = provider->property("Name").toString(); - contenderWS = shorthand; - break; - } - } - } - - if (!contenderName.isEmpty()) - { - m_noteLabel->setText(i18n("The shortcut \"%1\" is already assigned to \"%2\".", contenderWS, contenderName)); - m_noteLabel->setVisible(true); - resize(minimumSize().width(), minimumSizeHint().height() + 15); - } - else - { - m_noteLabel->clear(); - bool noteIsVisible = m_noteLabel->isVisible(); - m_noteLabel->setVisible(false); - if (noteIsVisible) - { - resize(minimumSize()); - } - } -} diff --git a/src/urlbar/webshortcutwidget.h b/src/urlbar/webshortcutwidget.h deleted file mode 100644 index d1291714..00000000 --- a/src/urlbar/webshortcutwidget.h +++ /dev/null @@ -1,76 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2009 by Fredy Yanardi <fyanardi@gmail.com> -* Copyright (C) 2010-2011 by Lionel Chauvin <megabigbug@yahoo.fr> -* Copyright (C) 2012 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 WEBSHORTCUTWIDGET_H -#define WEBSHORTCUTWIDGET_H - - -// Rekonq Includes -#include "rekonq_defines.h" - -// KDE Includes -#include <KUrl> -#include <KService> - -// Qt Includes -#include <QMenu> - -// Forward Declarations -class QLabel; -class QLineEdit; -class QPushButton; - - -class REKONQ_TESTS_EXPORT WebShortcutWidget : public QMenu -{ - Q_OBJECT -public: - WebShortcutWidget(QWidget *parent = 0); - - void show(const KUrl &url, const QString &openSearchName, const QPoint &pos); - -private Q_SLOTS: - void accept(); - void shortcutsChanged(const QString& newShorthands); - -Q_SIGNALS: - void webShortcutSet(const KUrl &url, const QString &openSearchName, const QString &webShortcut); - -private: - QLineEdit *m_wsLineEdit; - QLineEdit *m_nameLineEdit; - QLabel *m_noteLabel; - - KService::List m_providers; - KUrl m_url; - - void showAt(const QPoint &pos); -}; - -#endif // WEBSHORTCUTWIDGET_H - diff --git a/src/urlfilterproxymodel.cpp b/src/urlfilterproxymodel.cpp deleted file mode 100644 index aa9ac7a6..00000000 --- a/src/urlfilterproxymodel.cpp +++ /dev/null @@ -1,59 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2009 by Nils Weigel <nehlsen at gmail dot com> -* Copyright (C) 2010-2011 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 "urlfilterproxymodel.h" -#include "urlfilterproxymodel.moc" - - -UrlFilterProxyModel::UrlFilterProxyModel(QObject *parent) - : QSortFilterProxyModel(parent) -{ - setFilterCaseSensitivity(Qt::CaseInsensitive); -} - - -bool UrlFilterProxyModel::filterAcceptsRow(const int source_row, const QModelIndex &source_parent) const -{ - return recursiveMatch(sourceModel()->index(source_row, 0, source_parent)); -} - - -bool UrlFilterProxyModel::recursiveMatch(const QModelIndex &index) const -{ - if (index.data().toString().contains(filterRegExp())) - return true; - - int numChildren = sourceModel()->rowCount(index); - for (int childRow = 0; childRow < numChildren; ++childRow) - { - if (recursiveMatch(sourceModel()->index(childRow, 0, index))) - return true; - } - - return false; -} diff --git a/src/urlfilterproxymodel.h b/src/urlfilterproxymodel.h deleted file mode 100644 index 6cb8574e..00000000 --- a/src/urlfilterproxymodel.h +++ /dev/null @@ -1,59 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2009 by Nils Weigel <nehlsen at gmail dot com> -* Copyright (C) 2010-2011 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 URLFILTERPROXYMODEL_H -#define URLFILTERPROXYMODEL_H - - -// Rekonq Includes -#include "rekonq_defines.h" - -// Qt Includes -#include <QSortFilterProxyModel> - - -/** - * QSortFilterProxyModel hides all children which parent doesn't - * match the filter. This class is used to change this behavior. - * If a url matches the filter it'll be shown, - * even if it's parent doesn't match it. - */ -class REKONQ_TESTS_EXPORT UrlFilterProxyModel : public QSortFilterProxyModel -{ - Q_OBJECT - -public: - explicit UrlFilterProxyModel(QObject *parent = 0); - -protected: - virtual bool filterAcceptsRow(const int source_row, const QModelIndex &source_parent) const; - - // returns true if index or any of his children match the filter - bool recursiveMatch(const QModelIndex &index) const; -}; - -#endif // URLFILTERPROXYMODEL_H diff --git a/src/urlpanel.cpp b/src/urlpanel.cpp deleted file mode 100644 index 8e0d425f..00000000 --- a/src/urlpanel.cpp +++ /dev/null @@ -1,110 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2009 by Domrachev Alexandr <alexandr.domrachev@gmail.com> -* Copyright (C) 2009-2011 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 "urlpanel.h" -#include "urlpanel.moc" - -// Local Includes -#include "paneltreeview.h" -#include "urlfilterproxymodel.h" - -// KDE Includes -#include <KLineEdit> -#include <KLocalizedString> - -// Qt Includes -#include <QLabel> -#include <QHBoxLayout> -#include <QHeaderView> - - -UrlPanel::UrlPanel(const QString &title, QWidget *parent, Qt::WindowFlags flags) - : QDockWidget(title, parent, flags) - , _treeView(new PanelTreeView(this)) - , _loaded(false) -{ - setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea); - - connect(this, SIGNAL(visibilityChanged(bool)), this, SLOT(showing(bool))); -} - - -void UrlPanel::showing(bool b) -{ - if (!_loaded && b) - { - setup(); - _loaded = true; - } -} - - -void UrlPanel::setup() -{ - QWidget *ui = new QWidget(this); - - // setup search bar - QHBoxLayout *searchLayout = new QHBoxLayout; - searchLayout->setContentsMargins(5, 0, 0, 0); - QLabel *searchLabel = new QLabel(i18n("&Search:")); - searchLayout->addWidget(searchLabel); - KLineEdit *search = new KLineEdit; - search->setClearButtonShown(true); - searchLayout->addWidget(search); - searchLabel->setBuddy(search); - - // setup tree view - _treeView->setUniformRowHeights(true); - _treeView->header()->hide(); - - // put everything together - QVBoxLayout *vBoxLayout = new QVBoxLayout; - vBoxLayout->setContentsMargins(0, 0, 0, 0); - vBoxLayout->addLayout(searchLayout); - vBoxLayout->addWidget(_treeView); - - // add it to the UI - ui->setLayout(vBoxLayout); - setWidget(ui); - - UrlFilterProxyModel *proxy = new UrlFilterProxyModel(this); - proxy->setSourceModel(model()); - _treeView->setModel(proxy); - - connect(search, SIGNAL(textChanged(QString)), proxy, SLOT(setFilterFixedString(QString))); - connect(search, SIGNAL(textChanged(QString)), this, SLOT(expandTreeView())); - - connect(_treeView, SIGNAL(contextMenuItemRequested(QPoint)), this, SLOT(contextMenuItem(QPoint))); - connect(_treeView, SIGNAL(contextMenuGroupRequested(QPoint)), this, SLOT(contextMenuGroup(QPoint))); - connect(_treeView, SIGNAL(contextMenuEmptyRequested(QPoint)), this, SLOT(contextMenuEmpty(QPoint))); -} - -void UrlPanel::expandTreeView() -{ - _treeView->expandAll(); -} diff --git a/src/urlpanel.h b/src/urlpanel.h deleted file mode 100644 index c8d15a8e..00000000 --- a/src/urlpanel.h +++ /dev/null @@ -1,81 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2009 by Domrachev Alexandr <alexandr.domrachev@gmail.com> -* Copyright (C) 2009-2011 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 URLPANEL_H -#define URLPANEL_H - - -// Rekonq Includes -#include "rekonq_defines.h" - -// Qt Includes -#include <QDockWidget> - -// Forward Declarations -class PanelTreeView; - -class QAbstractItemModel; - - -class REKONQ_TESTS_EXPORT UrlPanel : public QDockWidget -{ - Q_OBJECT - -public: - explicit UrlPanel(const QString &title, QWidget *parent = 0, Qt::WindowFlags flags = 0); - -Q_SIGNALS: - void openUrl(const KUrl &, const Rekonq::OpenType &); - void itemHovered(const QString &); - -public Q_SLOTS: - void showing(bool); - -protected: - virtual void setup(); - virtual QAbstractItemModel* model() = 0; - - PanelTreeView* panelTreeView() const - { - return _treeView; - } - -protected Q_SLOTS: - virtual void contextMenuItem(const QPoint &pos) = 0; - virtual void contextMenuGroup(const QPoint &pos) = 0; - virtual void contextMenuEmpty(const QPoint &pos) = 0; - -private Q_SLOTS: - void expandTreeView(); - -private: - PanelTreeView *_treeView; - bool _loaded; -}; - - -#endif // URLPANEL_H diff --git a/src/useragent/useragentinfo.cpp b/src/useragent/useragentinfo.cpp deleted file mode 100644 index 00f0a9db..00000000 --- a/src/useragent/useragentinfo.cpp +++ /dev/null @@ -1,202 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (c) 2001 by Dawit Alemayehu <adawit@kde.org> -* Copyright (C) 2010-2012 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 "useragentinfo.h" - -// Standard Includes -#include <time.h> -#include <sys/utsname.h> - -// KDE Includes -#include <KService> -#include <KServiceTypeTrader> - -#include <KConfig> -#include <KConfigGroup> - -#include <KProtocolManager> - -// Qt includes -#include <QStringBuilder> - -UserAgentInfo::UserAgentInfo() -{ - m_providers = KServiceTypeTrader::self()->query("UserAgentStrings"); -} - - -KService::List UserAgentInfo::availableProviders() const -{ - return m_providers; -} - - -QString UserAgentInfo::userAgentString(int i) -{ - if (i < 0 || !providerExists(i)) - { - kDebug() << "oh oh... wrong index on the user agent choice! INDEX = " << i; - return QL1S("Default"); - } - - QString tmp = m_providers.at(i)->property("X-KDE-UA-FULL").toString(); - - struct utsname utsn; - uname(&utsn); - - tmp.replace(QL1S("appSysName"), QString(utsn.sysname)); - tmp.replace(QL1S("appSysRelease"), QString(utsn.release)); - tmp.replace(QL1S("appMachineType"), QString(utsn.machine)); - - QStringList languageList = KGlobal::locale()->languageList(); - if (languageList.count()) - { - int ind = languageList.indexOf(QL1S("C")); - if (ind >= 0) - { - if (languageList.contains(QL1S("en"))) - languageList.removeAt(ind); - else - languageList.value(ind) = QL1S("en"); - } - } - - tmp.replace(QL1S("appLanguage"), QString("%1").arg(languageList.join(", "))); - tmp.replace(QL1S("appPlatform"), QL1S("X11")); - - return tmp; -} - - -QString UserAgentInfo::userAgentName(int i) -{ - if (i < 0 || !providerExists(i)) - { - kDebug() << "oh oh... wrong index on the user agent choice! INDEX = " << i; - return QL1S("Default"); - } - - return m_providers.at(i)->property("X-KDE-UA-NAME").toString(); -} - - -QString UserAgentInfo::userAgentVersion(int i) -{ - if (i < 0 || !providerExists(i)) - { - kDebug() << "oh oh... wrong index on the user agent choice! INDEX = " << i; - return QL1S("Default"); - } - - return m_providers.at(i)->property("X-KDE-UA-VERSION").toString(); -} - - -QString UserAgentInfo::userAgentDescription(int i) -{ - if (i < 0 || !providerExists(i)) - { - kDebug() << "oh oh... wrong index on the user agent choice! INDEX = " << i; - return QL1S("Default"); - } - - QString systemName = m_providers.at(i)->property("X-KDE-UA-SYSNAME").toString(); - QString systemRelease = m_providers.at(i)->property("X-KDE-UA-SYSRELEASE").toString(); - QString systemSummary; - - if (!systemName.isEmpty() && !systemRelease.isEmpty()) - { - systemSummary = i18nc("describe UA platform, eg: firefox 3.1 \"on Windows XP\"", " on %1 %2", systemName, systemRelease); - } - - return userAgentName(i) % QL1C(' ') % userAgentVersion(i) % systemSummary; -} - - -QStringList UserAgentInfo::availableUserAgents() -{ - QStringList UAs; - int n = m_providers.count(); - for (int i = 0; i < n; ++i) - { - UAs << userAgentDescription(i); - } - return UAs; -} - - -bool UserAgentInfo::setUserAgentForHost(int uaIndex, const QString &host) -{ - KConfig config("kio_httprc", KConfig::NoGlobals); - - QStringList modifiedHosts = config.groupList(); - KConfigGroup hostGroup(&config, host); - - if (uaIndex == -1) - { - if (!hostGroup.exists()) - { - kDebug() << "Host does NOT exists!"; - return false; - } - hostGroup.deleteGroup(); - KProtocolManager::reparseConfiguration(); - return true; - } - - hostGroup.writeEntry(QL1S("UserAgent"), userAgentString(uaIndex)); - - KProtocolManager::reparseConfiguration(); - return true; -} - - -int UserAgentInfo::uaIndexForHost(const QString &host) -{ - QString KDEUserAgent = KProtocolManager::userAgentForHost(host); - - int n = m_providers.count(); - for (int i = 0; i < n; ++i) - { - QString rekonqUserAgent = userAgentString(i); - if (KDEUserAgent == rekonqUserAgent) - return i; - } - return -1; -} - - -bool UserAgentInfo::providerExists(int i) -{ - KService::Ptr s = m_providers.at(i); - if (s.isNull()) - { - return false; - } - return true; -} diff --git a/src/useragent/useragentinfo.h b/src/useragent/useragentinfo.h deleted file mode 100644 index 3162fa82..00000000 --- a/src/useragent/useragentinfo.h +++ /dev/null @@ -1,86 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (c) 2001 by Dawit Alemayehu <adawit@kde.org> -* Copyright (C) 2010-2012 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 USER_AGENT_INFO_H -#define USER_AGENT_INFO_H - - -// Rekonq Includes -#include "rekonq_defines.h" - -// KDE Includes -#include <KService> - -// Qt Includes -#include <QString> - - -class UserAgentInfo -{ -public: - UserAgentInfo(); - - /** - * Lists all available providers - * - */ - KService::List availableProviders() const; - - /** - * Lists all available User Agents - * - * @returns the list of the UA descriptions - */ - QStringList availableUserAgents(); - - /** - * Set User Agent for host - * - * @param uaIndex the index of the UA description. @see availableUserAgents() - * @param host the host to se the UA - */ - bool setUserAgentForHost(int uaIndex, const QString &host); - - /** - * @returns the index of the UA set for the @p host - */ - int uaIndexForHost(const QString &); - -private: - QString userAgentString(int); - QString userAgentName(int); - QString userAgentVersion(int); - QString userAgentDescription(int); - - bool providerExists(int); - -private: - KService::List m_providers; -}; - -#endif // USER_AGENT_INFO_H diff --git a/src/useragent/useragentmanager.cpp b/src/useragent/useragentmanager.cpp deleted file mode 100644 index 9a2db3c9..00000000 --- a/src/useragent/useragentmanager.cpp +++ /dev/null @@ -1,173 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2011-2012 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 "useragentmanager.h" -#include "useragentmanager.moc" - -// Local Includes -#include "useragentinfo.h" -#include "useragentwidget.h" -#include "webtab.h" -#include "webview.h" - -// KDE Includes -#include <KAction> -#include <KDialog> -#include <KMenu> - - -UserAgentManager::UserAgentManager(QObject *parent) - : QObject(parent) - , m_uaSettingsAction(0) -{ - m_uaSettingsAction = new KAction(KIcon("preferences-web-browser-identification"), i18n("Browser Identification"), this); - connect(m_uaSettingsAction, SIGNAL(triggered(bool)), this, SLOT(showSettings())); -} - - -void UserAgentManager::showSettings() -{ - QPointer<KDialog> dialog = new KDialog(m_uaTab.data()); - dialog->setCaption(i18nc("@title:window", "User Agent Settings")); - dialog->setButtons(KDialog::Ok); - - UserAgentWidget widget; - dialog->setMainWidget(&widget); - dialog->exec(); - - dialog->deleteLater(); -} - - -void UserAgentManager::populateUAMenuForTabUrl(KMenu *uaMenu, WebTab *uaTab) -{ - if (!m_uaTab.isNull()) - { - disconnect(this, SIGNAL(reloadTab()), m_uaTab.data()->view(), SLOT(reload())); - m_uaTab.clear(); - } - - m_uaTab = uaTab; - connect(this, SIGNAL(reloadTab()), m_uaTab.data()->view(), SLOT(reload())); - - bool defaultUA = true; - - QAction *a, *defaultAction; - - // just to be sure... - uaMenu->clear(); - - defaultAction = new QAction(i18nc("Default rekonq user agent", "Default"), uaMenu); - defaultAction->setData(-1); - defaultAction->setCheckable(true); - connect(defaultAction, SIGNAL(triggered(bool)), this, SLOT(setUserAgent())); - - uaMenu->addAction(defaultAction); - uaMenu->addSeparator(); - - // Main Browsers Menus - KMenu *ffMenu = new KMenu(i18n("Firefox"), uaMenu); - uaMenu->addMenu(ffMenu); - - KMenu *ieMenu = new KMenu(i18n("Internet Explorer"), uaMenu); - uaMenu->addMenu(ieMenu); - - KMenu *nsMenu = new KMenu(i18n("Netscape"), uaMenu); - uaMenu->addMenu(nsMenu); - - KMenu *opMenu = new KMenu(i18n("Opera"), uaMenu); - uaMenu->addMenu(opMenu); - - KMenu *sfMenu = new KMenu(i18n("Safari"), uaMenu); - uaMenu->addMenu(sfMenu); - - KMenu *otMenu = new KMenu(i18n("Other"), uaMenu); - uaMenu->addMenu(otMenu); - - UserAgentInfo uaInfo; - QStringList UAlist = uaInfo.availableUserAgents(); - const KService::List providers = uaInfo.availableProviders(); - int uaIndex = uaInfo.uaIndexForHost(m_uaTab.data()->url().host()); - - for (int i = 0; i < UAlist.count(); ++i) - { - QString uaDesc = UAlist.at(i); - - a = new QAction(uaDesc, uaMenu); - a->setData(i); - a->setCheckable(true); - connect(a, SIGNAL(triggered(bool)), this, SLOT(setUserAgent())); - - if (i == uaIndex) - { - a->setChecked(true); - defaultUA = false; - } - - QString tag = providers.at(i)->property("X-KDE-UA-TAG").toString(); - if (tag == QL1S("FF")) - { - ffMenu->addAction(a); - } - else if (tag == QL1S("IE")) - { - ieMenu->addAction(a); - } - else if (tag == QL1S("NN")) - { - nsMenu->addAction(a); - } - else if (tag == QL1S("OPR")) - { - opMenu->addAction(a); - } - else if (tag == QL1S("SAF")) - { - sfMenu->addAction(a); - } - else // OTHERs - { - otMenu->addAction(a); - } - } - defaultAction->setChecked(defaultUA); - - uaMenu->addSeparator(); - uaMenu->addAction(m_uaSettingsAction); -} - - -void UserAgentManager::setUserAgent() -{ - QAction *sender = static_cast<QAction *>(QObject::sender()); - - int uaIndex = sender->data().toInt(); - - UserAgentInfo uaInfo; - uaInfo.setUserAgentForHost(uaIndex, m_uaTab.data()->url().host()); - emit reloadTab(); -} diff --git a/src/useragent/useragentmanager.h b/src/useragent/useragentmanager.h deleted file mode 100644 index 57a65c31..00000000 --- a/src/useragent/useragentmanager.h +++ /dev/null @@ -1,63 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2011-2012 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 USER_AGENT_MANAGER_H -#define USER_AGENT_MANAGER_H - - -// Qt Includes -#include <QObject> -#include <QWeakPointer> - -// Forward Declarations -class WebTab; - -class KAction; -class KMenu; - - -class UserAgentManager : public QObject -{ - Q_OBJECT - -public: - UserAgentManager(QObject *parent = 0); - - void populateUAMenuForTabUrl(KMenu *, WebTab *); - -private Q_SLOTS: - void showSettings(); - void setUserAgent(); - -Q_SIGNALS: - void reloadTab(); - -private: - KAction *m_uaSettingsAction; - QWeakPointer<WebTab> m_uaTab; -}; - -#endif // USER_AGENT_MANAGER_H diff --git a/src/useragent/useragentsettings.ui b/src/useragent/useragentsettings.ui deleted file mode 100644 index e2cd5454..00000000 --- a/src/useragent/useragentsettings.ui +++ /dev/null @@ -1,69 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<ui version="4.0"> - <class>UserAgent</class> - <widget class="QWidget" name="UserAgent"> - <property name="geometry"> - <rect> - <x>0</x> - <y>0</y> - <width>609</width> - <height>496</height> - </rect> - </property> - <layout class="QHBoxLayout" name="horizontalLayout"> - <item> - <widget class="QTreeWidget" name="sitePolicyTreeWidget"> - <property name="rootIsDecorated"> - <bool>false</bool> - </property> - <property name="sortingEnabled"> - <bool>true</bool> - </property> - <column> - <property name="text"> - <string>Host</string> - </property> - </column> - <column> - <property name="text"> - <string>Identification</string> - </property> - </column> - </widget> - </item> - <item> - <layout class="QVBoxLayout" name="verticalLayout"> - <item> - <widget class="QPushButton" name="deleteButton"> - <property name="text"> - <string>Delete</string> - </property> - </widget> - </item> - <item> - <widget class="QPushButton" name="deleteAllButton"> - <property name="text"> - <string>Delete All</string> - </property> - </widget> - </item> - <item> - <spacer name="verticalSpacer"> - <property name="orientation"> - <enum>Qt::Vertical</enum> - </property> - <property name="sizeHint" stdset="0"> - <size> - <width>20</width> - <height>40</height> - </size> - </property> - </spacer> - </item> - </layout> - </item> - </layout> - </widget> - <resources/> - <connections/> -</ui> diff --git a/src/useragent/useragentwidget.cpp b/src/useragent/useragentwidget.cpp deleted file mode 100644 index 92ba3ce4..00000000 --- a/src/useragent/useragentwidget.cpp +++ /dev/null @@ -1,96 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2010-2011 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 "useragentwidget.h" -#include "useragentwidget.moc" - -// KDE Includes -#include <KProtocolManager> - - -UserAgentWidget::UserAgentWidget(QWidget *parent) - : QWidget(parent) -{ - setupUi(this); - - connect(deleteButton, SIGNAL(clicked()), this, SLOT(deleteUserAgent())); - connect(deleteAllButton, SIGNAL(clicked()), this, SLOT(deleteAll())); - - KConfig config("kio_httprc", KConfig::NoGlobals); - - QStringList hosts = config.groupList(); - Q_FOREACH(const QString & host, hosts) - { - QStringList tmp; - tmp << host; - - KConfigGroup hostGroup(&config, host); - tmp << hostGroup.readEntry(QL1S("UserAgent"), QString()); - - QTreeWidgetItem *item = new QTreeWidgetItem(sitePolicyTreeWidget, tmp); - sitePolicyTreeWidget->addTopLevelItem(item); - } -} - - -void UserAgentWidget::deleteUserAgent() -{ - QTreeWidgetItem *item = sitePolicyTreeWidget->currentItem(); - if (!item) - return; - - sitePolicyTreeWidget->takeTopLevelItem(sitePolicyTreeWidget->indexOfTopLevelItem(item)); - - QString host = item->text(0); - - KConfig config("kio_httprc", KConfig::NoGlobals); - KConfigGroup group(&config, host); - if (group.exists()) - { - group.deleteGroup(); - KProtocolManager::reparseConfiguration(); - } -} - - -void UserAgentWidget::deleteAll() -{ - sitePolicyTreeWidget->clear(); - - KConfig config("kio_httprc", KConfig::NoGlobals); - - QStringList list = config.groupList(); - Q_FOREACH(const QString & groupName, list) - { - KConfigGroup group(&config, groupName); - group.deleteGroup(); - } - KConfigGroup group(&config, QString()); - group.deleteGroup(); - - KProtocolManager::reparseConfiguration(); -} diff --git a/src/useragent/useragentwidget.h b/src/useragent/useragentwidget.h deleted file mode 100644 index 1c850d9e..00000000 --- a/src/useragent/useragentwidget.h +++ /dev/null @@ -1,53 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2010-2011 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 USER_AGENT_WIDGET_H -#define USER_AGENT_WIDGET_H - - -// Rekonq Includes -#include "rekonq_defines.h" - -// Qt Includes -#include <QWidget> - -// Ui Includes -#include "ui_useragentsettings.h" - - -class UserAgentWidget : public QWidget, private Ui::UserAgent -{ - Q_OBJECT - -public: - UserAgentWidget(QWidget *parent = 0); - -private Q_SLOTS: - void deleteUserAgent(); - void deleteAll(); -}; - -#endif diff --git a/src/walletbar.cpp b/src/walletbar.cpp deleted file mode 100644 index 01a6d658..00000000 --- a/src/walletbar.cpp +++ /dev/null @@ -1,103 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2009-2011 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 "walletbar.h" -#include "walletbar.moc" - -// Auto Includes -#include "rekonq.h" - -// KDE Includes -#include <KIcon> -#include <KLocalizedString> - -// Qt Includes -#include <QAction> - - -WalletBar::WalletBar(QWidget *parent) - : KMessageWidget(parent) -{ - setMessageType(KMessageWidget::Warning); - - QSize sz = size(); - sz.setWidth(qobject_cast<QWidget *>(parent)->size().width()); - resize(sz); - - setCloseButtonVisible(false); - - QAction *rememberAction = new QAction(KIcon("document-save"), i18n("Remember"), this); - connect(rememberAction, SIGNAL(triggered(bool)), this, SLOT(rememberData())); - addAction(rememberAction); - - QAction *neverHereAction = new QAction(KIcon("process-stop"), i18n("Never for This Site"), this); - connect(neverHereAction, SIGNAL(triggered(bool)), this, SLOT(neverRememberData())); - addAction(neverHereAction); - - QAction *notNowAction = new QAction(KIcon("dialog-cancel"), i18n("Not Now"), this); - connect(notNowAction, SIGNAL(triggered(bool)), this, SLOT(notNowRememberData())); - addAction(notNowAction); -} - - -void WalletBar::rememberData() -{ - emit saveFormDataAccepted(m_key); - - animatedHide(); - deleteLater(); -} - - -void WalletBar::neverRememberData() -{ - // add url to the blacklist - QStringList list = ReKonfig::walletBlackList(); - list << m_url.toString(); - ReKonfig::setWalletBlackList(list); - - notNowRememberData(); -} - - -void WalletBar::notNowRememberData() -{ - emit saveFormDataRejected(m_key); - - animatedHide(); - deleteLater(); -} - - - -void WalletBar::onSaveFormData(const QString &key, const QUrl &url) -{ - setText(i18n("Do you want rekonq to remember the password on %1?", url.host())); - - m_key = key; - m_url = url; -} diff --git a/src/walletbar.h b/src/walletbar.h deleted file mode 100644 index f1bbd2cb..00000000 --- a/src/walletbar.h +++ /dev/null @@ -1,66 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2009-2011 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 WALLET_BAR_H -#define WALLET_BAR_H - - -// Rekonq Includes -#include "rekonq_defines.h" - -// KDE Includes -#include <KMessageWidget> - -// Qt Includes -#include <QUrl> -#include <QString> - - -class REKONQ_TESTS_EXPORT WalletBar : public KMessageWidget -{ - Q_OBJECT - -public: - WalletBar(QWidget *parent); - -private Q_SLOTS: - void rememberData(); - void neverRememberData(); - void notNowRememberData(); - -public Q_SLOTS: - void onSaveFormData(const QString &, const QUrl &); - -Q_SIGNALS: - void saveFormDataAccepted(const QString &); - void saveFormDataRejected(const QString &); - -private: - QString m_key; - QUrl m_url; -}; - -#endif // WALLET_BAR_H diff --git a/src/webappcreation.ui b/src/webappcreation.ui deleted file mode 100644 index 1e688290..00000000 --- a/src/webappcreation.ui +++ /dev/null @@ -1,96 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<ui version="4.0"> - <class>webAppCreation</class> - <widget class="QWidget" name="webAppCreation"> - <property name="geometry"> - <rect> - <x>0</x> - <y>0</y> - <width>461</width> - <height>143</height> - </rect> - </property> - <layout class="QVBoxLayout" name="verticalLayout"> - <item> - <layout class="QGridLayout" name="gridLayout"> - <item row="0" column="0"> - <widget class="QLabel" name="label_2"> - <property name="text"> - <string>Name:</string> - </property> - </widget> - </item> - <item row="0" column="1"> - <widget class="QLineEdit" name="nameLineEdit"/> - </item> - <item row="1" column="0"> - <widget class="QLabel" name="label_3"> - <property name="text"> - <string>Description:</string> - </property> - </widget> - </item> - <item row="1" column="1"> - <widget class="QLineEdit" name="descriptionLineEdit"> - <property name="text"> - <string/> - </property> - <property name="placeholderText"> - <string>(optional)</string> - </property> - </widget> - </item> - </layout> - </item> - <item> - <spacer name="verticalSpacer_2"> - <property name="orientation"> - <enum>Qt::Vertical</enum> - </property> - <property name="sizeHint" stdset="0"> - <size> - <width>20</width> - <height>40</height> - </size> - </property> - </spacer> - </item> - <item> - <widget class="QLabel" name="label"> - <property name="text"> - <string>Create Application shortcuts in:</string> - </property> - </widget> - </item> - <item> - <widget class="QCheckBox" name="kcfg_createDesktopAppShortcut"> - <property name="text"> - <string>Desktop</string> - </property> - </widget> - </item> - <item> - <widget class="QCheckBox" name="kcfg_createMenuAppShortcut"> - <property name="text"> - <string>Application Menu</string> - </property> - </widget> - </item> - <item> - <spacer name="verticalSpacer"> - <property name="orientation"> - <enum>Qt::Vertical</enum> - </property> - <property name="sizeHint" stdset="0"> - <size> - <width>20</width> - <height>40</height> - </size> - </property> - </spacer> - </item> - </layout> - </widget> - <resources/> - <connections/> -</ui> diff --git a/src/webicon.cpp b/src/webicon.cpp deleted file mode 100644 index 7943cfb6..00000000 --- a/src/webicon.cpp +++ /dev/null @@ -1,65 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2010-2011 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 "webicon.h" -#include "webicon.moc" - -// Local Includes -#include "application.h" -#include "iconmanager.h" - -// Qt Includes -#include <QTimer> -#include <QWebFrame> - - -WebIcon::WebIcon(const KUrl& url, QObject *parent) - : QObject(parent) - , m_url(url) -{ - m_page.settings()->setAttribute(QWebSettings::PluginsEnabled, false); - m_page.settings()->setAttribute(QWebSettings::JavascriptEnabled, false); - m_page.settings()->setAttribute(QWebSettings::PrivateBrowsingEnabled, true); - - connect(&m_page, SIGNAL(loadFinished(bool)), this, SLOT(saveIcon(bool))); - QTimer::singleShot(0, this, SLOT(load())); -} - - -void WebIcon::load() -{ - m_page.mainFrame()->load(m_url); -} - - -void WebIcon::saveIcon(bool b) -{ - if (b) - rApp->iconManager()->provideIcon(m_page.mainFrame(), m_url, false); - - this->deleteLater(); -} diff --git a/src/webicon.h b/src/webicon.h deleted file mode 100644 index 39f98e7e..00000000 --- a/src/webicon.h +++ /dev/null @@ -1,56 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2010-2011 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 WEB_ICON_H -#define WEB_ICON_H - -// Rekonq Includes -#include "rekonq_defines.h" - -// KDE Includes -#include <KUrl> - -// Qt Includes -#include <QWebPage> - - -class REKONQ_TESTS_EXPORT WebIcon : public QObject -{ - Q_OBJECT - -public: - explicit WebIcon(const KUrl &url, QObject *parent = 0); - -private Q_SLOTS: - void load(); - void saveIcon(bool); - -private: - QWebPage m_page; - KUrl m_url; -}; - -#endif //WEB_ICON_H diff --git a/src/webinspectorpanel.cpp b/src/webinspectorpanel.cpp deleted file mode 100644 index 06e98643..00000000 --- a/src/webinspectorpanel.cpp +++ /dev/null @@ -1,86 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2010 by Matthieu Gicquel <matgic78 at gmail dot com> -* Copyright (C) 2010-2011 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 "webinspectorpanel.h" -#include "webinspectorpanel.moc" - -// Local Includes -#include "mainwindow.h" -#include "webpage.h" -#include "webtab.h" - -// Qt Includes -#include <QAction> -#include <QWebInspector> - - -WebInspectorPanel::WebInspectorPanel(QString title, QWidget *parent) - : QDockWidget(title, parent) - , _inspector(0) -{ - setObjectName("webInspectorDock"); -} - - -void WebInspectorPanel::closeEvent(QCloseEvent *event) -{ - Q_UNUSED(event); - toggle(false); -} - - -void WebInspectorPanel::toggle(bool enable) -{ - MainWindow *w = qobject_cast<MainWindow *>(parent()); - w->actionByName(QL1S("web_inspector"))->setChecked(enable); - - if (enable) - { - w->currentTab()->page()->settings()->setAttribute(QWebSettings::DeveloperExtrasEnabled, true); - if (!_inspector) - { - _inspector = new QWebInspector(this); - _inspector->setPage(w->currentTab()->page()); - setWidget(_inspector); - } - } - else - { - w->currentTab()->page()->settings()->setAttribute(QWebSettings::DeveloperExtrasEnabled, false); - } - - setVisible(enable); -} - - -void WebInspectorPanel::changeCurrentPage() -{ - MainWindow *w = qobject_cast<MainWindow *>(parent()); - bool enable = w->currentTab()->page()->settings()->testAttribute(QWebSettings::DeveloperExtrasEnabled); - toggle(enable); -} diff --git a/src/webinspectorpanel.h b/src/webinspectorpanel.h deleted file mode 100644 index ebe82267..00000000 --- a/src/webinspectorpanel.h +++ /dev/null @@ -1,62 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2010-2011 by Matthieu Gicquel <matgic78 at gmail dot com> -* Copyright (C) 2010-2011 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 WEBINSPECTOR_PANEL_H -#define WEBINSPECTOR_PANEL_H - - -// Rekonq Includes -#include "rekonq_defines.h" - -// Qt Includes -#include <QDockWidget> - -// Forward -class QWebInspector; - - -/** - * Docked web inspector - * behaviour : hide/show by tab, not globally -**/ -class REKONQ_TESTS_EXPORT WebInspectorPanel : public QDockWidget -{ - Q_OBJECT -public: - WebInspectorPanel(QString title, QWidget *parent); - -public Q_SLOTS: - void toggle(bool enable); - void changeCurrentPage(); - -protected: - virtual void closeEvent(QCloseEvent *event); - - QWebInspector *_inspector; -}; - -#endif diff --git a/src/webpage.cpp b/src/webpage.cpp deleted file mode 100644 index 59262862..00000000 --- a/src/webpage.cpp +++ /dev/null @@ -1,777 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2008 Benjamin C. Meyer <ben@meyerhome.net> -* Copyright (C) 2008 Dirk Mueller <mueller@kde.org> -* Copyright (C) 2008 Urs Wolfer <uwolfer @ kde.org> -* Copyright (C) 2008 Michael Howell <mhowell123@gmail.com> -* Copyright (C) 2008-2012 by Andrea Diamantini <adjam7 at gmail dot com> -* Copyright (C) 2010 by Matthieu Gicquel <matgic78 at gmail dot com> -* Copyright (C) 2009-2010 Dawit Alemayehu <adawit at kde dot org> -* -* -* 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 "webpage.h" -#include "webpage.moc" - -// Auto Includes -#include "rekonq.h" - -// Local Includes -#include "adblockmanager.h" -#include "application.h" -#include "downloadmanager.h" -#include "historymanager.h" -#include "iconmanager.h" -#include "mainview.h" -#include "mainwindow.h" -#include "networkaccessmanager.h" -#include "urlbar.h" -#include "webpluginfactory.h" -#include "websnap.h" -#include "webtab.h" -#include "searchengine.h" -#include "sslwidget.h" -#include "sslinfodialog.h" - -// KDE Includes -#include <KTemporaryFile> -#include <KStandardDirs> -#include <KJobUiDelegate> -#include <KLocalizedString> -#include <KMessageBox> -#include <KMimeTypeTrader> -#include <KService> -#include <KWebWallet> -#include <KProtocolInfo> -#include <KRun> - -#include <KIO/JobUiDelegate> - -#include <kparts/browseropenorsavequestion.h> - -// Qt Includes -#include <QTextDocument> -#include <QFileInfo> -#include <QNetworkReply> - - -// Returns true if the scheme and domain of the two urls match... -static bool domainSchemeMatch(const QUrl& u1, const QUrl& u2) -{ - if (u1.scheme() != u2.scheme()) - return false; - - QStringList u1List = u1.host().split(QL1C('.'), QString::SkipEmptyParts); - QStringList u2List = u2.host().split(QL1C('.'), QString::SkipEmptyParts); - - if (qMin(u1List.count(), u2List.count()) < 2) - return false; // better safe than sorry... - - while (u1List.count() > 2) - u1List.removeFirst(); - - while (u2List.count() > 2) - u2List.removeFirst(); - - return (u1List == u2List); -} - - -static void extractMimeType(const QNetworkReply* reply, QString& mimeType) -{ - mimeType.clear(); - const KIO::MetaData& metaData = reply->attribute(static_cast<QNetworkRequest::Attribute>(KIO::AccessManager::MetaData)).toMap(); - if (metaData.contains(QL1S("content-type"))) - mimeType = metaData.value(QL1S("content-type")); - - if (!mimeType.isEmpty()) - return; - - if (!reply->hasRawHeader("Content-Type")) - return; - - const QString value(QL1S(reply->rawHeader("Content-Type").simplified().constData())); - const int index = value.indexOf(QL1C(';')); - if (index == -1) - mimeType = value; - else - mimeType = value.left(index); -} - - -// --------------------------------------------------------------------------------- - - -WebPage::WebPage(QWidget *parent) - : KWebPage(parent, KWalletIntegration) - , _networkAnalyzer(false) - , _isOnRekonqPage(false) -{ - // handling unsupported content... - setForwardUnsupportedContent(true); - connect(this, SIGNAL(unsupportedContent(QNetworkReply*)), this, SLOT(handleUnsupportedContent(QNetworkReply*))); - - // rekonq Network Manager - NetworkAccessManager *manager = new NetworkAccessManager(this); - - // set network reply object to emit readyRead when it receives meta data - manager->setEmitReadyReadOnMetaDataChange(true); - - // disable QtWebKit cache to just use KIO one.. - manager->setCache(0); - - // set cookieJar window.. - if (parent && parent->window()) - manager->setWindow(parent->window()); - - setNetworkAccessManager(manager); - - // activate ssl warnings - setSessionMetaData(QL1S("ssl_activate_warnings"), QL1S("TRUE")); - - // ----- Web Plugin Factory - setPluginFactory(new WebPluginFactory(this)); - - // ----- last stuffs - connect(manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(manageNetworkErrors(QNetworkReply*))); - - connect(this, SIGNAL(downloadRequested(QNetworkRequest)), this, SLOT(downloadRequest(QNetworkRequest))); - connect(this, SIGNAL(loadStarted()), this, SLOT(loadStarted())); - connect(this, SIGNAL(loadFinished(bool)), this, SLOT(loadFinished(bool))); - - // protocol handler signals - connect(&_protHandler, SIGNAL(downloadUrl(KUrl)), this, SLOT(downloadUrl(KUrl))); - - connect(rApp->iconManager(), SIGNAL(iconChanged()), mainFrame(), SIGNAL(iconChanged())); -} - - -WebPage::~WebPage() -{ - disconnect(); - - QPixmap preview = WebSnap::renderPagePreview(*this); - QString path = WebSnap::imagePathFromUrl(mainFrame()->url().toString()); - QFile::remove(path); - preview.save(path); -} - - -bool WebPage::hasNetworkAnalyzerEnabled() const -{ - return _networkAnalyzer; -}; - - -void WebPage::enableNetworkAnalyzer(bool b) -{ - _networkAnalyzer = b; -}; - - -bool WebPage::isOnRekonqPage() const -{ - return _isOnRekonqPage; -}; - - -void WebPage::setIsOnRekonqPage(bool b) -{ - _isOnRekonqPage = b; -}; - - -KUrl WebPage::loadingUrl() -{ - return _loadingUrl; -}; - - -QString WebPage::suggestedFileName() -{ - return _suggestedFileName; -}; - - -bool WebPage::acceptNavigationRequest(QWebFrame *frame, const QNetworkRequest &request, NavigationType type) -{ - if (_isOnRekonqPage) - { - WebView *view = qobject_cast<WebView *>(parent()); - WebTab *tab = qobject_cast<WebTab *>(view->parent()); - _isOnRekonqPage = false; - tab->setPart(0, KUrl()); // re-enable the view page - } - - // reset webpage values - _suggestedFileName.clear(); - _loadingUrl = request.url(); - - const bool isMainFrameRequest = (frame == mainFrame()); - - if (frame) - { - if (_protHandler.preHandling(request, frame)) - { - return false; - } - - switch (type) - { - case QWebPage::NavigationTypeLinkClicked: - if (_sslInfo.isValid()) - { - setRequestMetaData("ssl_was_in_use", "TRUE"); - } - break; - - case QWebPage::NavigationTypeFormSubmitted: - break; - - case QWebPage::NavigationTypeFormResubmitted: - if (KMessageBox::warningContinueCancel(view(), - i18n("Are you sure you want to send your data again?"), - i18n("Resend form data") - ) - == KMessageBox::Cancel) - { - return false; - } - break; - - case QWebPage::NavigationTypeReload: - setRequestMetaData(QL1S("cache"), QL1S("reload")); - break; - - case QWebPage::NavigationTypeBackOrForward: - case QWebPage::NavigationTypeOther: - break; - - default: - ASSERT_NOT_REACHED(unknown NavigationType); - break; - } - } - - // Get the SSL information sent, if any... - KIO::AccessManager *manager = qobject_cast<KIO::AccessManager*>(networkAccessManager()); - KIO::MetaData metaData = manager->requestMetaData(); - if (metaData.contains(QL1S("ssl_in_use"))) - { - WebSslInfo info; - info.restoreFrom(metaData.toVariant(), request.url()); - info.setUrl(request.url()); - _sslInfo = info; - } - - if (isMainFrameRequest) - { - setRequestMetaData(QL1S("main_frame_request"), QL1S("TRUE")); - if (_sslInfo.isValid() && !domainSchemeMatch(request.url(), _sslInfo.url())) - { - _sslInfo = WebSslInfo(); - } - } - else - { - setRequestMetaData(QL1S("main_frame_request"), QL1S("FALSE")); - } - - return KWebPage::acceptNavigationRequest(frame, request, type); -} - - -WebPage *WebPage::createWindow(QWebPage::WebWindowType type) -{ - // added to manage web modal dialogs - if (type == QWebPage::WebModalDialog) - kDebug() << "Modal Dialog"; - - WebTab *w = 0; - if (ReKonfig::openLinksInNewWindow()) - { - w = rApp->newMainWindow()->mainView()->currentWebTab(); - } - else - { - w = rApp->mainWindow()->mainView()->newWebTab(!ReKonfig::openNewTabsInBackground()); - } - return w->page(); -} - - -void WebPage::handleUnsupportedContent(QNetworkReply *reply) -{ - Q_ASSERT(reply); - - if (!reply) - return; - - // handle protocols WebKit cannot handle... - if (_protHandler.postHandling(reply->request(), mainFrame())) - { - return; - } - - if (reply->error() != QNetworkReply::NoError) - return; - - KIO::Integration::AccessManager::putReplyOnHold(reply); - - // Get mimeType... - extractMimeType(reply, _mimeType); - - // Convert executable text files to plain text... - if (KParts::BrowserRun::isTextExecutable(_mimeType)) - _mimeType = QL1S("text/plain"); - - // Get suggested file name... - const KIO::MetaData& data = reply->attribute(static_cast<QNetworkRequest::Attribute>(KIO::AccessManager::MetaData)).toMap(); - _suggestedFileName = data.value(QL1S("content-disposition-filename")); - - kDebug() << "Detected MimeType = " << _mimeType; - kDebug() << "Suggested File Name = " << _suggestedFileName; - // ------------------------------------------------ - - KService::Ptr appService = KMimeTypeTrader::self()->preferredService(_mimeType); - - KUrl replyUrl = reply->url(); - bool isLocal = replyUrl.isLocalFile(); - - if (appService.isNull()) // no service can handle this. We can just download it.. - { - isLocal - ? KMessageBox::sorry(view(), i18n("No service can handle this file.")) - : downloadUrl(reply->url()); - - return; - } - - // NOTE - // This is needed in case rekonq has been associated with something it cannot - // properly handle (eg: xbel files, see BUG:299056). This way we break an eventual - // "recall" loop. - if (appService->exec().trimmed().startsWith(QL1S("rekonq"))) - { - isLocal - ? KMessageBox::sorry(view(), i18n("rekonq cannot properly handle this, sorry")) - : downloadUrl(reply->url()); - - return; - } - - if (isLocal) - { - // Load outside local files - KRun::run(*appService, replyUrl, 0, false, _suggestedFileName); - } - else - { - KParts::BrowserOpenOrSaveQuestion dlg(rApp->mainWindow(), replyUrl, _mimeType); - - if (!_suggestedFileName.isEmpty()) - dlg.setSuggestedFileName(_suggestedFileName); - - // read askEmbedOrSave preferences. If we don't have to show dialog and rekonq settings are - // to automatically choose download dir, we won't show local dir choose dialog - KConfigGroup cg = KConfigGroup(KSharedConfig::openConfig("filetypesrc", KConfig::NoGlobals), QL1S("Notification Messages")); - bool hideDialog = cg.readEntry(QL1S("askEmbedOrSave") + _mimeType, false); - - kDebug() << "Hide dialog for " << _mimeType << "? " << hideDialog; - - switch (dlg.askEmbedOrSave()) - { - case KParts::BrowserOpenOrSaveQuestion::Save: - rApp->downloadManager()->downloadResource(reply->url(), KIO::MetaData(), view(), !hideDialog, _suggestedFileName); - return; - - case KParts::BrowserOpenOrSaveQuestion::Cancel: - return; - - default: // Can happen when "Open with.." is set and "don't ask again" is checked - break; - } - } - - // Handle Post operations that return content... - if (reply->operation() == QNetworkAccessManager::PostOperation) - { - kDebug() << "POST OPERATION: downloading file..."; - QFileInfo finfo(_suggestedFileName.isEmpty() ? _loadingUrl.fileName() : _suggestedFileName); - KTemporaryFile tempFile; - tempFile.setSuffix(QL1C('.') + finfo.suffix()); - tempFile.setAutoRemove(false); - tempFile.open(); - KUrl destUrl; - destUrl.setPath(tempFile.fileName()); - KIO::Job *job = KIO::file_copy(_loadingUrl, destUrl, 0600, KIO::Overwrite); - job->ui()->setWindow(rApp->mainWindow()); - connect(job, SIGNAL(result(KJob*)), this, SLOT(copyToTempFileResult(KJob*))); - return; - } - - // case KParts::BrowserRun::Embed - KParts::ReadOnlyPart *pa = KMimeTypeTrader::createPartInstanceFromQuery<KParts::ReadOnlyPart>(_mimeType, view(), this, QString()); - if (pa) - { - _isOnRekonqPage = true; - - WebView *view = qobject_cast<WebView *>(parent()); - WebTab *tab = qobject_cast<WebTab *>(view->parent()); - tab->setPart(pa, replyUrl); - - UrlBar *bar = tab->urlBar(); - bar->setQUrl(replyUrl); - - rApp->mainWindow()->updateHistoryActions(); - } - else - { - // No parts, just app services. Load it! - // If the app is a KDE one, publish the slave on hold to let it use it. - // Otherwise, run the app and remove it (the io slave...) - KRun::run(*appService, replyUrl, 0, false, _suggestedFileName); - } - - return; -} - - -void WebPage::loadStarted() -{ - _hasAdBlockedElements = false; - rApp->adblockManager()->clearElementsLists(); - - // set zoom factor - QString val; - KSharedConfig::Ptr config = KGlobal::config(); - KConfigGroup group(config, "Zoom"); - val = group.readEntry(_loadingUrl.host(), QString("10")); - - int value = val.toInt(); - if (value != 10) - mainFrame()->setZoomFactor(QVariant(value).toReal() / 10); // Don't allox max +1 values -} - - -void WebPage::loadFinished(bool ok) -{ - Q_UNUSED(ok); - - // Provide site icon. Can this be moved to loadStarted?? - rApp->iconManager()->provideIcon(mainFrame(), _loadingUrl); - - // Apply adblock manager hiding rules - rApp->adblockManager()->applyHidingRules(this); - - // KWallet Integration - QStringList list = ReKonfig::walletBlackList(); - if (wallet() - && !list.contains(mainFrame()->url().toString()) - ) - { - wallet()->fillFormData(mainFrame()); - } -} - - -void WebPage::manageNetworkErrors(QNetworkReply *reply) -{ - Q_ASSERT(reply); - - QWebFrame* frame = qobject_cast<QWebFrame *>(reply->request().originatingObject()); - if (!frame) - return; - - const bool isMainFrameRequest = (frame == mainFrame()); - - // Only deal with non-redirect responses... - const QVariant redirectVar = reply->attribute(QNetworkRequest::RedirectionTargetAttribute); - if (redirectVar.isValid()) - { - _sslInfo.restoreFrom(reply->attribute(static_cast<QNetworkRequest::Attribute>(KIO::AccessManager::MetaData)), reply->url()); - return; - } - - // We are just managing loading URLs errors - if (reply->request().url() != _loadingUrl) - return; - - // NOTE: These are not all networkreply errors, - // but just that supported directly by KIO - switch (reply->error()) - { - - case QNetworkReply::NoError: // no error. Simple :) - if (isMainFrameRequest) - { - // Obtain and set the SSL information if any... - _sslInfo.restoreFrom(reply->attribute(static_cast<QNetworkRequest::Attribute>(KIO::AccessManager::MetaData)), reply->url()); - _sslInfo.setUrl(reply->url()); - } - break; - - case QNetworkReply::OperationCanceledError: // operation canceled via abort() or close() calls - // ignore this.. - return; - - // WARNING: This is also typical adblocked element error: IGNORE THIS! - case QNetworkReply::ContentAccessDenied: // access to remote content denied - break; - - case QNetworkReply::UnknownNetworkError: // unknown network-related error detected - // last chance for the strange things (eg: FTP, custom schemes, etc...) - if (_protHandler.postHandling(reply->request(), mainFrame())) - return; - - case QNetworkReply::ConnectionRefusedError: // remote server refused connection - case QNetworkReply::HostNotFoundError: // invalid hostname - case QNetworkReply::TimeoutError: // connection time out - case QNetworkReply::ProxyNotFoundError: // invalid proxy hostname - case QNetworkReply::ContentOperationNotPermittedError: // operation requested on remote content not permitted - case QNetworkReply::ContentNotFoundError: // remote content not found on server (similar to HTTP error 404) - case QNetworkReply::ProtocolUnknownError: // Unknown protocol - case QNetworkReply::ProtocolInvalidOperationError: // requested operation is invalid for this protocol - default: - kDebug() << "ERROR " << reply->error() << ": " << reply->errorString(); - if (reply->url() == _loadingUrl) - { - frame->setHtml(errorPage(reply)); - if (isMainFrameRequest) - { - _isOnRekonqPage = true; - - WebView *view = qobject_cast<WebView *>(parent()); - WebTab *tab = qobject_cast<WebTab *>(view->parent()); - UrlBar *bar = tab->urlBar(); - bar->setQUrl(_loadingUrl); - - rApp->mainWindow()->updateHistoryActions(); - } - } - break; - - } -} - - -QString WebPage::errorPage(QNetworkReply *reply) -{ - // display "not found" page - QString notfoundFilePath = KStandardDirs::locate("data", "rekonq/htmls/rekonqinfo.html"); - QFile file(notfoundFilePath); - - bool isOpened = file.open(QIODevice::ReadOnly); - if (!isOpened) - { - return QString("Couldn't open the rekonqinfo.html file"); - } - - // NOTE: - // this, to take care about XSS (see BUG 217464)... - QString urlString = Qt::escape(reply->url().toString()); - - // 1. data path - QString dataPath = QL1S("file://") + notfoundFilePath; - dataPath.remove(QL1S("/htmls/rekonqinfo.html")); - - // 2. title - QString title = i18n("There was a problem while loading the page"); - - // 3. main content - QString msg; - - msg += i18n("<h1>Oops! Rekonq cannot load <em>%1</em></h1>", urlString); - - - msg += i18n("<h2>Wrongly typed?</h2>"); - - msg += QL1S("<table>"); - msg += QL1S("<tr><td>"); - - msg += QL1S("<p>"); - - msg += i18n("We tried to load url: %1.<br />", urlString); - msg += i18n("Check your address for errors like <em>ww.kde.org</em> instead of <em>www.kde.org</em>.<br />"); - msg += i18n("If you spelled right, just try to <a href=\"%1\">reload it</a>.<br />", urlString); - msg += i18n("Otherwise, just be careful the next time around."); - - msg += QL1S("</p>"); - - QString laughIconPath = QString("file://") + KIconLoader::global()->iconPath("face-laugh" , -KIconLoader::SizeHuge, false); - msg += QL1S("</td><td>"); - msg += QL1S("<img src=\"") + laughIconPath + QL1S("\" />"); - msg += QL1S("</td></tr></table>"); - - - msg += i18n("<h2>Network problems?</h2>"); - - QString faceIconPath = QString("file://") + KIconLoader::global()->iconPath("face-surprise" , -KIconLoader::SizeHuge, false); - msg += QL1S("<table>"); - msg += QL1S("<tr><td width=\"100px\">"); - msg += QL1S("<img src=\"") + faceIconPath + QL1S("\" />"); - msg += QL1S("</td><td>"); - - msg += QL1S("<p>"); - - msg += i18n("Maybe you are having problems with your network.<br />"); - msg += i18n("Try checking your <a href=\"%1\">network connections</a>", QL1S("about:settings/network")); - msg += i18n(", your <a href=\"%1\">proxy settings</a> ", QL1S("about:settings/proxy")); - msg += i18n("and your <a href=\"%1\">firewall</a>.<br />", QL1S("about:settings/firewall")); - msg += i18n("Then try again.<br />"); - - msg += QL1S("</p>"); - - msg += QL1S("</td></tr></table>"); - - - msg += i18n("<h2>Suggestions</h2>"); - - msg += QL1S("<table>"); - msg += QL1S("<tr><td>"); - - msg += QL1S("<p>"); - - // Default SearchEngine - KService::Ptr defaultEngine = SearchEngine::defaultEngine(); - - if (defaultEngine) - { - msg += i18n("Consult your default search engine about:"); - msg += QL1S(" <a href=\"") + SearchEngine::buildQuery(defaultEngine, urlString) + QL1S("\">"); - msg += i18n("search with %1", defaultEngine->name()); - msg += QL1S("</a>!<br />"); - } - else - { - msg += i18n("You don't have a default search engine set. We won't suggest you one."); - } - - msg += i18n("At least, you can consult a cached snapshot of the site: <br />"); - msg += i18n("Try checking the <a href=\"%1\">Wayback Machine</a>", QL1S("http://wayback.archive.org/web/*/") + urlString); - msg += i18n(" or the <a href=\"%1\">Google Cache</a>.", QL1S("http://google.com/search?q=cache:") + urlString); - - msg += QL1S("</p>"); - - QString winkIconPath = QString("file://") + KIconLoader::global()->iconPath("face-wink" , -KIconLoader::SizeHuge, false); - msg += QL1S("</td><td>"); - msg += QL1S("<img src=\"") + winkIconPath + QL1S("\" />"); - msg += QL1S("</td></tr></table>"); - - // done. Replace variables and show it - QString html = QL1S(file.readAll()); - - html.replace(QL1S("$DEFAULT_PATH"), dataPath); - html.replace(QL1S("$PAGE_TITLE"), title); - html.replace(QL1S("$MAIN_CONTENT"), msg); - - return html; -} - - -void WebPage::downloadRequest(const QNetworkRequest &request) -{ - rApp->downloadManager()->downloadResource(request.url(), - request.attribute(static_cast<QNetworkRequest::Attribute>(KIO::AccessManager::MetaData)).toMap(), - view()); -} - - -void WebPage::downloadUrl(const KUrl &url) -{ - rApp->downloadManager()->downloadResource(url, KIO::MetaData(), view()); -} - - -void WebPage::downloadAllContentsWithKGet() -{ - QSet<QString> contents; - KUrl baseUrl(currentFrame()->url()); - KUrl relativeUrl; - - QWebElementCollection images = mainFrame()->documentElement().findAll("img"); - Q_FOREACH(const QWebElement & img, images) - { - relativeUrl.setEncodedUrl(img.attribute("src").toUtf8(), KUrl::TolerantMode); - contents << baseUrl.resolved(relativeUrl).toString(); - } - - QWebElementCollection links = mainFrame()->documentElement().findAll("a"); - Q_FOREACH(const QWebElement & link, links) - { - relativeUrl.setEncodedUrl(link.attribute("href").toUtf8(), KUrl::TolerantMode); - contents << baseUrl.resolved(relativeUrl).toString(); - } - - rApp->downloadManager()->downloadLinksWithKGet(QVariant(contents.toList())); -} - - -void WebPage::showSSLInfo(QPoint pos) -{ - if (mainFrame()->url().scheme() == QL1S("https")) - { - SSLWidget *widget = new SSLWidget(mainFrame()->url(), _sslInfo, view()); - widget->showAt(pos); - } - else - { - KMessageBox::information(view(), - i18n("This site does not contain SSL information."), - i18nc("Secure Sockets Layer", "SSL") - ); - } -} - - -void WebPage::copyToTempFileResult(KJob* job) -{ - if (job->error()) - job->uiDelegate()->showErrorMessage(); - else - (void)KRun::runUrl(static_cast<KIO::FileCopyJob *>(job)->destUrl(), _mimeType, rApp->mainWindow()); -} - - -bool WebPage::hasSslValid() const -{ - QList<QSslCertificate> certList = _sslInfo.certificateChain(); - - if (certList.isEmpty()) - return false; - - const QSslCertificate cert = certList.at(0); - if (!cert.isValid()) - return false; - - QList<QStringList> errorList = SslInfoDialog::errorsFromString(_sslInfo.certificateErrors()); - if (!errorList.isEmpty()) - { - QStringList list = errorList.at(0); - if (!list.isEmpty()) - return false; - } - - return true; -} diff --git a/src/webpage.h b/src/webpage.h deleted file mode 100644 index abc9f64c..00000000 --- a/src/webpage.h +++ /dev/null @@ -1,114 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2008 Benjamin C. Meyer <ben@meyerhome.net> -* Copyright (C) 2008 Dirk Mueller <mueller@kde.org> -* Copyright (C) 2008 Urs Wolfer <uwolfer @ kde.org> -* Copyright (C) 2008 Michael Howell <mhowell123@gmail.com> -* Copyright (C) 2008-2012 by Andrea Diamantini <adjam7 at gmail dot com> -* Copyright (C) 2010 by Matthieu Gicquel <matgic78 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 WEBPAGE_H -#define WEBPAGE_H - - -// Rekonq Includes -#include "rekonq_defines.h" - -// Local Includes -#include "protocolhandler.h" -#include "websslinfo.h" - -// KDE Includes -#include <KWebPage> - - -class REKONQ_TESTS_EXPORT WebPage : public KWebPage -{ - Q_OBJECT - -public: - explicit WebPage(QWidget *parent = 0); - ~WebPage(); - - bool hasNetworkAnalyzerEnabled() const; - void enableNetworkAnalyzer(bool b); - - bool isOnRekonqPage() const; - void setIsOnRekonqPage(bool b); - - KUrl loadingUrl(); - - QString suggestedFileName(); - - inline bool hasAdBlockedElements() const - { - return _hasAdBlockedElements; - }; - - inline void setHasAdBlockedElements(bool b) - { - _hasAdBlockedElements = b; - }; - - bool hasSslValid() const; - -public Q_SLOTS: - void downloadAllContentsWithKGet(); - - virtual void downloadRequest(const QNetworkRequest &request); - virtual void downloadUrl(const KUrl &url); - -protected: - WebPage *createWindow(WebWindowType type); - - virtual bool acceptNavigationRequest(QWebFrame *frame, - const QNetworkRequest &request, - NavigationType type); - -private Q_SLOTS: - void handleUnsupportedContent(QNetworkReply *reply); - void manageNetworkErrors(QNetworkReply *reply); - void loadStarted(); - void loadFinished(bool); - void showSSLInfo(QPoint); - - void copyToTempFileResult(KJob*); - -private: - QString errorPage(QNetworkReply *reply); - KUrl _loadingUrl; - - ProtocolHandler _protHandler; - WebSslInfo _sslInfo; - - QString _mimeType; - QString _suggestedFileName; - - bool _networkAnalyzer; - bool _isOnRekonqPage; - bool _hasAdBlockedElements; -}; - -#endif diff --git a/src/webpluginfactory.cpp b/src/webpluginfactory.cpp deleted file mode 100644 index 083ea747..00000000 --- a/src/webpluginfactory.cpp +++ /dev/null @@ -1,105 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2009-2012 by Andrea Diamantini <adjam7 at gmail dot com> -* Copyright (C) 2010 by Matthieu Gicquel <matgic78 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 "webpluginfactory.h" -#include "webpluginfactory.moc" - -// Auto Includes -#include "rekonq.h" - -// Local Includes -#include "clicktoflash.h" - - -WebPluginFactory::WebPluginFactory(QObject *parent) - : KWebPluginFactory(parent) - , _loadClickToFlash(false) -{ - connect(this, SIGNAL(signalLoadClickToFlash(bool)), SLOT(setLoadClickToFlash(bool))); -} - - -void WebPluginFactory::setLoadClickToFlash(bool load) -{ - _loadClickToFlash = load; -} - - -QObject *WebPluginFactory::create(const QString &_mimeType, - const QUrl &url, - const QStringList &argumentNames, - const QStringList &argumentValues) const -{ - QString mimeType(_mimeType.trimmed()); - // If no mimetype is provided, follow kwebpluginfactory road to determine/guess it - if (mimeType.isEmpty()) - { - extractGuessedMimeType(url, &mimeType); - } - - kDebug() << "loading mimeType: " << mimeType; - - // we'd like to use djvu plugin if possible. If not available, rekonq protocol handler - // will provide a part to load it. See BUG:304562 about - if (mimeType == QL1S("image/vnd.djvu") || mimeType == QL1S("image/x.djvu")) - return 0; - - switch (ReKonfig::pluginsEnabled()) - { - case 0: - kDebug() << "No plugins found for" << mimeType << ". Falling back to KDEWebKit ones..."; - return KWebPluginFactory::create(mimeType, url, argumentNames, argumentValues); - - case 1: - if (mimeType != QString("application/x-shockwave-flash") - && mimeType != QString("application/futuresplash")) - break; - - if (_loadClickToFlash) - { - emit signalLoadClickToFlash(false); - return KWebPluginFactory::create(mimeType, url, argumentNames, argumentValues); - } - else - { - ClickToFlash* ctf = new ClickToFlash(url); - connect(ctf, SIGNAL(signalLoadClickToFlash(bool)), this, SLOT(setLoadClickToFlash(bool))); - return ctf; - } - break; - - case 2: - return 0; - - default: - ASSERT_NOT_REACHED("oh oh.. this should NEVER happen.."); - break; - } - - return KWebPluginFactory::create(mimeType, url, argumentNames, argumentValues); -} diff --git a/src/webpluginfactory.h b/src/webpluginfactory.h deleted file mode 100644 index 82bf02ce..00000000 --- a/src/webpluginfactory.h +++ /dev/null @@ -1,65 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2009-2012 by Andrea Diamantini <adjam7 at gmail dot com> -* Copyright (C) 2010 by Matthieu Gicquel <matgic78 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 WEB_PLUGIN_FACTORY_H -#define WEB_PLUGIN_FACTORY_H - - -// Rekonq Includes -#include "rekonq_defines.h" - -// KDE Includes -#include <KWebPluginFactory> - - -class REKONQ_TESTS_EXPORT WebPluginFactory : public KWebPluginFactory -{ - Q_OBJECT - -public: - WebPluginFactory(QObject *parent); - - virtual QObject *create(const QString &_mimeType, - const QUrl &url, - const QStringList &argumentNames, - const QStringList &argumentValues) const; - -Q_SIGNALS: - void signalLoadClickToFlash(bool) const; - -public Q_SLOTS: - void setLoadClickToFlash(bool load); - -private: - /** - When true, force loading of next flash animation (don't show clicktoflash) - We use signals/slots to set this property because QWebPluginFactory::create is const - */ - bool _loadClickToFlash; -}; - -#endif // WEB_PLUGIN_FACTORY_H diff --git a/src/websnap.cpp b/src/websnap.cpp deleted file mode 100644 index 830d37e1..00000000 --- a/src/websnap.cpp +++ /dev/null @@ -1,166 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2009 Nokia Corporation <qt-info@nokia.com> -* Copyright (C) 2009-2012 by Andrea Diamantini <adjam7 at gmail dot com> -* Copyright (C) 2010 by Matthieu Gicquel <matgic78 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 "websnap.h" -#include "websnap.moc" - -// KDE Includes -#include <KStandardDirs> - -// Qt Includes -#include <QSize> -#include <QFile> - -#include <QCryptographicHash> - -#include <QPainter> -#include <QAction> - -#include <QWebFrame> -#include <QWebSettings> - - -WebSnap::WebSnap(const KUrl& url, QObject *parent) - : QObject(parent) - , m_url(url) -{ - // this to not register websnap history - m_page.settings()->setAttribute(QWebSettings::PrivateBrowsingEnabled, true); - - // this to not let this page open other windows - m_page.settings()->setAttribute(QWebSettings::PluginsEnabled, false); - m_page.settings()->setAttribute(QWebSettings::JavascriptEnabled, false); - - connect(&m_page, SIGNAL(loadFinished(bool)), this, SLOT(saveResult(bool))); - - QMetaObject::invokeMethod(this, "load", Qt::QueuedConnection); -} - - -WebSnap::~WebSnap() -{ - m_page.action(QWebPage::Stop)->trigger(); - m_page.deleteLater(); -} - - -void WebSnap::load() -{ - m_page.mainFrame()->load(m_url); -} - - - -QPixmap WebSnap::render(const QWebPage &page, int w, int h) -{ - // create the page image - QPixmap pageImage = QPixmap(w, h); - pageImage.fill(Qt::transparent); - - // render it - QPainter p(&pageImage); - page.mainFrame()->render(&p, QWebFrame::ContentsLayer); - p.end(); - - return pageImage; -} - - -// NOTE -// to render page preview in a safe way, you CANNOT work with scrollbars! -// In fact, disabling temporarily them DOES NOT work without reloading a page -// that is something we CANNOT do. -QPixmap WebSnap::renderPagePreview(const QWebPage &page, int w, int h) -{ - // store actual viewportsize - QSize oldSize = page.viewportSize(); - - // prepare page - // NOTE: I saw some sites with strange CMS and with absurd content size width (eg: 8584553) - // This usually leads setViewportSize to crash :( - // So, ensure renderWidth is no more than 2000. - int renderWidth = page.mainFrame()->contentsSize().width(); - if (renderWidth > 2000) - renderWidth = 2000; - int renderHeight = renderWidth * ((0.0 + h) / w); - - page.setViewportSize(QSize(renderWidth, renderHeight)); - - // consider scrollbars and render the page - bool verticalScrollBarActive = !page.mainFrame()->scrollBarGeometry(Qt::Vertical).isEmpty(); - if (verticalScrollBarActive) - renderWidth -= 15; - - bool horizontalScrollBarActive = !page.mainFrame()->scrollBarGeometry(Qt::Horizontal).isEmpty(); - if (horizontalScrollBarActive) - renderHeight -= 15; - - QPixmap pageImage = WebSnap::render(page, renderWidth, renderHeight); - - // resize image - pageImage = pageImage.scaled(w, h, Qt::KeepAspectRatioByExpanding, Qt::SmoothTransformation); - - // restore page state - page.setViewportSize(oldSize); - - return pageImage; -} - - -QString WebSnap::imagePathFromUrl(const KUrl &url) -{ - QUrl temp = QUrl(url.url()); - QByteArray name = temp.toEncoded(QUrl::RemoveScheme | QUrl::RemoveUserInfo | QUrl::StripTrailingSlash); - - QByteArray hashedName = QCryptographicHash::hash(name, QCryptographicHash::Md5).toHex(); - - return KStandardDirs::locateLocal("cache", QString("thumbs/") + hashedName + ".png", true); -} - - -void WebSnap::saveResult(bool ok) -{ - if (ok) - { - QPixmap image = renderPagePreview(m_page, defaultWidth, defaultHeight); - QString path = imagePathFromUrl(m_url); - QFile::remove(path); - image.save(path); - } - - emit snapDone(ok); - - this->deleteLater(); -} - - -bool WebSnap::existsImage(const KUrl &u) -{ - return QFile::exists(imagePathFromUrl(u)); -} diff --git a/src/websnap.h b/src/websnap.h deleted file mode 100644 index 3e9111f8..00000000 --- a/src/websnap.h +++ /dev/null @@ -1,124 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2009 Nokia Corporation <qt-info@nokia.com> -* Copyright (C) 2009-2012 by Andrea Diamantini <adjam7 at gmail dot com> -* Copyright (C) 2010 by Matthieu Gicquel <matgic78 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 WEB_SNAP_H -#define WEB_SNAP_H - - -// Rekonq Includes -#include "rekonq_defines.h" - -// KDE Includes -#include <KUrl> - -// Qt Includes -#include <QObject> -#include <QWebPage> - -// Forward Declarations -class QPixmap; - -/** - * This class is used in many classes of rekonq to produce an image - * based on the site corresponding to the url passed as argument. - * It also cached the images to not retrieve them every time :) - * - * Heavily based on Graphics-Dojo WebSnap example (thanks!) - * - * We use this in the following rekonq classes: - * - * - TabBar class: to show a tab preview (given a page, you show AND save an image) - * - PreviewSelector class: to save new favorite selection (given a page, you show AND save an image) - * - * - NewTabPage class: to show the favorites page "preview" (given an url, you show AND save an image) - * - */ - -class REKONQ_TESTS_EXPORT WebSnap : public QObject -{ - Q_OBJECT - -public: - /** - * Creates a WebSnap object. It will load the url in one WebPage - * and snap an image from it. - * - * @param url the url to load - * @param parent the object parent - */ - explicit WebSnap(const KUrl &url, QObject *parent = 0); - - ~WebSnap(); - - /** - * Snaps a pixmap of size w * h from a page - * - * @param page the page to snap - * @param w the image width - * @param h the image height - * - * @return the pixmap snapped from the page - */ - static QPixmap renderPagePreview(const QWebPage &page, int w = defaultWidth, int h = defaultHeight); - - /** - * Guess the local path where the image for the url provided - * should be - * - * @param url the url to guess snap path - * - * @return the local path of the url snap - */ - static QString imagePathFromUrl(const KUrl &url); - - /** - * Determines if a snap exists for that url - * - */ - static bool existsImage(const KUrl &url); - - -private Q_SLOTS: - void saveResult(bool ok = true); - void load(); - -Q_SIGNALS: - void snapDone(bool ok); - -private: - // Constants - static const int defaultWidth = 200; - static const int defaultHeight = 150; - QWebPage m_page; - KUrl m_url; - - //render a preview: common part of renderPagePreview() and renderTabPreview() - static QPixmap render(const QWebPage &page, int w, int h); -}; - -#endif // WEB_SNAP_H diff --git a/src/websslinfo.cpp b/src/websslinfo.cpp deleted file mode 100644 index adbf64f5..00000000 --- a/src/websslinfo.cpp +++ /dev/null @@ -1,232 +0,0 @@ -/* ============================================================ -* -* This file is a part of the KDE project -* -* Copyright (C) 2009-2011 by Dawit Alemayehu <adawit@kde.org> -* -* -* 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 "websslinfo.h" - -// Qt Includes -#include <QtCore/QVariant> - - -class WebSslInfo::WebSslInfoPrivate -{ -public: - WebSslInfoPrivate() - : usedCipherBits(0), supportedCipherBits(0) {} - - QUrl url; - QString ciphers; - QString protocol; - QString certErrors; - QHostAddress peerAddress; - QHostAddress parentAddress; - QList<QSslCertificate> certificateChain; - - int usedCipherBits; - int supportedCipherBits; -}; - -WebSslInfo::WebSslInfo() - : d(new WebSslInfo::WebSslInfoPrivate) -{ -} - -WebSslInfo::WebSslInfo(const WebSslInfo& other) - : d(new WebSslInfo::WebSslInfoPrivate) -{ - *this = other; -} - -WebSslInfo::~WebSslInfo() -{ - delete d; - d = 0; -} - -bool WebSslInfo::isValid() const -{ - return (d ? !d->peerAddress.isNull() : false); -} - -QUrl WebSslInfo::url() const -{ - return (d ? d->url : QUrl()); -} - -QHostAddress WebSslInfo::parentAddress() const -{ - return (d ? d->parentAddress : QHostAddress()); -} - -QHostAddress WebSslInfo::peerAddress() const -{ - return (d ? d->peerAddress : QHostAddress()); -} - -QString WebSslInfo::protocol() const -{ - return (d ? d->protocol : QString()); -} - -QString WebSslInfo::ciphers() const -{ - return (d ? d->ciphers : QString()); -} - -QString WebSslInfo::certificateErrors() const -{ - return (d ? d->certErrors : QString()); -} - -int WebSslInfo::supportedChiperBits() const -{ - return (d ? d->supportedCipherBits : 0); -} - -int WebSslInfo::usedChiperBits() const -{ - return (d ? d->usedCipherBits : 0); -} - -QList<QSslCertificate> WebSslInfo::certificateChain() const -{ - return (d ? d->certificateChain : QList<QSslCertificate>()); -} - -WebSslInfo& WebSslInfo::operator=(const WebSslInfo & other) -{ - if (d) - { - d->ciphers = other.d->ciphers; - d->protocol = other.d->protocol; - d->certErrors = other.d->certErrors; - d->peerAddress = other.d->peerAddress; - d->parentAddress = other.d->parentAddress; - d->certificateChain = other.d->certificateChain; - - d->usedCipherBits = other.d->usedCipherBits; - d->supportedCipherBits = other.d->supportedCipherBits; - d->url = other.d->url; - } - - return *this; -} - -bool WebSslInfo::saveTo(QMap<QString, QVariant>& data) const -{ - const bool ok = isValid(); - if (ok) - { - data.insert("ssl_in_use", true); - data.insert("ssl_peer_ip", d->peerAddress.toString()); - data.insert("ssl_parent_ip", d->parentAddress.toString()); - data.insert("ssl_protocol_version", d->protocol); - data.insert("ssl_cipher", d->ciphers); - data.insert("ssl_cert_errors", d->certErrors); - data.insert("ssl_cipher_used_bits", d->usedCipherBits); - data.insert("ssl_cipher_bits", d->supportedCipherBits); - QByteArray certChain; - Q_FOREACH(const QSslCertificate & cert, d->certificateChain) - certChain += cert.toPem(); - data.insert("ssl_peer_chain", certChain); - } - - return ok; -} - -void WebSslInfo::restoreFrom(const QVariant& value, const QUrl& url) -{ - if (value.isValid() && value.type() == QVariant::Map) - { - QMap<QString, QVariant> metaData = value.toMap(); - if (metaData.value("ssl_in_use", false).toBool()) - { - setCertificateChain(metaData.value("ssl_peer_chain").toByteArray()); - setPeerAddress(metaData.value("ssl_peer_ip").toString()); - setParentAddress(metaData.value("ssl_parent_ip").toString()); - setProtocol(metaData.value("ssl_protocol_version").toString()); - setCiphers(metaData.value("ssl_cipher").toString()); - setCertificateErrors(metaData.value("ssl_cert_errors").toString()); - setUsedCipherBits(metaData.value("ssl_cipher_used_bits").toString()); - setSupportedCipherBits(metaData.value("ssl_cipher_bits").toString()); - setUrl(url); - } - } -} - -void WebSslInfo::setUrl(const QUrl &url) -{ - if (d) - d->url = url; -} - -void WebSslInfo::setPeerAddress(const QString& address) -{ - if (d) - d->peerAddress = address; -} - -void WebSslInfo::setParentAddress(const QString& address) -{ - if (d) - d->parentAddress = address; -} - -void WebSslInfo::setProtocol(const QString& protocol) -{ - if (d) - d->protocol = protocol; -} - -void WebSslInfo::setCertificateChain(const QByteArray& chain) -{ - if (d) - d->certificateChain = QSslCertificate::fromData(chain); -} - -void WebSslInfo::setCiphers(const QString& ciphers) -{ - if (d) - d->ciphers = ciphers; -} - -void WebSslInfo::setUsedCipherBits(const QString& bits) -{ - if (d) - d->usedCipherBits = bits.toInt(); -} - -void WebSslInfo::setSupportedCipherBits(const QString& bits) -{ - if (d) - d->supportedCipherBits = bits.toInt(); -} - -void WebSslInfo::setCertificateErrors(const QString& certErrors) -{ - if (d) - d->certErrors = certErrors; -} diff --git a/src/websslinfo.h b/src/websslinfo.h deleted file mode 100644 index 6d47b4c8..00000000 --- a/src/websslinfo.h +++ /dev/null @@ -1,78 +0,0 @@ -/* ============================================================ -* -* This file is a part of the KDE project -* -* Copyright (C) 2009-2011 by Dawit Alemayehu <adawit@kde.org> -* -* -* 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 WEBSSLINFO_H -#define WEBSSLINFO_H - -#include <kdemacros.h> - -#include <QtCore/QUrl> -#include <QtCore/QList> -#include <QtCore/QString> -#include <QtNetwork/QHostAddress> -#include <QtNetwork/QSslCertificate> - - -class WebSslInfo -{ -public: - WebSslInfo(); - WebSslInfo(const WebSslInfo&); - virtual ~WebSslInfo(); - - bool isValid() const; - QUrl url() const; - QHostAddress peerAddress() const; - QHostAddress parentAddress() const; - QString ciphers() const; - QString protocol() const; - QString certificateErrors() const; - int supportedChiperBits() const; - int usedChiperBits() const; - QList<QSslCertificate> certificateChain() const; - - bool saveTo(QMap<QString, QVariant>&) const; - void restoreFrom(const QVariant &, const QUrl& = QUrl()); - - void setUrl(const QUrl &url); - WebSslInfo& operator = (const WebSslInfo&); - -protected: - void setCiphers(const QString& ciphers); - void setProtocol(const QString& protocol); - void setPeerAddress(const QString& address); - void setParentAddress(const QString& address); - void setCertificateChain(const QByteArray& chain); - void setCertificateErrors(const QString& certErrors); - void setUsedCipherBits(const QString& bits); - void setSupportedCipherBits(const QString& bits); - -private: - class WebSslInfoPrivate; - WebSslInfoPrivate* d; -}; - -#endif // WEBSSLINFO_H diff --git a/src/webtab.cpp b/src/webtab.cpp deleted file mode 100644 index 457e9006..00000000 --- a/src/webtab.cpp +++ /dev/null @@ -1,419 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2008-2012 by Andrea Diamantini <adjam7 at gmail dot com> -* Copyright (C) 2009-2011 by Lionel Chauvin <megabigbug@yahoo.fr> -* -* -* 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 "webtab.h" -#include "webtab.moc" - -// Auto Includes -#include "rekonq.h" - -// Local Includes -#include "application.h" -#include "historymanager.h" -#include "messagebar.h" -#include "opensearchmanager.h" -#include "previewselectorbar.h" -#include "rsswidget.h" -#include "searchenginebar.h" -#include "sessionmanager.h" -#include "syncmanager.h" -#include "urlbar.h" -#include "walletbar.h" -#include "webpage.h" -#include "websnap.h" -#include "webshortcutwidget.h" - -// KDE Includes -#include <KWebWallet> -#include <KStandardShortcut> -#include <KMenu> -#include <KActionMenu> -#include <KWebView> -#include <KDebug> -#include <KBuildSycocaProgressDialog> - -// Qt Includes -#include <QVBoxLayout> - - -WebTab::WebTab(QWidget *parent) - : QWidget(parent) - , m_webView(0) - , m_urlBar(new UrlBar(this)) - , m_progress(0) - , m_part(0) -{ - setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); - - QVBoxLayout *l = new QVBoxLayout(this); - l->setMargin(0); - l->setSpacing(0); - - l->addWidget(view()); - view()->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); - - // fix focus handling - setFocusProxy(view()); - - KWebWallet *wallet = page()->wallet(); - - if (wallet) - { - connect(wallet, SIGNAL(saveFormDataRequested(QString, QUrl)), - this, SLOT(createWalletBar(QString, QUrl))); - } - - connect(view(), SIGNAL(loadProgress(int)), this, SLOT(updateProgress(int))); - connect(view(), SIGNAL(loadStarted()), this, SLOT(resetProgress())); - connect(view(), SIGNAL(titleChanged(QString)), this, SIGNAL(titleChanged(QString))); - connect(view(), SIGNAL(loadFinished(bool)), this, SLOT(loadFinished())); - - // Session Manager - connect(view(), SIGNAL(loadFinished(bool)), rApp->sessionManager(), SLOT(saveSession())); -} - - -WebTab::~WebTab() -{ - m_walletBar.clear(); - m_previewSelectorBar.clear(); - - // NOTE: - // Urlbar is reparented when inserted in StackedUrlBar, so we need - // to get sure it will be deleted. Deleting it later to ensure everything - // will be finished before ;) - m_urlBar->deleteLater(); - - // Get sure m_part will be deleted - delete m_part; -} - - -WebView *WebTab::view() -{ - if (!m_webView) - { - m_webView = new WebView(this); - } - return m_webView; -} - - -WebPage *WebTab::page() -{ - if (view()) - return view()->page(); - - return 0; -} - - -KUrl WebTab::url() -{ - if (page() && page()->isOnRekonqPage()) - { - return page()->loadingUrl(); - } - - if (view()) - return view()->url(); - - kDebug() << "OOPS... NO web classes survived! Returning an empty url..."; - return KUrl(); -} - - -void WebTab::updateProgress(int p) -{ - m_progress = p; - emit loadProgressing(); -} - - -void WebTab::resetProgress() -{ - m_progress = 1; -} - - -bool WebTab::isPageLoading() -{ - return m_progress != 0 && m_progress != 100; -} - - -void WebTab::createWalletBar(const QString &key, const QUrl &url) -{ - // check if the url is in the wallet blacklist - QString urlString = url.toString(); - QStringList blackList = ReKonfig::walletBlackList(); - if (blackList.contains(urlString)) - return; - - KWebWallet *wallet = page()->wallet(); - - if (!ReKonfig::passwordSavingEnabled()) - { - wallet->rejectSaveFormDataRequest(key); - return; - } - - if (m_walletBar.isNull()) - { - m_walletBar = new WalletBar(this); - m_walletBar.data()->onSaveFormData(key, url); - qobject_cast<QVBoxLayout *>(layout())->insertWidget(0, m_walletBar.data()); - m_walletBar.data()->animatedShow(); - } - else - { - disconnect(wallet); - qobject_cast<QVBoxLayout *>(layout())->insertWidget(0, m_walletBar.data()); - m_walletBar.data()->animatedShow(); - } - - connect(m_walletBar.data(), SIGNAL(saveFormDataAccepted(QString)), - wallet, SLOT(acceptSaveFormDataRequest(QString)), Qt::UniqueConnection); - connect(m_walletBar.data(), SIGNAL(saveFormDataRejected(QString)), - wallet, SLOT(rejectSaveFormDataRequest(QString)), Qt::UniqueConnection); - - // sync passwords - connect(m_walletBar.data(), SIGNAL(saveFormDataAccepted(QString)), - rApp->syncManager(), SLOT(syncPasswords()), Qt::UniqueConnection); -} - - -void WebTab::createPreviewSelectorBar(int index) -{ - if (m_previewSelectorBar.isNull()) - { - m_previewSelectorBar = new PreviewSelectorBar(index, this); - qobject_cast<QVBoxLayout *>(layout())->insertWidget(0, m_previewSelectorBar.data()); - m_previewSelectorBar.data()->animatedShow(); - } - else - { - disconnect(m_previewSelectorBar.data()); - m_previewSelectorBar.data()->setIndex(index); - m_previewSelectorBar.data()->animatedHide(); - } - - connect(page(), SIGNAL(loadStarted()), m_previewSelectorBar.data(), SLOT(loadProgress()), Qt::UniqueConnection); - connect(page(), SIGNAL(loadProgress(int)), m_previewSelectorBar.data(), SLOT(loadProgress()), Qt::UniqueConnection); - connect(page(), SIGNAL(loadFinished(bool)), m_previewSelectorBar.data(), SLOT(loadFinished()), Qt::UniqueConnection); - connect(page()->mainFrame(), SIGNAL(urlChanged(QUrl)), m_previewSelectorBar.data(), SLOT(verifyUrl()), Qt::UniqueConnection); -} - - -bool WebTab::hasRSSInfo() -{ - QWebElementCollection col = page()->mainFrame()->findAllElements("link[type=\"application/rss+xml\"]"); - col.append(page()->mainFrame()->findAllElements("link[type=\"application/atom+xml\"]")); - if (col.count() != 0) - return true; - - return false; -} - - -void WebTab::showRSSInfo(const QPoint &pos) -{ - QWebElementCollection col = page()->mainFrame()->findAllElements("link[type=\"application/rss+xml\"]"); - col.append(page()->mainFrame()->findAllElements("link[type=\"application/atom+xml\"]")); - - QMap<KUrl, QString> map; - - Q_FOREACH(const QWebElement & el, col) - { - QString urlString; - if (el.attribute("href").startsWith(QL1S("http"))) - urlString = el.attribute("href"); - else - { - KUrl u = url(); - // NOTE - // cd() is probably better than setPath() here, - // for all those url sites just having a path - if (u.cd(el.attribute("href"))) - urlString = u.toMimeDataString(); - } - - QString title = el.attribute("title"); - if (title.isEmpty()) - title = el.attribute("href"); - - map.insert(KUrl(urlString), title); - } - - RSSWidget *widget = new RSSWidget(map, window()); - widget->showAt(pos); -} - - -void WebTab::hideSelectorBar() -{ - m_previewSelectorBar.data()->animatedHide(); -} - - -void WebTab::setPart(KParts::ReadOnlyPart *p, const KUrl &u) -{ - if (p) - { - // Ok, part exists. Insert & show it.. - m_part = p; - qobject_cast<QVBoxLayout *>(layout())->insertWidget(1, p->widget()); - p->openUrl(u); - m_webView->hide(); - - emit titleChanged(u.url()); - return; - } - - if (!m_part) - return; - - // Part NO more exists. Let's clean up from webtab - m_webView->show(); - qobject_cast<QVBoxLayout *>(layout())->removeWidget(m_part->widget()); - delete m_part; - m_part = 0; -} - - -KUrl WebTab::extractOpensearchUrl(QWebElement e) -{ - QString href = e.attribute(QL1S("href")); - KUrl url = KUrl(href); - if (!href.contains(":")) - { - KUrl docUrl = m_webView->url(); - QString host = docUrl.scheme() + "://" + docUrl.host(); - if (docUrl.port() != -1) - { - host += QL1C(':') + QString::number(docUrl.port()); - } - url = KUrl(docUrl, href); - } - return url; -} - - -bool WebTab::hasNewSearchEngine() -{ - QWebElement e = page()->mainFrame()->findFirstElement(QL1S("head >link[rel=\"search\"][ type=\"application/opensearchdescription+xml\"]")); - return !e.isNull() && !rApp->opensearchManager()->engineExists(extractOpensearchUrl(e)); -} - - -void WebTab::showSearchEngine(const QPoint &pos) -{ - QWebElement e = page()->mainFrame()->findFirstElement(QL1S("head >link[rel=\"search\"][ type=\"application/opensearchdescription+xml\"]")); - QString title = e.attribute(QL1S("title")); - if (!title.isEmpty()) - { - WebShortcutWidget *widget = new WebShortcutWidget(window()); - widget->setWindowFlags(Qt::Popup); - - connect(widget, SIGNAL(webShortcutSet(KUrl, QString, QString)), - rApp->opensearchManager(), SLOT(addOpenSearchEngine(KUrl, QString, QString))); - connect(rApp->opensearchManager(), SIGNAL(openSearchEngineAdded(QString)), - this, SLOT(openSearchEngineAdded())); - - widget->show(extractOpensearchUrl(e), title, pos); - } -} - - -void WebTab::openSearchEngineAdded() -{ - // If the providers changed, tell sycoca to rebuild its database... - KBuildSycocaProgressDialog::rebuildKSycoca(this); - - disconnect(rApp->opensearchManager(), SIGNAL(openSearchEngineAdded(QString, QString, QString)), - this, SLOT(openSearchEngineAdded())); -} - - -void WebTab::showMessageBar() -{ - MessageBar *msgBar = new MessageBar(i18n("It seems rekonq was not closed properly. Do you want " - "to restore the last saved session?"), this); - - qobject_cast<QVBoxLayout *>(layout())->insertWidget(0, msgBar); - msgBar->animatedShow(); - - connect(msgBar, SIGNAL(accepted()), rApp->sessionManager(), SLOT(restoreCrashedSession())); -} - - -bool WebTab::hasAdBlockedElements() -{ - return page()->hasAdBlockedElements(); -} - - -QPixmap WebTab::tabPreview(int width, int height) -{ - if (isPageLoading()) - { - // no previews during load - return QPixmap(); - } - - if (!part()) - { - return WebSnap::renderPagePreview(*page(), width, height); - } - else - { - QWidget *partWidget = part()->widget(); - QPixmap partThumb(partWidget->size()); - - partWidget->render(&partThumb); - - return partThumb.scaled(width, height, Qt::IgnoreAspectRatio, Qt::SmoothTransformation); - } -} - - -void WebTab::loadFinished() -{ - // add page to history - QString pageTitle = (page() && page()->isOnRekonqPage()) ? url().url() : m_webView->title(); - rApp->historyManager()->addHistoryEntry(url(), pageTitle); -} - - -void WebTab::showSearchEngineBar() -{ - SearchEngineBar *seBar = new SearchEngineBar(this); - - qobject_cast<QVBoxLayout *>(layout())->insertWidget(0, seBar); - seBar->animatedShow(); -} diff --git a/src/webtab.h b/src/webtab.h deleted file mode 100644 index 39c23fb9..00000000 --- a/src/webtab.h +++ /dev/null @@ -1,131 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2008-2012 by Andrea Diamantini <adjam7 at gmail dot com> -* Copyright (C) 2009-2011 by Lionel Chauvin <megabigbug@yahoo.fr> -* -* -* 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 WEBTAB_H -#define WEBTAB_H - - -// Rekonq Includes -#include "rekonq_defines.h" - -// Local Includes -#include "webview.h" - -// KDE Includes -#include <KParts/Part> - -// Qt Includes -#include <QWidget> - -// Forward Declarations -class NotificationBar; -class PreviewSelectorBar; -class QPoint; -class UrlBar; -class WalletBar; -class WebPage; - - -class REKONQ_TESTS_EXPORT WebTab : public QWidget -{ - Q_OBJECT - -public: - explicit WebTab(QWidget *parent = 0); - ~WebTab(); - - WebView *view(); - WebPage *page(); - - inline UrlBar *urlBar() const - { - return m_urlBar; - } - - inline int progress() const - { - return m_progress; - } - - KUrl url(); - - void createPreviewSelectorBar(int index); - - void hideSelectorBar(); - - bool hasRSSInfo(); - - bool isPageLoading(); - - bool hasNewSearchEngine(); - - KParts::ReadOnlyPart *part() - { - return m_part; - } - - void setPart(KParts::ReadOnlyPart *p, const KUrl &u); - - bool hasAdBlockedElements(); - - QPixmap tabPreview(int width, int height); - -private Q_SLOTS: - void updateProgress(int progress); - void resetProgress(); - - void createWalletBar(const QString &, const QUrl &); - void showRSSInfo(const QPoint &pos); - void showSearchEngine(const QPoint &pos); - void openSearchEngineAdded(); - - void showMessageBar(); - void loadFinished(); - - void showSearchEngineBar(); - -private: - KUrl extractOpensearchUrl(QWebElement e); - -Q_SIGNALS: - void loadProgressing(); - void titleChanged(const QString &); - -private: - WebView *m_webView; - - UrlBar *m_urlBar; - - int m_progress; - - QWeakPointer<WalletBar> m_walletBar; - QWeakPointer<PreviewSelectorBar> m_previewSelectorBar; - - KParts::ReadOnlyPart *m_part; -}; - -#endif diff --git a/src/webview.cpp b/src/webview.cpp deleted file mode 100644 index 50dad074..00000000 --- a/src/webview.cpp +++ /dev/null @@ -1,1463 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2008-2012 by Andrea Diamantini <adjam7 at gmail dot com> -* Copyright (C) 2009-2011 by Lionel Chauvin <megabigbug@yahoo.fr> -* -* -* 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 "webview.h" -#include "webview.moc" - -// Auto Includes -#include "rekonq.h" - -// Local Includes -#include "application.h" -#include "adblockmanager.h" -#include "bookmarkmanager.h" -#include "iconmanager.h" -#include "mainview.h" -#include "mainwindow.h" -#include "searchengine.h" -#include "urlbar.h" -#include "webpage.h" -#include "webtab.h" - -// KDE Includes -#include <KAction> -#include <KActionMenu> -#include <KLocalizedString> -#include <KMenu> -#include <KStandardAction> -#include <KStandardDirs> -#include <KToolInvocation> - -// Qt Includes -#include <QFile> -#include <QTimer> - -#include <QClipboard> -#include <QContextMenuEvent> -#include <QLabel> - -#include <QWebFrame> -#include <QWebHistory> -#include <QNetworkRequest> -#include <sonnet/speller.h> -#include <Sonnet/Dialog> -#include <sonnet/backgroundchecker.h> - -WebView::WebView(QWidget* parent) - : KWebView(parent, false) - , m_page(0) - , m_autoScrollTimer(new QTimer(this)) - , m_verticalAutoScrollSpeed(0) - , m_horizontalAutoScrollSpeed(0) - , m_isViewAutoScrolling(false) - , m_autoScrollIndicator(QPixmap(KStandardDirs::locate("appdata" , "pics/autoscroll.png"))) - , m_smoothScrollTimer(new QTimer(this)) - , m_dy(0) - , m_smoothScrollSteps(0) - , m_isViewSmoothScrolling(false) - , m_accessKeysPressed(false) - , m_accessKeysActive(false) -{ - // loadUrl signal - connect(this, SIGNAL(loadUrl(KUrl, Rekonq::OpenType)), rApp, SLOT(loadUrl(KUrl, Rekonq::OpenType))); - - // Auto scroll timer - connect(m_autoScrollTimer, SIGNAL(timeout()), this, SLOT(scrollFrameChanged())); - m_autoScrollTimer->setInterval(100); - - // Smooth scroll timer - connect(m_smoothScrollTimer, SIGNAL(timeout()), this, SLOT(scrollTick())); - m_smoothScrollTimer->setInterval(16); - - connect(this, SIGNAL(iconChanged()), this, SLOT(changeWindowIcon())); - connect(this, SIGNAL(loadStarted()), this, SLOT(loadStarted())); -} - - -WebView::~WebView() -{ - if (m_isViewSmoothScrolling) - stopSmoothScrolling(); -} - - -void WebView::load(const QUrl &url) -{ - load(QNetworkRequest(url)); -} - - -void WebView::load(const QNetworkRequest &req, QNetworkAccessManager::Operation op, const QByteArray &body) -{ - QNetworkRequest request = req; - const QUrl &reqUrl = request.url(); - if (reqUrl.host() == url().host()) - { - request.setRawHeader(QByteArray("Referer"), url().toEncoded()); - } - - KWebView::load(request, op, body); -} - - -void WebView::loadStarted() -{ - hideAccessKeys(); -} - - -void WebView::changeWindowIcon() -{ - if (ReKonfig::useFavicon()) - { - MainWindow *const mainWindow = rApp->mainWindow(); - if (url() == mainWindow->currentTab()->url()) - { - const int index = mainWindow->mainView()->currentIndex(); - mainWindow->changeWindowIcon(index); - } - } -} - - -WebPage *WebView::page() -{ - if (!m_page) - { - m_page = new WebPage(this); - setPage(m_page); - } - return m_page; -} - -bool WebView::popupSpellMenu(QContextMenuEvent *event) -{ - // return false if not handled - if (! ReKonfig::automaticSpellChecking()) - return false; - - QWebElement element(m_ContextMenuResult.element()); - if (element.isNull()) - return false; - - int selStart = element.evaluateJavaScript("this.selectionStart").toInt(); - int selEnd = element.evaluateJavaScript("this.selectionEnd").toInt(); - if (selEnd != selStart) - return false; // selection, handle normally - - // No selection - Spell Checking only - // Get word - QString text = element.evaluateJavaScript("this.value").toString(); - QRegExp ws("\\b"); - int s1 = text.lastIndexOf(ws, selStart); - int s2 = text.indexOf(ws, selStart); - QString word = text.mid(s1, s2 - s1).trimmed(); - - // sanity check - if (word.isEmpty()) - return false; - - kDebug() << s1 << ":" << s2 << ":" << word << ":"; - Sonnet::Speller spellor; - if (spellor.isCorrect(word)) - return false; // no need to popup spell menu - - - // find alternates - QStringList words = spellor.suggest(word); - - // Construct popup menu - QMenu mnu(this); - - // Add alternates - if (words.isEmpty()) - { - QAction *a = mnu.addAction(i18n("No suggestions for %1", word)); - a->setEnabled(false); - } - else - { - QStringListIterator it(words); - while (it.hasNext()) - { - QString w = it.next(); - QAction *aWord = mnu.addAction(w); - aWord->setData(w); - } - } - // Add dictionary options - mnu.addSeparator(); - QAction *aIgnore = mnu.addAction(i18n("Ignore")); - QAction *aAddToDict = mnu.addAction(i18n("Add to Dictionary")); - - QAction *aSpellChoice = mnu.exec(event->globalPos()); - if (aSpellChoice) - { - if (aSpellChoice == aAddToDict) - spellor.addToPersonal(word); - else if (aSpellChoice == aIgnore) - { - // Ignore :) - } - else - { - // Choose a replacement word - QString w = aSpellChoice->data().toString(); - if (! w.isEmpty()) - { - // replace word - QString script(QL1S("this.value=this.value.substring(0,")); - script += QString::number(s1); - script += QL1S(") + \""); - script += w; - script += QL1S("\" + this.value.substring("); - script += QString::number(s2); - script += QL1S(")"); - element.evaluateJavaScript(script); - // reposition cursor - element.evaluateJavaScript("this.selectionEnd=this.selectionStart=" + QString::number(selStart) + ";"); - } - } - } - - return true; -} - -void WebView::contextMenuEvent(QContextMenuEvent *event) -{ - m_ContextMenuResult = page()->mainFrame()->hitTestContent(event->pos()); - MainWindow *mainwindow = rApp->mainWindow(); - - if (m_ContextMenuResult.isContentEditable()) - { - // Check to see if handled by speller - if (popupSpellMenu(event)) - return; - } - - KMenu menu(this); - - KAction *inspectAction = new KAction(KIcon("layer-visible-on"), i18n("Inspect Element"), &menu); - connect(inspectAction, SIGNAL(triggered(bool)), this, SLOT(inspect())); - - KAction *sendByMailAction = new KAction(&menu); - sendByMailAction->setIcon(KIcon("mail-send")); - connect(sendByMailAction, SIGNAL(triggered(bool)), this, SLOT(sendByMail())); - - // Choose right context - int resultHit = 0; - if (m_ContextMenuResult.linkUrl().isEmpty()) - resultHit = WebView::EmptySelection; - else - resultHit = WebView::LinkSelection; - - if (!m_ContextMenuResult.pixmap().isNull()) - resultHit |= WebView::ImageSelection; - - if (m_ContextMenuResult.isContentSelected()) - resultHit = WebView::TextSelection; - - // -------------------------------------------------------------------------------- - // Ok, let's start filling up the menu... - - // is content editable? Add PASTE - if (m_ContextMenuResult.isContentEditable()) - { - menu.addAction(pageAction(KWebPage::Paste)); - menu.addSeparator(); - } - - QAction *a; - // EMPTY PAGE ACTIONS ------------------------------------------------------------- - if (resultHit == WebView::EmptySelection) - { - // send by mail: page url - sendByMailAction->setData(page()->currentFrame()->url()); - sendByMailAction->setText(i18n("Share page url")); - - // navigation - QWebHistory *history = page()->history(); - if (history->canGoBack()) - { - menu.addAction(pageAction(KWebPage::Back)); - } - - if (history->canGoForward()) - { - menu.addAction(pageAction(KWebPage::Forward)); - } - - menu.addAction(mainwindow->actionByName("view_redisplay")); - - menu.addSeparator(); - - //Frame - KActionMenu *frameMenu = new KActionMenu(i18n("Current Frame"), &menu); - frameMenu->addAction(pageAction(KWebPage::OpenFrameInNewWindow)); - - a = new KAction(KIcon("document-print-frame"), i18n("Print Frame"), &menu); - connect(a, SIGNAL(triggered()), this, SLOT(printFrame())); - frameMenu->addAction(a); - - menu.addAction(frameMenu); - - menu.addSeparator(); - - // Page Actions - menu.addAction(pageAction(KWebPage::SelectAll)); - - menu.addAction(mainwindow->actionByName(KStandardAction::name(KStandardAction::SaveAs))); - - if (!KStandardDirs::findExe("kget").isNull() && ReKonfig::kgetList()) - { - a = new KAction(KIcon("kget"), i18n("List All Links"), &menu); - connect(a, SIGNAL(triggered(bool)), page(), SLOT(downloadAllContentsWithKGet())); - menu.addAction(a); - } - - menu.addAction(mainwindow->actionByName("page_source")); - menu.addAction(inspectAction); - - if (mainwindow->isFullScreen()) - { - menu.addSeparator(); - menu.addAction(mainwindow->actionByName("fullscreen")); - } - } - - // LINK ACTIONS ------------------------------------------------------------------- - if (resultHit & WebView::LinkSelection) - { - // send by mail: link url - sendByMailAction->setData(m_ContextMenuResult.linkUrl()); - sendByMailAction->setText(i18n("Share link")); - - a = new KAction(KIcon("tab-new"), i18n("Open in New &Tab"), &menu); - a->setData(m_ContextMenuResult.linkUrl()); - connect(a, SIGNAL(triggered(bool)), this, SLOT(openLinkInNewTab())); - menu.addAction(a); - - a = new KAction(KIcon("window-new"), i18n("Open in New &Window"), &menu); - a->setData(m_ContextMenuResult.linkUrl()); - connect(a, SIGNAL(triggered(bool)), this, SLOT(openLinkInNewWindow())); - menu.addAction(a); - - menu.addSeparator(); - - // Don't show dots if we are NOT going to ask for download path - a = pageAction(KWebPage::DownloadLinkToDisk); - if (ReKonfig::askDownloadPath()) - a->setText(i18n("Save Link...")); - else - a->setText(i18n("Save Link")); - - menu.addAction(a); - menu.addAction(pageAction(KWebPage::CopyLinkToClipboard)); - } - - // IMAGE ACTIONS ------------------------------------------------------------------ - if (resultHit & WebView::ImageSelection) - { - // send by mail: image url - sendByMailAction->setData(m_ContextMenuResult.imageUrl()); - sendByMailAction->setText(i18n("Share image link")); - - menu.addSeparator(); - - a = new KAction(KIcon("view-preview"), i18n("&View Image"), &menu); - a->setData(m_ContextMenuResult.imageUrl()); - connect(a, SIGNAL(triggered(Qt::MouseButtons, Qt::KeyboardModifiers)), - this, SLOT(viewImage(Qt::MouseButtons, Qt::KeyboardModifiers))); - menu.addAction(a); - - menu.addAction(pageAction(KWebPage::DownloadImageToDisk)); - - a = new KAction(KIcon("view-media-visualization"), i18n("&Copy Image Location"), &menu); - a->setData(m_ContextMenuResult.imageUrl()); - connect(a, SIGNAL(triggered(Qt::MouseButtons, Qt::KeyboardModifiers)), this, SLOT(slotCopyImageLocation())); - menu.addAction(a); - - if (rApp->adblockManager()->isEnabled()) - { - a = new KAction(KIcon("preferences-web-browser-adblock"), i18n("Block image"), &menu); - a->setData(m_ContextMenuResult.imageUrl()); - connect(a, SIGNAL(triggered(Qt::MouseButtons, Qt::KeyboardModifiers)), this, SLOT(blockImage())); - menu.addAction(a); - } - } - - // ACTIONS FOR TEXT SELECTION ----------------------------------------------------- - if (resultHit & WebView::TextSelection) - { - // send by mail: text - sendByMailAction->setData(selectedText()); - sendByMailAction->setText(i18n("Share selected text")); - - if (m_ContextMenuResult.isContentEditable()) - { - // actions for text selected in field - menu.addAction(pageAction(KWebPage::Cut)); - } - - a = pageAction(KWebPage::Copy); - if (!m_ContextMenuResult.linkUrl().isEmpty()) - a->setText(i18n("Copy Text")); //for link - else - a->setText(i18n("Copy")); - menu.addAction(a); - - if (selectedText().contains('.') && selectedText().indexOf('.') < selectedText().length() - && !selectedText().trimmed().contains(" ") - ) - { - QString text = selectedText(); - text = text.trimmed(); - KUrl urlLikeText(text); - if (urlLikeText.isValid()) - { - QString truncatedUrl = text; - const int maxTextSize = 18; - if (truncatedUrl.length() > maxTextSize) - { - const int truncateSize = 15; - truncatedUrl.truncate(truncateSize); - truncatedUrl += QL1S("..."); - } - //open selected text url in a new tab - QAction * const openInNewTabAction = new KAction(KIcon("tab-new"), i18n("Open '%1' in New Tab", truncatedUrl), &menu); - openInNewTabAction->setData(QUrl(urlLikeText)); - connect(openInNewTabAction, SIGNAL(triggered(bool)), this, SLOT(openLinkInNewTab())); - menu.addAction(openInNewTabAction); - //open selected text url in a new window - QAction * const openInNewWindowAction = new KAction(KIcon("window-new"), i18n("Open '%1' in New Window", truncatedUrl), &menu); - openInNewWindowAction->setData(QUrl(urlLikeText)); - connect(openInNewWindowAction, SIGNAL(triggered(bool)), this, SLOT(openLinkInNewWindow())); - menu.addAction(openInNewWindowAction); - menu.addSeparator(); - } - } - - //Default SearchEngine - KService::Ptr defaultEngine = SearchEngine::defaultEngine(); - if (defaultEngine) // check if a default engine is set - { - a = new KAction(i18nc("Search selected text with the default search engine", "Search with %1", defaultEngine->name()), &menu); - a->setIcon(rApp->iconManager()->iconForUrl(SearchEngine::buildQuery(defaultEngine, ""))); - a->setData(defaultEngine->entryPath()); - connect(a, SIGNAL(triggered(bool)), this, SLOT(search())); - menu.addAction(a); - } - - //All favourite ones - KActionMenu *searchMenu = new KActionMenu(KIcon("edit-find"), i18nc("@title:menu", "Search"), &menu); - - Q_FOREACH(const KService::Ptr & engine, SearchEngine::favorites()) - { - a = new KAction(i18nc("@item:inmenu Search, %1 = search engine", "With %1", engine->name()), &menu); - a->setIcon(rApp->iconManager()->iconForUrl(SearchEngine::buildQuery(engine, ""))); - a->setData(engine->entryPath()); - connect(a, SIGNAL(triggered(bool)), this, SLOT(search())); - searchMenu->addAction(a); - } - - a = new KAction(KIcon("edit-find"), i18n("On Current Page"), &menu); - connect(a, SIGNAL(triggered()), rApp->mainWindow(), SLOT(findSelectedText())); - searchMenu->addAction(a); - - if (!searchMenu->menu()->isEmpty()) - { - menu.addAction(searchMenu); - } - } - - // DEFAULT ACTIONs (on the bottom) ------------------------------------------------ - menu.addSeparator(); - if (resultHit & WebView::LinkSelection) - { - a = new KAction(KIcon("bookmark-new"), i18n("&Bookmark link"), &menu); - a->setData(m_ContextMenuResult.linkUrl()); - connect(a, SIGNAL(triggered(bool)), this, SLOT(bookmarkLink())); - menu.addAction(a); - } - else - { - a = mainwindow->actionByName(KStandardAction::name(KStandardAction::AddBookmark)); - menu.addAction(a); - } - menu.addAction(sendByMailAction); - menu.addAction(inspectAction); - - // SPELL CHECK Actions - if (m_ContextMenuResult.isContentEditable()) - { - menu.addSeparator(); - a = KStandardAction::spelling(this, SLOT(spellCheck()), &menu); - menu.addAction(a); - } - - // finally launch the menu... - menu.exec(mapToGlobal(event->pos())); -} - - -void WebView::mousePressEvent(QMouseEvent *event) -{ - if (m_isViewAutoScrolling) - { - m_verticalAutoScrollSpeed = 0; - m_horizontalAutoScrollSpeed = 0; - m_autoScrollTimer->stop(); - m_isViewAutoScrolling = false; - update(); - return; - } - - QWebHitTestResult result = page()->mainFrame()->hitTestContent(event->pos()); - bool weCanDoMiddleClickActions = !result.isContentEditable() && result.linkUrl().isEmpty(); - - switch (event->button()) - { - case Qt::XButton1: - triggerPageAction(KWebPage::Back); - break; - - case Qt::XButton2: - triggerPageAction(KWebPage::Forward); - break; - - case Qt::MidButton: - switch (ReKonfig::middleClickAction()) - { - case 0: // AutoScroll - if (weCanDoMiddleClickActions - && !m_isViewAutoScrolling - && !page()->currentFrame()->scrollBarGeometry(Qt::Horizontal).contains(event->pos()) - && !page()->currentFrame()->scrollBarGeometry(Qt::Vertical).contains(event->pos())) - { - if (!page()->currentFrame()->scrollBarGeometry(Qt::Horizontal).isNull() - || !page()->currentFrame()->scrollBarGeometry(Qt::Vertical).isNull()) - { - m_clickPos = event->pos(); - m_isViewAutoScrolling = true; - update(); - } - } - break; - - case 1: // Load Clipboard URL - if (weCanDoMiddleClickActions) - { - const QString clipboardContent = rApp->clipboard()->text(); - - if (clipboardContent.isEmpty()) - break; - - if (QUrl::fromUserInput(clipboardContent).isValid()) - loadUrl(clipboardContent, Rekonq::CurrentTab); - else // Search with default Engine - { - KService::Ptr defaultEngine = SearchEngine::defaultEngine(); - if (defaultEngine) // check if a default engine is set - loadUrl(KUrl(SearchEngine::buildQuery(defaultEngine, clipboardContent)), Rekonq::CurrentTab); - } - } - break; - - default: // Do Nothing - break; - } - break; - - default: - break; - }; - - KWebView::mousePressEvent(event); -} - - -void WebView::mouseMoveEvent(QMouseEvent *event) -{ - QPoint mousePos = event->pos(); - - if (m_isViewAutoScrolling) - { - QPoint r = mousePos - m_clickPos; - m_horizontalAutoScrollSpeed = r.x() / 2; // you are too fast.. - m_verticalAutoScrollSpeed = r.y() / 2; - if (!m_autoScrollTimer->isActive()) - m_autoScrollTimer->start(); - - return; - } - - MainWindow *w = rApp->mainWindow(); - if (w->isFullScreen()) - { - if (event->pos().y() >= 0 && event->pos().y() <= 4) - { - w->setWidgetsVisible(true); - } - else - { - if (!w->mainView()->currentUrlBar()->hasFocus()) - w->setWidgetsVisible(false); - } - } - KWebView::mouseMoveEvent(event); -} - - -void WebView::dropEvent(QDropEvent *event) -{ - bool isEditable = page()->frameAt(event->pos())->hitTestContent(event->pos()).isContentEditable(); - if (event->mimeData()->hasFormat(BookmarkManager::bookmark_mime_type())) - { - QByteArray addresses = event->mimeData()->data(BookmarkManager::bookmark_mime_type()); - KBookmark bookmark = rApp->bookmarkManager()->findByAddress(QString::fromLatin1(addresses.data())); - if (bookmark.isGroup()) - { - rApp->bookmarkManager()->openFolderinTabs(bookmark.toGroup()); - } - else - { - emit loadUrl(bookmark.url(), Rekonq::CurrentTab); - } - } - else if (event->mimeData()->hasUrls() && event->source() != this && !isEditable) //dropped links - { - Q_FOREACH(const QUrl & url, event->mimeData()->urls()) - { - emit loadUrl(url, Rekonq::NewFocusedTab); - } - } - else if (event->mimeData()->hasFormat("text/plain") && event->source() != this && !isEditable) //dropped plain text with url format - { - QUrl url = QUrl::fromUserInput(event->mimeData()->data("text/plain")); - - if (url.isValid()) - emit loadUrl(url, Rekonq::NewFocusedTab); - } - else - { - KWebView::dropEvent(event); - } -} - - -void WebView::paintEvent(QPaintEvent* event) -{ - KWebView::paintEvent(event); - - if (m_isViewAutoScrolling) - { - QPoint centeredPoint = m_clickPos; - centeredPoint.setX(centeredPoint.x() - m_autoScrollIndicator.width() / 2); - centeredPoint.setY(centeredPoint.y() - m_autoScrollIndicator.height() / 2); - - QPainter painter(this); - painter.setOpacity(0.8); - painter.drawPixmap(centeredPoint, m_autoScrollIndicator); - } -} - - -void WebView::search() -{ - KAction *a = qobject_cast<KAction*>(sender()); - KService::Ptr engine = KService::serviceByDesktopPath(a->data().toString()); - KUrl urlSearch = KUrl(SearchEngine::buildQuery(engine, selectedText())); - - emit loadUrl(urlSearch, Rekonq::NewTab); -} - - -void WebView::printFrame() -{ - rApp->mainWindow()->printRequested(page()->currentFrame()); -} - - -void WebView::viewImage(Qt::MouseButtons buttons, Qt::KeyboardModifiers modifiers) -{ - KAction *a = qobject_cast<KAction*>(sender()); - KUrl url(a->data().toUrl()); - - if (modifiers & Qt::ControlModifier || buttons == Qt::MidButton) - { - emit loadUrl(url, Rekonq::NewTab); - } - else - { - emit loadUrl(url, Rekonq::CurrentTab); - } -} - - -void WebView::slotCopyImageLocation() -{ - KAction *a = qobject_cast<KAction*>(sender()); - KUrl imageUrl(a->data().toUrl()); -#ifndef QT_NO_MIMECLIPBOARD - // Set it in both the mouse selection and in the clipboard - QMimeData* mimeData = new QMimeData; - imageUrl.populateMimeData(mimeData); - QApplication::clipboard()->setMimeData(mimeData, QClipboard::Clipboard); - mimeData = new QMimeData; - imageUrl.populateMimeData(mimeData); - QApplication::clipboard()->setMimeData(mimeData, QClipboard::Selection); -#else - QApplication::clipboard()->setText(imageUrl.url()); -#endif -} - - -void WebView::openLinkInNewWindow() -{ - KAction *a = qobject_cast<KAction*>(sender()); - KUrl url(a->data().toUrl()); - - emit loadUrl(url, Rekonq::NewWindow); -} - - -void WebView::openLinkInNewTab() -{ - KAction *a = qobject_cast<KAction*>(sender()); - KUrl url(a->data().toUrl()); - - emit loadUrl(url, Rekonq::NewTab); -} - - -void WebView::bookmarkLink() -{ - KAction *a = qobject_cast<KAction*>(sender()); - KUrl url(a->data().toUrl()); - - rApp->bookmarkManager()->rootGroup().addBookmark(url.prettyUrl(), url); - rApp->bookmarkManager()->emitChanged(); -} - -static QVariant execJScript(QWebHitTestResult result, const QString& script) -{ - QWebElement element(result.element()); - if (element.isNull()) - return QVariant(); - return element.evaluateJavaScript(script); -} - -void WebView::spellCheck() -{ - QString text(execJScript(m_ContextMenuResult, QL1S("this.value")).toString()); - - if (m_ContextMenuResult.isContentSelected()) - { - m_spellTextSelectionStart = qMax(0, execJScript(m_ContextMenuResult, QL1S("this.selectionStart")).toInt()); - m_spellTextSelectionEnd = qMax(0, execJScript(m_ContextMenuResult, QL1S("this.selectionEnd")).toInt()); - text = text.mid(m_spellTextSelectionStart, (m_spellTextSelectionEnd - m_spellTextSelectionStart)); - } - else - { - m_spellTextSelectionStart = 0; - m_spellTextSelectionEnd = 0; - } - - if (text.isEmpty()) - { - return; - } - - Sonnet::BackgroundChecker *backgroundSpellCheck = new Sonnet::BackgroundChecker; - Sonnet::Dialog* spellDialog = new Sonnet::Dialog(backgroundSpellCheck, this); - backgroundSpellCheck->setParent(spellDialog); - spellDialog->setAttribute(Qt::WA_DeleteOnClose, true); - - spellDialog->showSpellCheckCompletionMessage(true); - connect(spellDialog, SIGNAL(replace(QString, int, QString)), this, SLOT(spellCheckerCorrected(QString, int, QString))); - connect(spellDialog, SIGNAL(misspelling(QString, int)), this, SLOT(spellCheckerMisspelling(QString, int))); - if (m_ContextMenuResult.isContentSelected()) - connect(spellDialog, SIGNAL(done(QString)), this, SLOT(slotSpellCheckDone(QString))); - spellDialog->setBuffer(text); - spellDialog->show(); -} - -void WebView::spellCheckerCorrected(const QString& original, int pos, const QString& replacement) -{ - // Adjust the selection end... - if (m_spellTextSelectionEnd > 0) - { - m_spellTextSelectionEnd += qMax(0, (replacement.length() - original.length())); - } - - const int index = pos + m_spellTextSelectionStart; - QString script(QL1S("this.value=this.value.substring(0,")); - script += QString::number(index); - script += QL1S(") + \""); - script += replacement; - script += QL1S("\" + this.value.substring("); - script += QString::number(index + original.length()); - script += QL1S(")"); - - //kDebug() << "**** script:" << script; - execJScript(m_ContextMenuResult, script); -} - -void WebView::spellCheckerMisspelling(const QString& text, int pos) -{ - // kDebug() << text << pos; - QString selectionScript(QL1S("this.setSelectionRange(")); - selectionScript += QString::number(pos + m_spellTextSelectionStart); - selectionScript += QL1C(','); - selectionScript += QString::number(pos + text.length() + m_spellTextSelectionStart); - selectionScript += QL1C(')'); - execJScript(m_ContextMenuResult, selectionScript); -} - -void WebView::slotSpellCheckDone(const QString&) -{ - // Restore the text selection if one was present before we started the - // spell check. - if (m_spellTextSelectionStart > 0 || m_spellTextSelectionEnd > 0) - { - QString script(QL1S("; this.setSelectionRange(")); - script += QString::number(m_spellTextSelectionStart); - script += QL1C(','); - script += QString::number(m_spellTextSelectionEnd); - script += QL1C(')'); - execJScript(m_ContextMenuResult, script); - } -} - - -void WebView::keyPressEvent(QKeyEvent *event) -{ - // If CTRL was hit, be prepared for access keys - if (ReKonfig::accessKeysEnabled() - && !m_accessKeysActive - && event->key() == Qt::Key_Control - && !(event->modifiers() & ~Qt::ControlModifier) - ) - { - m_accessKeysPressed = true; - event->accept(); - return; - } - - const QString tagName = page()->mainFrame()->evaluateJavaScript("document.activeElement.tagName").toString(); - - if (event->modifiers() == Qt::ControlModifier) - { - if (event->key() == Qt::Key_C) - { - triggerPageAction(KWebPage::Copy); - event->accept(); - return; - } - - if (event->key() == Qt::Key_A) - { - triggerPageAction(KWebPage::SelectAll); - event->accept(); - return; - } - - // CTRL + RETURN: open link into another tab - if (event->key() == Qt::Key_Return && tagName == QL1S("A")) - { - KUrl u = KUrl(page()->mainFrame()->evaluateJavaScript("document.activeElement.attributes[\"href\"].value").toString()); - emit loadUrl(u, Rekonq::NewTab); - event->accept(); - return; - } - } - - // Auto Scrolling - if (event->modifiers() == Qt::ShiftModifier - && tagName != QL1S("INPUT") - && tagName != QL1S("TEXTAREA") - ) - { - // NOTE and FIXME - // This check is doabled because it presents strange behavior: QtWebKit check works well in pages like gmail - // and fails on sites like g+. The opposite is true for javascript check. - // Please, help me finding the right way to check this EVERY TIME. - bool isContentEditableQW = page()->mainFrame()->hitTestContent(QCursor::pos()).isContentEditable(); - bool isContentEditableJS = page()->mainFrame()->evaluateJavaScript("document.activeElement.isContentEditable").toBool(); - - if (!isContentEditableQW && !isContentEditableJS) - { - if (event->key() == Qt::Key_Up) - { - m_verticalAutoScrollSpeed--; - if (!m_autoScrollTimer->isActive()) - m_autoScrollTimer->start(); - - event->accept(); - return; - } - - if (event->key() == Qt::Key_Down) - { - m_verticalAutoScrollSpeed++; - if (!m_autoScrollTimer->isActive()) - m_autoScrollTimer->start(); - - event->accept(); - return; - } - - if (event->key() == Qt::Key_Right) - { - m_horizontalAutoScrollSpeed++; - if (!m_autoScrollTimer->isActive()) - m_autoScrollTimer->start(); - - event->accept(); - return; - } - - if (event->key() == Qt::Key_Left) - { - m_horizontalAutoScrollSpeed--; - if (!m_autoScrollTimer->isActive()) - m_autoScrollTimer->start(); - - event->accept(); - return; - } - - if (m_autoScrollTimer->isActive()) - { - m_autoScrollTimer->stop(); - event->accept(); - return; - } - else - { - if (m_verticalAutoScrollSpeed || m_horizontalAutoScrollSpeed) - { - m_autoScrollTimer->start(); - event->accept(); - return; - } - } - } - - // if you arrived here, I hope it means SHIFT has been pressed NOT for autoscroll management... - } - - if (ReKonfig::accessKeysEnabled() && m_accessKeysActive) - { - hideAccessKeys(); - event->accept(); - return; - } - - // vi-like navigation - if (ReKonfig::enableViShortcuts()) - { - if (event->modifiers() == Qt::NoModifier - && tagName != QL1S("INPUT") - && tagName != QL1S("TEXTAREA") - ) - { - // See note up! - bool isContentEditableQW = page()->mainFrame()->hitTestContent(QCursor::pos()).isContentEditable(); - bool isContentEditableJS = page()->mainFrame()->evaluateJavaScript("document.activeElement.isContentEditable").toBool(); - - if (!isContentEditableQW && !isContentEditableJS) - { - switch (event->key()) - { - case Qt::Key_J: - event->accept(); - event = new QKeyEvent(QEvent::KeyPress, Qt::Key_Down, Qt::NoModifier); - break; - case Qt::Key_K: - event->accept(); - event = new QKeyEvent(QEvent::KeyPress, Qt::Key_Up, Qt::NoModifier); - break; - case Qt::Key_L: - event->accept(); - event = new QKeyEvent(QEvent::KeyPress, Qt::Key_Right, Qt::NoModifier); - break; - case Qt::Key_H: - event->accept(); - event = new QKeyEvent(QEvent::KeyPress, Qt::Key_Left, Qt::NoModifier); - break; - default: - break; - } - } - } - } - - KWebView::keyPressEvent(event); -} - - -void WebView::keyReleaseEvent(QKeyEvent *event) -{ - // access keys management - if (ReKonfig::accessKeysEnabled()) - { - if (m_accessKeysPressed && event->key() != Qt::Key_Control) - m_accessKeysPressed = false; - - if (m_accessKeysPressed && !(event->modifiers() & Qt::ControlModifier)) - { - kDebug() << "Shotting access keys"; - QTimer::singleShot(200, this, SLOT(accessKeyShortcut())); - event->accept(); - return; - } - else - { - checkForAccessKey(event); - kDebug() << "Hiding access keys"; - hideAccessKeys(); - event->accept(); - return; - } - } - - KWebView::keyReleaseEvent(event); -} - - -void WebView::wheelEvent(QWheelEvent *event) -{ - if (event->orientation() == Qt::Vertical || !ReKonfig::hScrollWheelHistory()) - { - // To let some websites (eg: google maps) to handle wheel events - int prevPos = page()->currentFrame()->scrollPosition().y(); - KWebView::wheelEvent(event); - int newPos = page()->currentFrame()->scrollPosition().y(); - - // Sync with the zoom slider - if (event->modifiers() == Qt::ControlModifier) - { - // Round the factor (Fix slider's end value) - int newFactor = round(zoomFactor() * 10); - emit zoomChanged(newFactor); - } - else if (ReKonfig::smoothScrolling() && prevPos != newPos) - { - page()->currentFrame()->setScrollPosition(QPoint(page()->currentFrame()->scrollPosition().x(), prevPos)); - - if ((event->delta() > 0) != !m_smoothScrollBottomReached) - stopSmoothScrolling(); - - if (event->delta() > 0) - m_smoothScrollBottomReached = false; - else - m_smoothScrollBottomReached = true; - - - setupSmoothScrolling(abs(newPos - prevPos)); - } - } - // use horizontal wheel events to go back and forward in tab history - else - { - // left -> go to previous page - if (event->delta() > 0) - { - emit openPreviousInHistory(); - } - // right -> go to next page - if (event->delta() < 0) - { - emit openNextInHistory(); - } - } -} - - -void WebView::inspect() -{ - QAction *a = rApp->mainWindow()->actionByName("web_inspector"); - if (a && !a->isChecked()) - a->trigger(); - pageAction(QWebPage::InspectElement)->trigger(); -} - - -void WebView::scrollFrameChanged() -{ - // do the scrolling - page()->currentFrame()->scroll(m_horizontalAutoScrollSpeed, m_verticalAutoScrollSpeed); - - // check if we reached the end - int y = page()->currentFrame()->scrollPosition().y(); - if (y == 0 || y == page()->currentFrame()->scrollBarMaximum(Qt::Vertical)) - m_verticalAutoScrollSpeed = 0; - - int x = page()->currentFrame()->scrollPosition().x(); - if (x == 0 || x == page()->currentFrame()->scrollBarMaximum(Qt::Horizontal)) - m_horizontalAutoScrollSpeed = 0; -} - - -void WebView::setupSmoothScrolling(int posY) -{ - int ddy = qMax(m_smoothScrollSteps ? abs(m_dy) / m_smoothScrollSteps : 0, 3); - - m_dy += posY; - - if (m_dy <= 0) - { - stopSmoothScrolling(); - return; - } - - m_smoothScrollSteps = 8; - - if (m_dy / m_smoothScrollSteps < ddy) - { - m_smoothScrollSteps = (abs(m_dy) + ddy - 1) / ddy; - if (m_smoothScrollSteps < 1) - m_smoothScrollSteps = 1; - } - - m_smoothScrollTime.start(); - - if (!m_isViewSmoothScrolling) - { - m_isViewSmoothScrolling = true; - m_smoothScrollTimer->start(); - scrollTick(); - } -} - - -void WebView::scrollTick() -{ - if (m_dy == 0) - { - stopSmoothScrolling(); - return; - } - - if (m_smoothScrollSteps < 1) - m_smoothScrollSteps = 1; - - int takesteps = m_smoothScrollTime.restart() / 16; - int scroll_y = 0; - - if (takesteps < 1) - takesteps = 1; - - if (takesteps > m_smoothScrollSteps) - takesteps = m_smoothScrollSteps; - - for (int i = 0; i < takesteps; i++) - { - int ddy = (m_dy / (m_smoothScrollSteps + 1)) * 2; - - // limit step to requested scrolling distance - if (abs(ddy) > abs(m_dy)) - ddy = m_dy; - - // update remaining scroll - m_dy -= ddy; - scroll_y += ddy; - m_smoothScrollSteps--; - } - - if (m_smoothScrollBottomReached) - page()->currentFrame()->scroll(0, scroll_y); - else - page()->currentFrame()->scroll(0, -scroll_y); -} - - -void WebView::stopSmoothScrolling() -{ - m_smoothScrollTimer->stop(); - m_dy = 0; - m_isViewSmoothScrolling = false; -} - - -void WebView::dragEnterEvent(QDragEnterEvent *event) -{ - if (event->mimeData()->hasUrls() || event->mimeData()->hasText()) - event->acceptProposedAction(); - else - KWebView::dragEnterEvent(event); -} - - -void WebView::dragMoveEvent(QDragMoveEvent *event) -{ - if (event->mimeData()->hasUrls() || event->mimeData()->hasText()) - event->acceptProposedAction(); - else - KWebView::dragMoveEvent(event); -} - - -void WebView::hideAccessKeys() -{ - if (!m_accessKeyLabels.isEmpty()) - { - for (int i = 0; i < m_accessKeyLabels.count(); ++i) - { - QLabel *label = m_accessKeyLabels[i]; - label->hide(); - label->deleteLater(); - } - m_accessKeyLabels.clear(); - m_accessKeyNodes.clear(); - update(); - } -} - - -void WebView::showAccessKeys() -{ - QStringList supportedElement; - supportedElement << QLatin1String("a") - << QLatin1String("input") - << QLatin1String("area") - << QLatin1String("button") - << QLatin1String("label") - << QLatin1String("legend") - << QLatin1String("textarea"); - - QList<QChar> unusedKeys; - for (char c = 'A'; c <= 'Z'; ++c) - unusedKeys << QLatin1Char(c); - for (char c = '0'; c <= '9'; ++c) - unusedKeys << QLatin1Char(c); - - QRect viewport = QRect(page()->mainFrame()->scrollPosition(), page()->viewportSize()); - // Priority first goes to elements with accesskey attributes - QList<QWebElement> alreadyLabeled; - Q_FOREACH(const QString & elementType, supportedElement) - { - QList<QWebElement> result = page()->mainFrame()->findAllElements(elementType).toList(); - Q_FOREACH(const QWebElement & element, result) - { - const QRect geometry = element.geometry(); - if (geometry.size().isEmpty() - || !viewport.contains(geometry.topLeft())) - { - continue; - } - QString accessKeyAttribute = element.attribute(QLatin1String("accesskey")).toUpper(); - if (accessKeyAttribute.isEmpty()) - continue; - QChar accessKey; - for (int i = 0; i < accessKeyAttribute.count(); i += 2) - { - const QChar &possibleAccessKey = accessKeyAttribute[i]; - if (unusedKeys.contains(possibleAccessKey)) - { - accessKey = possibleAccessKey; - break; - } - } - if (accessKey.isNull()) - { - continue; - } - unusedKeys.removeOne(accessKey); - makeAccessKeyLabel(accessKey, element); - alreadyLabeled.append(element); - } - } - - // Pick an access key first from the letters in the text and then from the - // list of unused access keys - Q_FOREACH(const QString & elementType, supportedElement) - { - QWebElementCollection result = page()->mainFrame()->findAllElements(elementType); - Q_FOREACH(const QWebElement & element, result) - { - const QRect geometry = element.geometry(); - if (unusedKeys.isEmpty() - || alreadyLabeled.contains(element) - || geometry.size().isEmpty() - || !viewport.contains(geometry.topLeft())) - { - continue; - } - QChar accessKey; - QString text = element.toPlainText().toUpper(); - for (int i = 0; i < text.count(); ++i) - { - const QChar &c = text.at(i); - if (unusedKeys.contains(c)) - { - accessKey = c; - break; - } - } - if (accessKey.isNull()) - accessKey = unusedKeys.takeFirst(); - unusedKeys.removeOne(accessKey); - makeAccessKeyLabel(accessKey, element); - } - } -} - - -void WebView::makeAccessKeyLabel(const QChar &accessKey, const QWebElement &element) -{ - QLabel *label = new QLabel(this); - label->setText(QString(QLatin1String("<qt><b>%1</b>")).arg(accessKey)); - - label->setAutoFillBackground(true); - label->setFrameStyle(QFrame::Box | QFrame::Plain); - QPoint point = element.geometry().center(); - point -= page()->mainFrame()->scrollPosition(); - label->move(point); - label->show(); - point.setX(point.x() - label->width() / 2); - label->move(point); - m_accessKeyLabels.append(label); - m_accessKeyNodes[accessKey] = element; -} - - -bool WebView::checkForAccessKey(QKeyEvent *event) -{ - if (m_accessKeyLabels.isEmpty()) - return false; - - QString text = event->text(); - if (text.isEmpty()) - return false; - QChar key = text.at(0).toUpper(); - bool handled = false; - if (m_accessKeyNodes.contains(key)) - { - QWebElement element = m_accessKeyNodes[key]; - QPoint p = element.geometry().center(); - QWebFrame *frame = element.webFrame(); - Q_ASSERT(frame); - do - { - p -= frame->scrollPosition(); - frame = frame->parentFrame(); - } - while (frame && frame != page()->mainFrame()); - QMouseEvent pevent(QEvent::MouseButtonPress, p, Qt::LeftButton, 0, 0); - rApp->sendEvent(this, &pevent); - QMouseEvent revent(QEvent::MouseButtonRelease, p, Qt::LeftButton, 0, 0); - rApp->sendEvent(this, &revent); - handled = true; - } - - kDebug() << "checking for access keys: " << handled; - return handled; -} - - -void WebView::accessKeyShortcut() -{ - if (!hasFocus() - || !m_accessKeysPressed - || !ReKonfig::accessKeysEnabled()) - return; - if (m_accessKeyLabels.isEmpty()) - { - showAccessKeys(); - } - else - { - hideAccessKeys(); - } - m_accessKeysPressed = false; -} - - -void WebView::sendByMail() -{ - KAction *a = qobject_cast<KAction*>(sender()); - QString url = a->data().toString(); - - KToolInvocation::invokeMailer("", "", "", "", url); -} - - -void WebView::blockImage() -{ - QAction *action = qobject_cast<QAction*>(sender()); - if (!action) - return; - - QString imageUrl = action->data().toString(); - rApp->adblockManager()->addCustomRule(imageUrl); -} - - -void WebView::mouseReleaseEvent(QMouseEvent *event) -{ - QWebHitTestResult hitTest = page()->mainFrame()->hitTestContent(event->pos()); - const QUrl url = hitTest.linkUrl(); - - if (!url.isEmpty()) - { - if (event->button() & Qt::MidButton) - { - if (event->modifiers() & Qt::ShiftModifier) - { - if (ReKonfig::openNewTabsInBackground()) - emit loadUrl(url, Rekonq::NewFocusedTab); - else - emit loadUrl(url, Rekonq::NewBackGroundTab); - event->accept(); - return; - } - - emit loadUrl(url, Rekonq::NewTab); - event->accept(); - return; - } - - if ((event->button() & Qt::LeftButton) && (event->modifiers() & Qt::ControlModifier)) - { - emit loadUrl(url, Rekonq::NewTab); - event->accept(); - return; - } - - if ((event->button() & Qt::LeftButton) && (event->modifiers() & Qt::ShiftModifier)) - { - page()->downloadUrl(url); - event->accept(); - return; - } - } - - QWebView::mouseReleaseEvent(event); -} diff --git a/src/webview.h b/src/webview.h deleted file mode 100644 index 8cf16817..00000000 --- a/src/webview.h +++ /dev/null @@ -1,171 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2008-2012 by Andrea Diamantini <adjam7 at gmail dot com> -* Copyright (C) 2009-2011 by Lionel Chauvin <megabigbug@yahoo.fr> -* -* -* 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 WEBVIEW_H -#define WEBVIEW_H - - -// Rekonq Includes -#include "rekonq_defines.h" - -// KDE Includes -#include <KWebView> - -// Qt Includes -#include <QTime> -#include <QPoint> -#include <QPixmap> -#include <QWebHitTestResult> - -// Forward Declarations -class WebPage; - -class QLabel; -class QTimer; - - -class REKONQ_TESTS_EXPORT WebView : public KWebView -{ - Q_OBJECT - -public: - - enum ContextType - { - EmptySelection = 0x00000000, - LinkSelection = 0x00000001, - ImageSelection = 0x00000010, - TextSelection = 0x00000100 - }; - - explicit WebView(QWidget *parent); - ~WebView(); - - WebPage *page(); - - void load(const QUrl &url); - void load(const QNetworkRequest &req, - QNetworkAccessManager::Operation op = QNetworkAccessManager::GetOperation, - const QByteArray & body = QByteArray()); - -protected: - bool popupSpellMenu(QContextMenuEvent *event); - void contextMenuEvent(QContextMenuEvent *event); - - void mouseMoveEvent(QMouseEvent *event); - void mousePressEvent(QMouseEvent *event); - void mouseReleaseEvent(QMouseEvent *event); - - void keyPressEvent(QKeyEvent *event); - void keyReleaseEvent(QKeyEvent *event); - - void wheelEvent(QWheelEvent *event); - - void dropEvent(QDropEvent *event); - void dragEnterEvent(QDragEnterEvent *event); - void dragMoveEvent(QDragMoveEvent * event); - - void paintEvent(QPaintEvent *event); - -private Q_SLOTS: - void search(); - - void printFrame(); - - void openLinkInNewWindow(); - void openLinkInNewTab(); - void bookmarkLink(); - void spellCheck(); - void spellCheckerCorrected(const QString& original, int pos, const QString& replacement); - void spellCheckerMisspelling(const QString& text, int pos); - void slotSpellCheckDone(const QString&); - void sendByMail(); - - void viewImage(Qt::MouseButtons buttons, Qt::KeyboardModifiers modifiers); - void slotCopyImageLocation(); - void inspect(); - - void scrollFrameChanged(); - void scrollTick(); - - void setupSmoothScrolling(int posY); - - void stopSmoothScrolling(); - void changeWindowIcon(); - - void accessKeyShortcut(); - void hideAccessKeys(); - - void loadStarted(); - - void blockImage(); - - -Q_SIGNALS: - void loadUrl(const KUrl &, const Rekonq::OpenType &); - void zoomChanged(int); - void openPreviousInHistory(); - void openNextInHistory(); - -private: - bool checkForAccessKey(QKeyEvent *event); - void showAccessKeys(); - void makeAccessKeyLabel(const QChar &accessKey, const QWebElement &element); - -private: - WebPage *m_page; - QPoint m_clickPos; - QWebHitTestResult m_ContextMenuResult; - - // Spell Checking - int m_spellTextSelectionStart; - int m_spellTextSelectionEnd; - - - // Auto Scroll - QTimer *const m_autoScrollTimer; - int m_verticalAutoScrollSpeed; - int m_horizontalAutoScrollSpeed; - bool m_isViewAutoScrolling; - QPixmap m_autoScrollIndicator; - - // Smooth Scroll - QTimer *const m_smoothScrollTimer; - QTime m_smoothScrollTime; - bool m_smoothScrollBottomReached; - int m_dy; - int m_smoothScrollSteps; - bool m_isViewSmoothScrolling; - - // Access Keys - QList<QLabel*> m_accessKeyLabels; - QHash<QChar, QWebElement> m_accessKeyNodes; - bool m_accessKeysPressed; - bool m_accessKeysActive; -}; - -#endif diff --git a/src/zoombar.cpp b/src/zoombar.cpp deleted file mode 100644 index 2cf30617..00000000 --- a/src/zoombar.cpp +++ /dev/null @@ -1,210 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2008-2011 by Andrea Diamantini <adjam7 at gmail dot com> -* Copyright (C) 2009-2011 by Lionel Chauvin <megabigbug@yahoo.fr> -* -* -* 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 "zoombar.h" -#include "zoombar.moc" - -// local includes -#include "application.h" -#include "mainview.h" -#include "mainwindow.h" -#include "webtab.h" - -// KDE Includes -#include <KAction> -#include <KIcon> -#include <KLocalizedString> -#include <KStandardAction> -#include <KConfig> -#include <KConfigGroup> - -// Qt Includes -#include <QHBoxLayout> -#include <QLabel> -#include <QSlider> -#include <QToolButton> - - -ZoomBar::ZoomBar(QWidget *parent) - : QWidget(parent) - , m_zoomIn(new QToolButton(this)) - , m_zoomOut(new QToolButton(this)) - , m_zoomNormal(new QToolButton(this)) - , m_zoomSlider(new QSlider(Qt::Horizontal, this)) -{ - QHBoxLayout *layout = new QHBoxLayout; - - // cosmetic - layout->setContentsMargins(2, 0, 2, 0); - - QToolButton *hideButton = new QToolButton(this); - hideButton->setAutoRaise(true); - hideButton->setIcon(KIcon("dialog-close")); - connect(hideButton, SIGNAL(clicked()), this, SLOT(hide())); - - layout->addWidget(hideButton); - layout->setAlignment(hideButton, Qt::AlignLeft | Qt::AlignTop); - - // label - QLabel *label = new QLabel(i18n("Zoom:")); - layout->addWidget(label); - - //Show the current zoom percentage of the page - m_percentage = new QLabel(i18nc("percentage of the website zoom", "100%"), this); - - m_zoomSlider->setTracking(true); - m_zoomSlider->setRange(1, 19); // divide by 10 to obtain a qreal for zoomFactor() - m_zoomSlider->setValue(10); - m_zoomSlider->setPageStep(3); - connect(m_zoomSlider, SIGNAL(valueChanged(int)), this, SLOT(setValue(int))); - - m_zoomIn->setAutoRaise(true); - m_zoomOut->setAutoRaise(true); - m_zoomNormal->setAutoRaise(true); - - layout->addWidget(m_zoomOut); - layout->addWidget(m_zoomSlider, 8); - layout->addWidget(m_zoomIn); - layout->addWidget(m_zoomNormal); - layout->addWidget(m_percentage, 5); - - layout->addStretch(); - - setLayout(layout); - - // we start off hidden - hide(); -} - - -void ZoomBar::setupActions(MainWindow *window) -{ - KAction *a; - a = window->actionCollection()->addAction(KStandardAction::ZoomIn, this, SLOT(zoomIn())); - a = window->actionCollection()->addAction(KStandardAction::ZoomOut, this, SLOT(zoomOut())); - a = window->actionCollection()->addAction(KStandardAction::ActualSize, this, SLOT(zoomNormal())); - a->setShortcut(KShortcut(Qt::CTRL | Qt::Key_0)); - a = window->actionCollection()->addAction(KStandardAction::Zoom, this, SLOT(toggleVisibility())); - a->setIcon(KIcon("page-zoom")); - a->setShortcut(KShortcut(Qt::CTRL | Qt::Key_Y)); - - m_zoomIn->setDefaultAction(window->actionByName(KStandardAction::name(KStandardAction::ZoomIn))); - m_zoomOut->setDefaultAction(window->actionByName(KStandardAction::name(KStandardAction::ZoomOut))); - m_zoomNormal->setDefaultAction(window->actionByName(KStandardAction::name(KStandardAction::ActualSize))); -} - - -void ZoomBar::show() -{ - // show findbar if not visible - if (isHidden()) - { - emit visibilityChanged(true); - QWidget::show(); - m_zoomSlider->setValue(rApp->mainWindow()->currentTab()->view()->zoomFactor() * 10); - } -} - - -void ZoomBar::hide() -{ - emit visibilityChanged(false); - QWidget::hide(); -} - - -void ZoomBar::zoomIn() -{ - setValue(m_zoomSlider->value() + 1); -} - - -void ZoomBar::zoomOut() -{ - setValue(m_zoomSlider->value() - 1); -} - - -void ZoomBar::zoomNormal() -{ - setValue(10); -} - - -void ZoomBar::updateSlider(int webview) -{ - WebTab *tab = 0; - MainView *mainView = static_cast<MainView *>(sender()); - - if (mainView) - tab = mainView->webTab(webview); - - if (!tab) - return; - - m_zoomSlider->setValue(tab->view()->zoomFactor() * 10); - connect(tab->view(), SIGNAL(zoomChanged(int)), this, SLOT(setValue(int))); -} - - -void ZoomBar::setValue(int value) -{ - int boundedValue = value; - - // Don't exceed the slider min/max value - if (value < 1) - { - boundedValue = 1; - } - else if (value > 19) - { - boundedValue = 19; - } - - m_zoomSlider->setValue(boundedValue); - m_percentage->setText(i18nc("percentage of the website zoom", "%1%", QString::number(boundedValue * 10))); - - WebTab *tab = rApp->mainWindow()->currentTab(); - saveZoomValue(tab->url().host(), boundedValue); - tab->view()->setZoomFactor(QVariant(boundedValue).toReal() / 10); // Don't allox max +1 values -} - - -void ZoomBar::toggleVisibility() -{ - isVisible() ? hide() : show(); -} - - -void ZoomBar::saveZoomValue(const QString &host, int value) -{ - KSharedConfig::Ptr config = KGlobal::config(); - KConfigGroup group(config, "Zoom"); - group.writeEntry(host, QString::number(value)); - config->sync(); -} diff --git a/src/zoombar.h b/src/zoombar.h deleted file mode 100644 index e1ec1ced..00000000 --- a/src/zoombar.h +++ /dev/null @@ -1,79 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2008-2011 by Andrea Diamantini <adjam7 at gmail dot com> -* Copyright (C) 2009-2011 by Lionel Chauvin <megabigbug@yahoo.fr> -* -* -* 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 ZOOMBAR_H -#define ZOOMBAR_H - - -// Rekonq Includes -#include "rekonq_defines.h" - -// Qt Includes -#include <QWidget> - -// Forward Declarations -class MainWindow; - -class QLabel; -class QSlider; -class QToolButton; - - -class REKONQ_TESTS_EXPORT ZoomBar : public QWidget -{ - Q_OBJECT - -public: - ZoomBar(QWidget *parent); - -public Q_SLOTS: - void show(); - void hide(); - - void zoomIn(); - void zoomOut(); - void zoomNormal(); - void setupActions(MainWindow *window); - void updateSlider(int webview); - void setValue(int value); - void toggleVisibility(); - -private: - void saveZoomValue(const QString &, int); - -Q_SIGNALS: - void visibilityChanged(bool); - -private: - QToolButton *m_zoomIn; - QToolButton *m_zoomOut; - QToolButton *m_zoomNormal; - QSlider *m_zoomSlider; - QLabel *m_percentage; -}; - -#endif |