diff options
Diffstat (limited to 'src/webtab.cpp')
-rw-r--r-- | src/webtab.cpp | 179 |
1 files changed, 128 insertions, 51 deletions
diff --git a/src/webtab.cpp b/src/webtab.cpp index b1f2cdfc..e03fb72f 100644 --- a/src/webtab.cpp +++ b/src/webtab.cpp @@ -2,8 +2,8 @@ * * This file is a part of the rekonq project * -* Copyright (C) 2008-2009 by Andrea Diamantini <adjam7 at gmail dot com> -* Copyright (C) 2009 by Lionel Chauvin <megabigbug@yahoo.fr> +* Copyright (C) 2008-2010 by Andrea Diamantini <adjam7 at gmail dot com> +* Copyright (C) 2009-2010 by Lionel Chauvin <megabigbug@yahoo.fr> * * * This program is free software; you can redistribute it and/or @@ -11,9 +11,9 @@ * 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 +* 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 @@ -39,6 +39,8 @@ #include "webpage.h" #include "bookmarksmanager.h" #include "walletbar.h" +#include "previewselectorbar.h" +#include "rsswidget.h" // KDE Includes #include <KService> @@ -48,73 +50,94 @@ #include <KActionMenu> #include <KWebView> #include <kwebwallet.h> +#include <KDE/KMessageBox> // Qt Includes -#include <QContextMenuEvent> -#include <QWheelEvent> -#include <QMouseEvent> -#include <QClipboard> -#include <QKeyEvent> -#include <QAction> -#include <QVBoxLayout> - - -WebTab::WebTab(QWidget* parent) - : QWidget(parent) - , m_view( new WebView(this) ) - , m_progress(0) +#include <QtGui/QContextMenuEvent> +#include <QtGui/QWheelEvent> +#include <QtGui/QMouseEvent> +#include <QtGui/QClipboard> +#include <QtGui/QKeyEvent> +#include <QtGui/QVBoxLayout> + + +WebTab::WebTab(QWidget *parent) + : QWidget(parent) + , m_progress(0) { - QVBoxLayout* l = new QVBoxLayout(this); + QVBoxLayout *l = new QVBoxLayout(this); l->setMargin(0); l->setSpacing(0); - QWidget* messageBar = new QWidget(this); + QWidget *messageBar = new QWidget(this); l->addWidget(messageBar); - messageBar->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Minimum); + messageBar->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Minimum); - QVBoxLayout* l2 = new QVBoxLayout(messageBar); + QVBoxLayout *l2 = new QVBoxLayout(messageBar); l2->setMargin(0); l2->setSpacing(0); - l->addWidget(m_view); - m_view->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding); - - KWebWallet *wallet = page()->wallet(); - - if(wallet) + WebView *view = new WebView(this); + l->addWidget(view); + view->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); + + // fix focus handling + setFocusProxy(view); + + KWebWallet *wallet = view->page()->wallet(); + + if (wallet) { connect(wallet, SIGNAL(saveFormDataRequested(const QString &, const QUrl &)), this, SLOT(createWalletBar(const QString &, const QUrl &))); } - connect(page(), SIGNAL(statusBarMessage(const QString&)), this, SLOT(setStatusBarText(const QString&))); - - connect(m_view, SIGNAL(loadProgress(int)), this, SLOT(updateProgress(int))); - connect(m_view, SIGNAL(loadFinished(bool)), this, SLOT(loadFinished(bool))); + connect(view, SIGNAL(loadProgress(int)), this, SLOT(updateProgress(int))); + connect(view, SIGNAL(loadFinished(bool)), this, SLOT(loadFinished(bool))); } WebTab::~WebTab() { - delete m_view; } WebView *WebTab::view() { - return m_view; + WebView *view = qobject_cast<WebView *>(layout()->itemAt(1)->widget()); + return view; } WebPage *WebTab::page() { - return m_view->page(); // FIXME + return view()->page(); } -KUrl WebTab::url() const -{ - return KUrl(m_view->url()); +// TODO: +// Import the "about" check and the one in protocolhandler +// in some (static?) methods in NewTabPage +KUrl WebTab::url() +{ + KUrl u = KUrl(view()->url()); + if (u.scheme() == QL1S("about")) + { + QWebElement rootElement = page()->mainFrame()->documentElement(); + if (rootElement.document().findAll("#rekonq-newtabpage").count() == 0) + return u; + if (rootElement.findAll(".favorites").count() > 0) + return KUrl("about:favorites"); + if (rootElement.findAll(".closedTabs").count() > 0) + return KUrl("about:closedTabs"); + if (rootElement.findAll(".history").count() > 0) + return KUrl("about:history"); + if (rootElement.findAll(".bookmarks").count() > 0) + return KUrl("about:bookmarks"); + if (rootElement.findAll(".downloads").count() > 0) + return KUrl("about:downloads"); + } + return u; } @@ -124,18 +147,6 @@ int WebTab::progress() } -QString WebTab::lastStatusBarText() const -{ - return m_statusBarText; -} - - -void WebTab::setStatusBarText(const QString &string) -{ - m_statusBarText = string; -} - - void WebTab::updateProgress(int p) { m_progress = p; @@ -149,12 +160,18 @@ void WebTab::loadFinished(bool) 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(); QWidget *messageBar = layout()->itemAt(0)->widget(); WalletBar *walletBar = new WalletBar(messageBar); - walletBar->onSaveFormData(key,url); + walletBar->onSaveFormData(key, url); messageBar->layout()->addWidget(walletBar); connect(walletBar, SIGNAL(saveFormDataAccepted(const QString &)), @@ -162,3 +179,63 @@ void WebTab::createWalletBar(const QString &key, const QUrl &url) connect(walletBar, SIGNAL(saveFormDataRejected(const QString &)), wallet, SLOT(rejectSaveFormDataRequest(const QString &))); } + + +void WebTab::createPreviewSelectorBar(int index) +{ + QWidget *messageBar = layout()->itemAt(0)->widget(); + PreviewSelectorBar *bar = new PreviewSelectorBar(index, messageBar); + messageBar->layout()->addWidget(bar); + + connect(page(), SIGNAL(loadStarted()), bar, SLOT(loadProgress())); + connect(page(), SIGNAL(loadProgress(int)), bar, SLOT(loadProgress())); + connect(page(), SIGNAL(loadFinished(bool)), bar, SLOT(loadFinished())); + connect(page()->mainFrame(), SIGNAL(urlChanged(QUrl)), bar, SLOT(verifyUrl())); +} + + +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(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; + int i = 0; + foreach(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); + + i++; + } + + RSSWidget *widget = new RSSWidget(map, window()); + widget->showAt(pos); +} |