File indexing completed on 2024-04-28 04:58:28
0001 /* This file is part of the KDE project 0002 SPDX-FileCopyrightText: 2003 George Staikos <staikos@kde.org> 0003 0004 SPDX-License-Identifier: LGPL-2.0-only 0005 */ 0006 0007 #ifndef web_module_h 0008 #define web_module_h 0009 0010 #include <assert.h> 0011 #include <khtml_part.h> 0012 #include <kiconloader.h> 0013 #include <klocale.h> 0014 #include <konqsidebarplugin.h> 0015 #include <kmenu.h> 0016 #include <QObject> 0017 0018 // A wrapper for KHTMLPart to make it behave the way we want it to. 0019 class KHTMLSideBar : public KHTMLPart 0020 { 0021 Q_OBJECT 0022 public: 0023 KHTMLSideBar(); 0024 virtual ~KHTMLSideBar() {} 0025 0026 Q_SIGNALS: 0027 void submitFormRequest(const char *, const QString &, const QByteArray &, const QString &, const QString &, const QString &); 0028 void openUrlRequest(const QString &url, 0029 const KParts::OpenUrlArguments &args = KParts::OpenUrlArguments(), 0030 const BrowserArguments &browserArgs = BrowserArguments()); 0031 void openUrlNewWindow(const QString &url, 0032 const KParts::OpenUrlArguments &args = KParts::OpenUrlArguments(), 0033 const BrowserArguments &browserArgs = BrowserArguments(), 0034 const KParts::WindowArgs &windowArgs = KParts::WindowArgs()); 0035 void reload(); 0036 void setAutoReload(); 0037 0038 protected: 0039 virtual bool urlSelected(const QString &url, int button, 0040 int state, const QString &_target, 0041 const KParts::OpenUrlArguments &args = KParts::OpenUrlArguments(), 0042 const BrowserArguments &browserArgs = BrowserArguments()); 0043 0044 protected Q_SLOTS: 0045 void loadPage() 0046 { 0047 emit openUrlRequest(completeURL(_lastUrl).url()); 0048 } 0049 0050 void loadNewWindow() 0051 { 0052 emit openUrlNewWindow(completeURL(_lastUrl).url()); 0053 } 0054 0055 void showMenu(const QString &url, const QPoint &pos) 0056 { 0057 if (url.isEmpty()) { 0058 _menu->popup(pos); 0059 } else { 0060 _lastUrl = url; 0061 _linkMenu->popup(pos); 0062 } 0063 } 0064 0065 void formProxy(const char *action, 0066 const QString &url, 0067 const QByteArray &formData, 0068 const QString &target, 0069 const QString &contentType, 0070 const QString &boundary) 0071 { 0072 QString t = target.toLower(); 0073 QString u; 0074 0075 if (QString(action).toLower() != "post") { 0076 // GET 0077 QUrl kurl = completeURL(url); 0078 kurl.setQuery(formData.data()); 0079 u = kurl.url(); 0080 } else { 0081 u = completeURL(url).url(); 0082 } 0083 0084 // Some sites seem to use empty targets to send to the 0085 // main frame. 0086 if (t == "_content") { 0087 emit submitFormRequest(action, u, formData, 0088 target, contentType, boundary); 0089 } else if (t.isEmpty() || t == "_self") { 0090 setFormNotification(KHTMLPart::NoNotification); 0091 submitFormProxy(action, u, formData, target, 0092 contentType, boundary); 0093 setFormNotification(KHTMLPart::Only); 0094 } 0095 } 0096 private: 0097 KMenu *_menu, *_linkMenu; 0098 QString _lastUrl; 0099 }; 0100 0101 class KonqSideBarWebModule : public KonqSidebarModule 0102 { 0103 Q_OBJECT 0104 public: 0105 KonqSideBarWebModule(QWidget *parent, const KConfigGroup &configGroup); 0106 virtual ~KonqSideBarWebModule(); 0107 0108 virtual QWidget *getWidget(); 0109 0110 Q_SIGNALS: 0111 // TODO move to base class 0112 void submitFormRequest(const char *, const QString &, const QByteArray &, const QString &, const QString &, const QString &); 0113 protected: 0114 virtual void handleURL(const QUrl &url); 0115 0116 private Q_SLOTS: 0117 void urlClicked(const QString &url, const KParts::OpenUrlArguments &args, const BrowserArguments &browserArgs); 0118 void formClicked(const QUrl &url, const KParts::OpenUrlArguments &args, const BrowserArguments &browserArgs); 0119 void urlNewWindow(const QString &url, const KParts::OpenUrlArguments &args, const BrowserArguments &browserArgs, const KParts::WindowArgs &windowArgs = KParts::WindowArgs()); 0120 void pageLoaded(); 0121 void loadFavicon(); 0122 void setTitle(const QString &); 0123 void setAutoReload(); 0124 void reload(); 0125 0126 private: 0127 KHTMLSideBar *_htmlPart; 0128 QUrl _url; 0129 int reloadTimeout; 0130 }; 0131 0132 #endif 0133