summaryrefslogtreecommitdiffstats
path: root/src/core/api/qwebenginehistory.h
blob: fd54e62a5554c1215d25e2d33fcc6ba17d793fa8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
// Copyright (C) 2021 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only

#ifndef QWEBENGINEHISTORY_H
#define QWEBENGINEHISTORY_H

#include <QtWebEngineCore/qtwebenginecoreglobal.h>
#include <QtCore/qabstractitemmodel.h>
#include <QtCore/qurl.h>
#include <QtCore/qstring.h>
#include <QtCore/qdatetime.h>
#include <QtCore/qshareddata.h>

QT_BEGIN_NAMESPACE

class QWebEngineHistory;
class QWebEngineHistoryPrivate;
class QWebEngineHistoryItemPrivate;
class QWebEngineHistoryModelPrivate;
class QWebEnginePagePrivate;
class QQuickWebEngineViewPrivate;

class Q_WEBENGINECORE_EXPORT QWebEngineHistoryItem
{
public:
    QWebEngineHistoryItem(const QWebEngineHistoryItem &other);
    QWebEngineHistoryItem(QWebEngineHistoryItem &&other);
    QWebEngineHistoryItem &operator=(const QWebEngineHistoryItem &other);
    QWebEngineHistoryItem &operator=(QWebEngineHistoryItem &&other);
    ~QWebEngineHistoryItem();

    QUrl originalUrl() const;
    QUrl url() const;

    QString title() const;
    QDateTime lastVisited() const;
    QUrl iconUrl() const;

    bool isValid() const;

    void swap(QWebEngineHistoryItem &other) noexcept { d.swap(other.d); }

private:
    QWebEngineHistoryItem(QWebEngineHistoryItemPrivate *priv);
    Q_DECLARE_PRIVATE_D(d.data(), QWebEngineHistoryItem)
    QExplicitlySharedDataPointer<QWebEngineHistoryItemPrivate> d;
    friend class QWebEngineHistory;
    friend class QWebEngineHistoryPrivate;
};

Q_DECLARE_SHARED(QWebEngineHistoryItem)

class Q_WEBENGINECORE_EXPORT QWebEngineHistoryModel : public QAbstractListModel
{
    Q_OBJECT

public:
    enum Roles {
        UrlRole = Qt::UserRole,
        TitleRole,
        OffsetRole,
        IconUrlRole,
    };

    int rowCount(const QModelIndex &parent = QModelIndex()) const override;
    QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
    QHash<int, QByteArray> roleNames() const override;
    void reset();

private:
    QWebEngineHistoryModel(QWebEngineHistoryModelPrivate *);
    virtual ~QWebEngineHistoryModel();

    Q_DISABLE_COPY(QWebEngineHistoryModel)
    Q_DECLARE_PRIVATE(QWebEngineHistoryModel)
    QScopedPointer<QWebEngineHistoryModelPrivate> d_ptr;

    friend class QWebEngineHistory;
    friend class QWebEngineHistoryPrivate;
    friend void QScopedPointerDeleter<QWebEngineHistoryModel>::cleanup(QWebEngineHistoryModel *) noexcept;
};

class Q_WEBENGINECORE_EXPORT QWebEngineHistory : public QObject
{
    Q_OBJECT
    Q_PROPERTY(QWebEngineHistoryModel *items READ itemsModel CONSTANT FINAL)
    Q_PROPERTY(QWebEngineHistoryModel *backItems READ backItemsModel CONSTANT FINAL)
    Q_PROPERTY(QWebEngineHistoryModel *forwardItems READ forwardItemsModel CONSTANT FINAL)

public:
    Q_REVISION(1) Q_INVOKABLE void clear();

    QList<QWebEngineHistoryItem> items() const;
    QList<QWebEngineHistoryItem> backItems(int maxItems) const;
    QList<QWebEngineHistoryItem> forwardItems(int maxItems) const;

    bool canGoBack() const;
    bool canGoForward() const;

    void back();
    void forward();
    void goToItem(const QWebEngineHistoryItem &item);

    QWebEngineHistoryItem backItem() const;
    QWebEngineHistoryItem currentItem() const;
    QWebEngineHistoryItem forwardItem() const;
    QWebEngineHistoryItem itemAt(int i) const;

    int currentItemIndex() const;

    int count() const;

    QWebEngineHistoryModel *itemsModel() const;
    QWebEngineHistoryModel *backItemsModel() const;
    QWebEngineHistoryModel *forwardItemsModel() const;

private:
    QWebEngineHistory(QWebEngineHistoryPrivate *d);
    ~QWebEngineHistory();

    Q_DISABLE_COPY(QWebEngineHistory)
    Q_DECLARE_PRIVATE(QWebEngineHistory)
    QScopedPointer<QWebEngineHistoryPrivate> d_ptr;

    void reset();

    friend Q_WEBENGINECORE_EXPORT QDataStream &operator>>(QDataStream &, QWebEngineHistory &);
    friend Q_WEBENGINECORE_EXPORT QDataStream &operator<<(QDataStream &, const QWebEngineHistory &);
    friend class QWebEnginePagePrivate;
    friend class QQuickWebEngineViewPrivate;
    friend void QScopedPointerDeleter<QWebEngineHistory>::cleanup(QWebEngineHistory *) noexcept;
};

QT_END_NAMESPACE

#endif // QWEBENGINEHISTORY_H