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