Implement more functions for the Qt build
[WebKit-https.git] / WebKitQt / Api / qwebpagehistory.h
index 0fa6adbb44a8dfb12fe908dd715b4bda0848db04..0d722ef8c54c05b07f27e3b9f12b8112066be0a9 100644 (file)
@@ -1,3 +1,24 @@
+/*
+    Copyright (C) 2007 Trolltech ASA
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Library General Public
+    License as published by the Free Software Foundation; either
+    version 2 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Library General Public License for more details.
+
+    You should have received a copy of the GNU Library General Public License
+    along with this library; see the file COPYING.LIB.  If not, write to
+    the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+    Boston, MA 02111-1307, USA.
+
+    This class provides all functionality needed for loading images, style sheets and html
+    pages from the web. It has a memory cache for these objects.
+*/
 #ifndef QWEBPAGEHISTORY_H
 #define QWEBPAGEHISTORY_H
 
@@ -7,6 +28,66 @@
 #include <QDateTime>
 #include <QSharedData>
 
+#if QT_VERSION < 0x040300
+template <class T> class QExplicitlySharedDataPointer
+{
+public:
+    typedef T Type;
+
+    inline T &operator*() { return *d; }
+    inline const T &operator*() const { return *d; }
+    inline T *operator->() { return d; }
+    inline const T *operator->() const { return d; }
+    inline operator T *() { return d; }
+    inline operator const T *() const { return d; }
+    inline T *data() { return d; }
+    inline const T *data() const { return d; }
+    inline const T *constData() const { return d; }
+
+    //inline operator bool () const { return d != 0; }
+
+    inline bool operator==(const QExplicitlySharedDataPointer<T> &other) const { return d == other.d; }
+    inline bool operator!=(const QExplicitlySharedDataPointer<T> &other) const { return d != other.d; }
+    inline bool operator==(const T *ptr) const { return d == ptr; }
+    inline bool operator!=(const T *ptr) const { return d != ptr; }
+
+    inline QExplicitlySharedDataPointer() { d = 0; }
+    inline ~QExplicitlySharedDataPointer() { if (d && !d->ref.deref()) delete d; }
+
+    explicit QExplicitlySharedDataPointer(T *data);
+    inline QExplicitlySharedDataPointer(const QExplicitlySharedDataPointer<T> &o) : d(o.d) { if (d) d->ref.ref(); }
+    inline QExplicitlySharedDataPointer<T> & operator=(const QExplicitlySharedDataPointer<T> &o) {
+        if (o.d != d) {
+            T *x = o.d;
+            if (x) x->ref.ref();
+            x = qAtomicSetPtr(&d, x);
+            if (x && !x->ref.deref())
+                delete x;
+        }
+        return *this;
+    }
+    inline QExplicitlySharedDataPointer &operator=(T *o) {
+        if (o != d) {
+            T *x = o;
+            if (x) x->ref.ref();
+            x = qAtomicSetPtr(&d, x);
+            if (x && !x->ref.deref())
+                delete x;
+        }
+        return *this;
+    }
+
+    inline bool operator!() const { return !d; }
+
+private:
+
+    T *d;
+};
+template <class T>
+Q_INLINE_TEMPLATE QExplicitlySharedDataPointer<T>::QExplicitlySharedDataPointer(T *adata) : d(adata)
+{ if (d) d->ref.ref(); }
+#endif
+
 class QWebPage;
 
 class QWebHistoryItemPrivate;
@@ -44,6 +125,9 @@ public:
     QList<QWebHistoryItem> backItems(int maxItems) const;
     QList<QWebHistoryItem> forwardItems(int maxItems) const;
 
+    bool canGoBack() const;
+    bool canGoForward() const;
+
     void goBack();
     void goForward();
     void goToItem(QWebHistoryItem *item);