File indexing completed on 2024-04-21 04:42:39

0001 /*
0002     SPDX-FileCopyrightText: 2007 Trolltech ASA
0003     SPDX-FileCopyrightText: 2008 Urs Wolfer <uwolfer@kde.org>
0004     SPDX-FileCopyrightText: 2008 Laurent Montel <montel@kde.org>
0005     SPDX-FileCopyrightText: 2009 Dawit Alemayehu <adawit@kde.org>
0006 
0007     SPDX-License-Identifier: LGPL-2.1-or-later
0008 */
0009 
0010 #ifndef WEBVIEW_H
0011 #define WEBVIEW_H
0012 
0013 #include <QPointer>
0014 #include <KParts/BrowserExtension>
0015 #include <QWebFrame>
0016 #include <KWebView>
0017 
0018 class QUrl;
0019 class KWebKitPart;
0020 class QWebInspector;
0021 class QLabel;
0022 
0023 class WebView : public KWebView
0024 {
0025     Q_OBJECT
0026 public:
0027     WebView(KWebKitPart* part, QWidget* parent);
0028     ~WebView() override;
0029 
0030     /**
0031      * Same as QWebPage::load, but with KParts style arguments instead.
0032      *
0033      * @see KParts::OpenUrlArguments, KParts::BrowserArguments.
0034      *
0035      * @param url     the url to load.
0036      * @param args    reference to a OpenUrlArguments object.
0037      * @param bargs   reference to a BrowserArguments object.
0038      */
0039     void loadUrl(const QUrl& url, const KParts::OpenUrlArguments& args, const KParts::BrowserArguments& bargs);
0040 
0041     QWebHitTestResult contextMenuResult() const;
0042 
0043 protected:
0044     /**
0045      * Reimplemented for internal reasons, the API is not affected.
0046      *
0047      * @see QWidget::contextMenuEvent
0048      * @internal
0049      */
0050     void contextMenuEvent(QContextMenuEvent*) override;
0051 
0052     /**
0053      * Reimplemented for internal reasons, the API is not affected.
0054      *
0055      * @see QWidget::keyPressEvent
0056      * @internal
0057      */
0058     void keyPressEvent(QKeyEvent*) override;
0059 
0060     /**
0061      * Reimplemented for internal reasons, the API is not affected.
0062      *
0063      * @see QWidget::keyReleaseEvent
0064      * @internal
0065      */
0066     void keyReleaseEvent(QKeyEvent*) override;
0067 
0068     /**
0069      * Reimplemented for internal reasons, the API is not affected.
0070      *
0071      * @see QWidget::mouseReleaseEvent
0072      * @internal
0073      */
0074     void mouseReleaseEvent(QMouseEvent*) override;
0075 
0076     /**
0077      * Reimplemented for internal reasons, the API is not affected.
0078      *
0079      * @see QObject::timerEvent
0080      * @internal
0081      */
0082     void timerEvent(QTimerEvent*) override;
0083 
0084     /**
0085      * Reimplemented for internal reasons, the API is not affected.
0086      *
0087      * @see QWidget::wheelEvent
0088      * @internal
0089      */
0090     void wheelEvent(QWheelEvent*) override;
0091 
0092 private Q_SLOTS:
0093     void slotStopAutoScroll();
0094     void hideAccessKeys();
0095 
0096 private:
0097     void editableContentActionPopupMenu(KParts::BrowserExtension::ActionGroupMap&);
0098     void selectActionPopupMenu(KParts::BrowserExtension::ActionGroupMap&);
0099     void linkActionPopupMenu(KParts::BrowserExtension::ActionGroupMap&);
0100     void partActionPopupMenu(KParts::BrowserExtension::ActionGroupMap &);
0101     void multimediaActionPopupMenu(KParts::BrowserExtension::ActionGroupMap&);
0102     void addSearchActions(QList<QAction*>& selectActions, QWebView*);
0103 
0104     void showAccessKeys();
0105     bool checkForAccessKey(QKeyEvent *event);
0106     void makeAccessKeyLabel(const QChar &accessKey, const QWebElement &element);
0107 
0108     KActionCollection* m_actionCollection;
0109     QWebHitTestResult m_result;
0110     QPointer<KWebKitPart> m_part;
0111     QWebInspector* m_webInspector;
0112 
0113     qint32 m_autoScrollTimerId;
0114     qint32 m_verticalAutoScrollSpeed;
0115     qint32 m_horizontalAutoScrollSpeed;
0116 
0117     enum AccessKeyState {
0118         NotActivated,
0119         PreActivated,
0120         Activated
0121     };
0122     AccessKeyState m_accessKeyActivated;
0123     QList<QLabel*> m_accessKeyLabels;
0124     QHash<QChar, QWebElement> m_accessKeyNodes;
0125     QHash<QString, QChar> m_duplicateLinkElements;
0126 };
0127 
0128 #endif // WEBVIEW_H