qwkpage.h   [plain text]


#ifndef qwkpage_h
#define qwkpage_h

#include "qwebkitglobal.h"
#include <QAction>
#include <QMenu>
#include <QObject>
#include <QPoint>
#include <QRect>
#include <QSize>
#include <QUrl>
#include <WebKit2/WKBase.h>
#include <WebKit2/WKPage.h>

class QCursor;
class QGraphicsItem;
class QWKContext;
class QWKGraphicsWidget;
class QWKPreferences;
class QWKPagePrivate;
class QtViewportAttributesPrivate;
class QWKHistory;

class QWEBKIT_EXPORT QWKPage : public QObject {
    Q_OBJECT
    Q_PROPERTY(QString title READ title)
    Q_PROPERTY(QUrl url READ url WRITE setUrl)

public:
    enum WebAction {
        NoWebAction = - 1,

        OpenLink,
        OpenLinkInNewWindow,
        CopyLinkToClipboard,
        OpenImageInNewWindow,

        Back,
        Forward,
        Stop,
        Reload,

        Cut,
        Copy,
        Paste,
        SelectAll,

        WebActionCount
    };

    class QWEBKIT_EXPORT ViewportAttributes {
    public:
        ViewportAttributes();
        ViewportAttributes(const QWKPage::ViewportAttributes& other);

        ~ViewportAttributes();

        QWKPage::ViewportAttributes& operator=(const QWKPage::ViewportAttributes& other);

        inline qreal initialScaleFactor() const { return m_initialScaleFactor; };
        inline qreal minimumScaleFactor() const { return m_minimumScaleFactor; };
        inline qreal maximumScaleFactor() const { return m_maximumScaleFactor; };
        inline qreal devicePixelRatio() const { return m_devicePixelRatio; };
        inline bool isUserScalable() const { return m_isUserScalable; };
        inline bool isValid() const { return m_isValid; };
        inline QSize size() const { return m_size; };

    private:
        QSharedDataPointer<QtViewportAttributesPrivate> d;
        qreal m_initialScaleFactor;
        qreal m_minimumScaleFactor;
        qreal m_maximumScaleFactor;
        qreal m_devicePixelRatio;
        bool m_isUserScalable;
        bool m_isValid;
        QSize m_size;

        friend class QWKPage;
    };

    QWKPage(QWKContext*);
    virtual ~QWKPage();

    WKPageRef pageRef() const;

    QWKPreferences* preferences() const;

    void load(const QUrl& url);
    void setUrl(const QUrl& url);
    QUrl url() const;

    QString title() const;

    void setViewportSize(const QSize&);
    ViewportAttributes viewportAttributesForSize(const QSize& availableSize) const;

    void setActualVisibleContentsRect(const QRect& rect) const;

    void setResizesToContentsUsingLayoutSize(const QSize& targetLayoutSize);

    QAction* action(WebAction action) const;
    void triggerAction(WebAction action, bool checked = false);

    typedef QWKPage* (*CreateNewPageFn)(QWKPage*);
    void setCreateNewPageFunction(CreateNewPageFn function);

    void setCustomUserAgent(const QString&);
    QString customUserAgent() const;

    qreal textZoomFactor() const;
    qreal pageZoomFactor() const;
    void setTextZoomFactor(qreal zoomFactor);
    void setPageZoomFactor(qreal zoomFactor);
    void setPageAndTextZoomFactors(qreal pageZoomFactor, qreal textZoomFactor);

    QWKHistory* history() const;
    QWKContext* context() const;

    void findZoomableAreaForPoint(const QPoint&);

    bool isConnectedToEngine() const;

public:
    Q_SIGNAL void statusBarMessage(const QString&);
    Q_SIGNAL void toolTipChanged(const QString&);
    Q_SIGNAL void titleChanged(const QString&);
    Q_SIGNAL void loadStarted();
    Q_SIGNAL void loadFinished(bool ok);
    Q_SIGNAL void loadProgress(int progress);
    Q_SIGNAL void initialLayoutCompleted();
    Q_SIGNAL void urlChanged(const QUrl&);
    Q_SIGNAL void contentsSizeChanged(const QSize&);
    Q_SIGNAL void scrollRequested(int dx, int dy);
    Q_SIGNAL void cursorChanged(const QCursor&);
    Q_SIGNAL void viewportChangeRequested();
    Q_SIGNAL void windowCloseRequested();
    Q_SIGNAL void zoomableAreaFound(const QRect&);
    Q_SIGNAL void focusNextPrevChild(bool);
    Q_SIGNAL void showContextMenu(QSharedPointer<QMenu>);
    Q_SIGNAL void engineConnectionChanged(bool connected);

protected:
    void timerEvent(QTimerEvent*);

private:
    QWKPage(QWKContext*, WKPageGroupRef);
    void init();
#ifndef QT_NO_ACTION
    Q_PRIVATE_SLOT(d, void _q_webActionTriggered(bool checked));
#endif
    QWKPagePrivate* d;

    friend class QGraphicsWKView;
    friend class QGraphicsWKViewPrivate;
    friend class QWKPagePrivate;
};

#endif /* qwkpage_h */