You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tdebase/konqueror/sidebar/web_module/web_module.h

203 lines
5.8 KiB

/* This file is part of the KDE project
Copyright (C) 2003 George Staikos <staikos@kde.org>
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License version 2 as published by the Free Software Foundation.
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 web_module_h
#define web_module_h
#include <assert.h>
#include <khtml_part.h>
#include <kiconloader.h>
#include <klocale.h>
#include <konqsidebarplugin.h>
#include <kpopupmenu.h>
#include <qobject.h>
// A wrapper for KHTMLPart to make it behave the way we want it to.
class KHTMLSideBar : public KHTMLPart
{
Q_OBJECT
public:
KHTMLSideBar(bool universal) : KHTMLPart() {
setStatusMessagesEnabled(false);
setMetaRefreshEnabled(true);
setJavaEnabled(false);
setPluginsEnabled(false);
setFormNotification(KHTMLPart::Only);
connect(this,
SIGNAL(formSubmitNotification(const char*,const QString&,const QByteArray&,const QString&,const QString&,const QString&)),
this,
SLOT(formProxy(const char*,const QString&,const QByteArray&,const QString&,const QString&,const QString&))
);
_linkMenu = new KPopupMenu(widget(),
"link context menu");
if (!universal) {
_linkMenu->insertItem(i18n("&Open Link"),
this, SLOT(loadPage()));
_linkMenu->insertItem(i18n("Open in New &Window"),
this, SLOT(loadNewWindow()));
} else {
_linkMenu->insertItem(i18n("Open in New &Window"),
this, SLOT(loadPage()));
}
_menu = new KPopupMenu(widget(), "context menu");
_menu->insertItem(SmallIcon("reload"), i18n("&Reload"),
this, SIGNAL(reload()));
_menu->insertItem(SmallIcon("reload"), i18n("Set &Automatic Reload"), this, SIGNAL(setAutoReload()));
connect(this,
SIGNAL(popupMenu(const QString&,const QPoint&)),
this,
SLOT(showMenu(const QString&, const QPoint&)));
}
virtual ~KHTMLSideBar() {}
signals:
void submitFormRequest(const char*,const QString&,const QByteArray&,const QString&,const QString&,const QString&);
void openURLRequest(const QString& url, KParts::URLArgs args);
void openURLNewWindow(const QString& url, KParts::URLArgs args);
void reload();
void setAutoReload();
protected:
virtual void urlSelected( const QString &url, int button,
int state, const QString &_target,
KParts::URLArgs args = KParts::URLArgs()) {
if (button == LeftButton ){
if (_target.lower() == "_self") {
openURL(url);
} else if (_target.lower() == "_blank") {
emit openURLNewWindow(completeURL(url).url(), args);
} else { // isEmpty goes here too
emit openURLRequest(completeURL(url).url(), args);
}
return;
}
if (button == MidButton) {
emit openURLNewWindow(completeURL(url).url(),
args);
return;
}
// A refresh
if (button == 0 && _target.lower() == "_self") {
openURL(completeURL(url));
return;
}
KHTMLPart::urlSelected(url,button,state,_target,args);
}
protected slots:
void loadPage() {
emit openURLRequest(completeURL(_lastUrl).url(),
KParts::URLArgs());
}
void loadNewWindow() {
emit openURLNewWindow(completeURL(_lastUrl).url(),
KParts::URLArgs());
}
void showMenu(const QString& url, const QPoint& pos) {
if (url.isEmpty()) {
_menu->popup(pos);
} else {
_lastUrl = url;
_linkMenu->popup(pos);
}
}
void formProxy(const char *action,
const QString& url,
const QByteArray& formData,
const QString& target,
const QString& contentType,
const QString& boundary) {
QString t = target.lower();
QString u;
if (QCString(action).lower() != "post") {
// GET
KURL kurl = completeURL(url);
kurl.setQuery(formData.data());
u = kurl.url();
} else {
u = completeURL(url).url();
}
// Some sites seem to use empty targets to send to the
// main frame.
if (t == "_content") {
emit submitFormRequest(action, u, formData,
target, contentType, boundary);
} else if (t.isEmpty() || t == "_self") {
setFormNotification(KHTMLPart::NoNotification);
submitFormProxy(action, u, formData, target,
contentType, boundary);
setFormNotification(KHTMLPart::Only);
}
}
private:
KPopupMenu *_menu, *_linkMenu;
QString _lastUrl;
};
class KonqSideBarWebModule : public KonqSidebarPlugin
{
Q_OBJECT
public:
KonqSideBarWebModule(KInstance *instance, QObject *parent,
QWidget *widgetParent, QString &desktopName,
const char *name);
virtual ~KonqSideBarWebModule();
virtual QWidget *getWidget();
virtual void *provides(const QString &);
signals:
void submitFormRequest(const char*,const QString&,const QByteArray&,const QString&,const QString&,const QString&);
void openURLRequest(const KURL &url, const KParts::URLArgs &args);
void createNewWindow(const KURL &url, const KParts::URLArgs &args);
protected:
virtual void handleURL(const KURL &url);
private slots:
void urlClicked(const QString& url, KParts::URLArgs args);
void formClicked(const KURL& url, const KParts::URLArgs& args);
void urlNewWindow(const QString& url, KParts::URLArgs args);
void pageLoaded();
void loadFavicon();
void setTitle(const QString&);
void setAutoReload();
void reload();
private:
KHTMLSideBar *_htmlPart;
KURL _url;
int reloadTimeout;
QString _desktopName;
};
#endif