File indexing completed on 2024-04-28 12:31:08

0001 /*
0002     SPDX-FileCopyrightText: 2009 Dawit Alemayehu <adawit@kde.org>
0003 
0004     SPDX-License-Identifier: LGPL-2.1-or-later
0005 */
0006 
0007 #ifndef WEBKITPART_EXT_H
0008 #define WEBKITPART_EXT_H
0009 
0010 #include <QPointer>
0011 
0012 #include <KParts/BrowserExtension>
0013 #include <KParts/TextExtension>
0014 #include <KParts/HtmlExtension>
0015 #include <KParts/HtmlSettingsInterface>
0016 #include <KParts/SelectorInterface>
0017 #include <KParts/ScriptableExtension>
0018 
0019 class QUrl;
0020 class KWebKitPart;
0021 class WebView;
0022 class KSaveFile;
0023 class QWebFrame;
0024 
0025 class WebKitBrowserExtension : public KParts::BrowserExtension
0026 {
0027     Q_OBJECT
0028 
0029 public:
0030     WebKitBrowserExtension(KWebKitPart *parent, const QByteArray& cachedHistoryData);
0031     ~WebKitBrowserExtension() override;
0032 
0033     int xOffset() override;
0034     int yOffset() override;
0035     void saveState(QDataStream &) override;
0036     void restoreState(QDataStream &) override;
0037     void saveHistory();
0038 
0039 Q_SIGNALS:
0040     void saveUrl(const QUrl &);
0041     void saveHistory(QObject*, const QByteArray&);
0042 
0043 public Q_SLOTS:
0044     void cut();
0045     void copy();
0046     void paste();
0047     void print();
0048 
0049     void slotSaveDocument();
0050     void slotSaveFrame();
0051     void searchProvider();
0052     void reparseConfiguration();
0053     void disableScrolling();
0054 
0055     void zoomIn();
0056     void zoomOut();
0057     void zoomNormal();
0058     void toogleZoomTextOnly();
0059     void toogleZoomToDPI();
0060     void slotSelectAll();
0061 
0062     void slotFrameInWindow();
0063     void slotFrameInTab();
0064     void slotFrameInTop();
0065     void slotReloadFrame();
0066     void slotBlockIFrame();
0067 
0068     void slotSaveImageAs();
0069     void slotSendImage();
0070     void slotCopyImageURL();
0071     void slotCopyImage();
0072     void slotViewImage();
0073     void slotBlockImage();
0074     void slotBlockHost();
0075 
0076     void slotCopyLinkURL();
0077     void slotCopyLinkText();
0078     void slotSaveLinkAs();
0079     void slotCopyEmailAddress();
0080 
0081     void slotViewDocumentSource();
0082     void slotViewFrameSource();
0083 
0084     void updateEditActions();
0085     void updateActions();
0086 
0087     void slotPlayMedia();
0088     void slotMuteMedia();
0089     void slotLoopMedia();
0090     void slotShowMediaControls();
0091     void slotSaveMedia();
0092     void slotCopyMedia();
0093     void slotTextDirectionChanged();
0094     void slotCheckSpelling();
0095     void slotSpellCheckSelection();
0096     void slotSpellCheckDone(const QString&);
0097     void spellCheckerCorrected(const QString&, int, const QString&);
0098     void spellCheckerMisspelling(const QString&, int);
0099     void slotPrintRequested(QWebFrame*);
0100     void slotPrintPreview();
0101 
0102     void slotOpenSelection();
0103     void slotLinkInTop();
0104 
0105 private:
0106     WebView* view();
0107     QPointer<KWebKitPart> m_part;
0108     QPointer<WebView> m_view;
0109     quint32 m_spellTextSelectionStart;
0110     quint32 m_spellTextSelectionEnd;
0111     QByteArray m_historyData;
0112 };
0113 
0114 /**
0115  * @internal
0116  * Implements the TextExtension interface
0117  */
0118 class KWebKitTextExtension : public KParts::TextExtension
0119 {
0120     Q_OBJECT
0121 public:
0122     explicit KWebKitTextExtension(KWebKitPart* part);
0123 
0124     bool hasSelection() const override;
0125     QString selectedText(Format format) const override;
0126     QString completeText(Format format) const override;
0127 
0128 private:
0129     KWebKitPart* part() const;
0130 };
0131 
0132 /**
0133  * @internal
0134  * Implements the HtmlExtension interface
0135  */
0136 class KWebKitHtmlExtension : public KParts::HtmlExtension,
0137                              public KParts::SelectorInterface,
0138                              public KParts::HtmlSettingsInterface
0139 {
0140     Q_OBJECT
0141     Q_INTERFACES(KParts::SelectorInterface)
0142     Q_INTERFACES(KParts::HtmlSettingsInterface)
0143 
0144 public:
0145     explicit KWebKitHtmlExtension(KWebKitPart* part);
0146 
0147     // HtmlExtension
0148     QUrl baseUrl() const override;
0149     bool hasSelection() const override;
0150 
0151     // SelectorInterface
0152     QueryMethods supportedQueryMethods() const override;
0153     Element querySelector(const QString& query, KParts::SelectorInterface::QueryMethod method) const override;
0154     QList<Element> querySelectorAll(const QString& query, KParts::SelectorInterface::QueryMethod method) const override;
0155 
0156     // HtmlSettingsInterface
0157     QVariant htmlSettingsProperty(HtmlSettingsType type) const override;
0158     bool setHtmlSettingsProperty(HtmlSettingsType type, const QVariant& value) override;
0159 
0160 private:
0161     KWebKitPart* part() const;
0162 };
0163 
0164 class KWebKitScriptableExtension : public KParts::ScriptableExtension
0165 {
0166   Q_OBJECT
0167 
0168 public:
0169     explicit KWebKitScriptableExtension(KWebKitPart* part);
0170 
0171     QVariant rootObject() override;
0172 
0173     QVariant get(ScriptableExtension* callerPrincipal, quint64 objId, const QString& propName) override;
0174 
0175     bool put(ScriptableExtension* callerPrincipal, quint64 objId, const QString& propName, const QVariant& value) override;
0176 
0177     bool setException(ScriptableExtension* callerPrincipal, const QString& message) override;
0178 
0179     QVariant evaluateScript(ScriptableExtension* callerPrincipal,
0180                                     quint64 contextObjectId,
0181                                     const QString& code,
0182                                     ScriptLanguage language = ECMAScript) override;
0183 
0184     bool isScriptLanguageSupported(ScriptLanguage lang) const override;
0185 
0186 private:
0187      QVariant encloserForKid(KParts::ScriptableExtension* kid) override;
0188      KWebKitPart* part();
0189 };
0190 
0191 #endif // WEBKITPART_EXT_H