10bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch/* 20bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies) 30bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 40bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch This library is free software; you can redistribute it and/or 50bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch modify it under the terms of the GNU Library General Public 60bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch License as published by the Free Software Foundation; either 70bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch version 2 of the License, or (at your option) any later version. 80bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 90bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch This library is distributed in the hope that it will be useful, 100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch but WITHOUT ANY WARRANTY; without even the implied warranty of 110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch Library General Public License for more details. 130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch You should have received a copy of the GNU Library General Public License 150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch along with this library; see the file COPYING.LIB. If not, write to 160bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch Boston, MA 02110-1301, USA. 180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch*/ 190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#ifndef QWEBELEMENT_H 210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#define QWEBELEMENT_H 220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 23dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include <QtCore/qstring.h> 24dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include <QtCore/qstringlist.h> 25dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include <QtCore/qrect.h> 26dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include <QtCore/qvariant.h> 27dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include <QtCore/qshareddata.h> 280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "qwebkitglobal.h" 300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochnamespace WebCore { 310bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch class Element; 320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch class Node; 330bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 340bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 3568513a70bcd92384395513322f1b801e7bf9c729Steve Block 3668513a70bcd92384395513322f1b801e7bf9c729Steve Block#if defined(WTF_USE_V8) && WTF_USE_V8 3768513a70bcd92384395513322f1b801e7bf9c729Steve Blocknamespace V8 { 3868513a70bcd92384395513322f1b801e7bf9c729Steve Block namespace Bindings { 39692e5dbf12901edacf14812a6fae25462920af42Steve Block class QtWebElementRuntime; 4068513a70bcd92384395513322f1b801e7bf9c729Steve Block } 41692e5dbf12901edacf14812a6fae25462920af42Steve Block} 4268513a70bcd92384395513322f1b801e7bf9c729Steve Block#else 4368513a70bcd92384395513322f1b801e7bf9c729Steve Blocknamespace JSC { 4468513a70bcd92384395513322f1b801e7bf9c729Steve Block namespace Bindings { 4568513a70bcd92384395513322f1b801e7bf9c729Steve Block class QtWebElementRuntime; 4668513a70bcd92384395513322f1b801e7bf9c729Steve Block } 47692e5dbf12901edacf14812a6fae25462920af42Steve Block} 4868513a70bcd92384395513322f1b801e7bf9c729Steve Block#endif 49692e5dbf12901edacf14812a6fae25462920af42Steve Block 50cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve BlockQT_BEGIN_NAMESPACE 51cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Blockclass QPainter; 52cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve BlockQT_END_NAMESPACE 53cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochclass QWebFrame; 55cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Blockclass QWebElementCollection; 560bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochclass QWebElementPrivate; 570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochclass QWEBKIT_EXPORT QWebElement { 590bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochpublic: 600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch QWebElement(); 610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch QWebElement(const QWebElement&); 620bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch QWebElement &operator=(const QWebElement&); 630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch ~QWebElement(); 640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 650bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch bool operator==(const QWebElement& o) const; 660bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch bool operator!=(const QWebElement& o) const; 670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch bool isNull() const; 690bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 70cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block QWebElementCollection findAll(const QString &selectorQuery) const; 71cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block QWebElement findFirst(const QString &selectorQuery) const; 720bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 730bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch void setPlainText(const QString& text); 740bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch QString toPlainText() const; 750bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch void setOuterXml(const QString& markup); 770bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch QString toOuterXml() const; 780bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 790bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch void setInnerXml(const QString& markup); 800bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch QString toInnerXml() const; 810bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 820bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch void setAttribute(const QString& name, const QString& value); 830bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch void setAttributeNS(const QString& namespaceUri, const QString& name, const QString& value); 840bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch QString attribute(const QString& name, const QString& defaultValue = QString()) const; 850bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch QString attributeNS(const QString& namespaceUri, const QString& name, const QString& defaultValue = QString()) const; 860bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch bool hasAttribute(const QString& name) const; 870bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch bool hasAttributeNS(const QString& namespaceUri, const QString& name) const; 880bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch void removeAttribute(const QString& name); 890bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch void removeAttributeNS(const QString& namespaceUri, const QString& name); 900bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch bool hasAttributes() const; 91643ca7872b450ea4efacab6188849e5aac2ba161Steve Block QStringList attributeNames(const QString& namespaceUri = QString()) const; 920bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 930bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch QStringList classes() const; 940bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch bool hasClass(const QString& name) const; 950bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch void addClass(const QString& name); 960bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch void removeClass(const QString& name); 970bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch void toggleClass(const QString& name); 980bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 99231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block bool hasFocus() const; 100231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block void setFocus(); 101231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 1020bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch QRect geometry() const; 1030bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 1040bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch QString tagName() const; 1050bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch QString prefix() const; 1060bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch QString localName() const; 1070bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch QString namespaceUri() const; 1080bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 1090bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch QWebElement parent() const; 1100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch QWebElement firstChild() const; 1110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch QWebElement lastChild() const; 1120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch QWebElement nextSibling() const; 1130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch QWebElement previousSibling() const; 1140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch QWebElement document() const; 1150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch QWebFrame *webFrame() const; 1160bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 117cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block // TODO: Add QWebElementCollection overloads 1180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch // docs need example snippet 1190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch void appendInside(const QString& markup); 1200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch void appendInside(const QWebElement& element); 1210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 1220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch // docs need example snippet 1230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch void prependInside(const QString& markup); 1240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch void prependInside(const QWebElement& element); 1250bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 1260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch // docs need example snippet 1270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch void appendOutside(const QString& markup); 1280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch void appendOutside(const QWebElement& element); 1290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 1300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch // docs need example snippet 1310bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch void prependOutside(const QString& markup); 1320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch void prependOutside(const QWebElement& element); 1330bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 1340bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch // docs need example snippet 1350bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch void encloseContentsWith(const QWebElement& element); 1360bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch void encloseContentsWith(const QString& markup); 1370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch void encloseWith(const QString& markup); 1380bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch void encloseWith(const QWebElement& element); 1390bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 1400bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch void replace(const QString& markup); 1410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch void replace(const QWebElement& element); 1420bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 1430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch QWebElement clone() const; 1440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch QWebElement& takeFromDocument(); 1450bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch void removeFromDocument(); 146cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block void removeAllChildren(); 1470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 148231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block QVariant evaluateJavaScript(const QString& scriptSource); 1490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 150231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block enum StyleResolveStrategy { 151231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block InlineStyle, 152231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block CascadedStyle, 153231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block ComputedStyle, 154231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block }; 155231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block QString styleProperty(const QString& name, StyleResolveStrategy strategy) const; 156231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block void setStyleProperty(const QString& name, const QString& value); 1570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 158cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block void render(QPainter* painter); 15981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch void render(QPainter* painter, const QRect& clipRect); 160cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 1610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochprivate: 1620bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch explicit QWebElement(WebCore::Element*); 1630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch explicit QWebElement(WebCore::Node*); 1640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 165231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block static QWebElement enclosingElement(WebCore::Node*); 166231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 167dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block friend class DumpRenderTreeSupportQt; 1680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch friend class QWebFrame; 169cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block friend class QWebElementCollection; 1700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch friend class QWebHitTestResult; 1710bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch friend class QWebHitTestResultPrivate; 172231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block friend class QWebPage; 17368513a70bcd92384395513322f1b801e7bf9c729Steve Block 17468513a70bcd92384395513322f1b801e7bf9c729Steve Block#if defined(WTF_USE_V8) && WTF_USE_V8 17568513a70bcd92384395513322f1b801e7bf9c729Steve Block friend class V8::Bindings::QtWebElementRuntime; 17668513a70bcd92384395513322f1b801e7bf9c729Steve Block#else 177692e5dbf12901edacf14812a6fae25462920af42Steve Block friend class JSC::Bindings::QtWebElementRuntime; 17868513a70bcd92384395513322f1b801e7bf9c729Steve Block#endif 1790bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 1800bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch QWebElementPrivate* d; 1810bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch WebCore::Element* m_element; 1820bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}; 1830bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 184cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Blockclass QWebElementCollectionPrivate; 185cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 186cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Blockclass QWEBKIT_EXPORT QWebElementCollection 187cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block{ 188cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Blockpublic: 189cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block QWebElementCollection(); 190cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block QWebElementCollection(const QWebElement &contextElement, const QString &query); 191cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block QWebElementCollection(const QWebElementCollection &); 192cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block QWebElementCollection &operator=(const QWebElementCollection &); 193cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block ~QWebElementCollection(); 194cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 195cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block QWebElementCollection operator+(const QWebElementCollection &other) const; 196cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block inline QWebElementCollection &operator+=(const QWebElementCollection &other) 197cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block { 198cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block append(other); return *this; 199cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block } 200cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 201cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block void append(const QWebElementCollection &collection); 202cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 203cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block int count() const; 204cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block QWebElement at(int i) const; 205643ca7872b450ea4efacab6188849e5aac2ba161Steve Block inline QWebElement operator[](int i) const { return at(i); } 206cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 207cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block inline QWebElement first() const { return at(0); } 208cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block inline QWebElement last() const { return at(count() - 1); } 209cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 210cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block QList<QWebElement> toList() const; 211cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 212cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block class const_iterator { 213cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block public: 214643ca7872b450ea4efacab6188849e5aac2ba161Steve Block inline const_iterator(const QWebElementCollection* collection, int index) : i(index), collection(collection) {} 215643ca7872b450ea4efacab6188849e5aac2ba161Steve Block inline const_iterator(const const_iterator& o) : i(o.i), collection(o.collection) {} 216cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 217643ca7872b450ea4efacab6188849e5aac2ba161Steve Block inline const QWebElement operator*() const { return collection->at(i); } 218cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 219643ca7872b450ea4efacab6188849e5aac2ba161Steve Block inline bool operator==(const const_iterator& o) const { return i == o.i && collection == o.collection; } 220643ca7872b450ea4efacab6188849e5aac2ba161Steve Block inline bool operator!=(const const_iterator& o) const { return i != o.i || collection != o.collection; } 221cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block inline bool operator<(const const_iterator& o) const { return i < o.i; } 222cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block inline bool operator<=(const const_iterator& o) const { return i <= o.i; } 223cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block inline bool operator>(const const_iterator& o) const { return i > o.i; } 224cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block inline bool operator>=(const const_iterator& o) const { return i >= o.i; } 225cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 226643ca7872b450ea4efacab6188849e5aac2ba161Steve Block inline const_iterator& operator++() { ++i; return *this; } 227643ca7872b450ea4efacab6188849e5aac2ba161Steve Block inline const_iterator operator++(int) { const_iterator n(collection, i); ++i; return n; } 228643ca7872b450ea4efacab6188849e5aac2ba161Steve Block inline const_iterator& operator--() { i--; return *this; } 229643ca7872b450ea4efacab6188849e5aac2ba161Steve Block inline const_iterator operator--(int) { const_iterator n(collection, i); i--; return n; } 230643ca7872b450ea4efacab6188849e5aac2ba161Steve Block inline const_iterator& operator+=(int j) { i += j; return *this; } 231643ca7872b450ea4efacab6188849e5aac2ba161Steve Block inline const_iterator& operator-=(int j) { i -= j; return *this; } 232643ca7872b450ea4efacab6188849e5aac2ba161Steve Block inline const_iterator operator+(int j) const { return const_iterator(collection, i + j); } 233643ca7872b450ea4efacab6188849e5aac2ba161Steve Block inline const_iterator operator-(int j) const { return const_iterator(collection, i - j); } 234cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block inline int operator-(const_iterator j) const { return i - j.i; } 235cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block private: 236643ca7872b450ea4efacab6188849e5aac2ba161Steve Block int i; 237643ca7872b450ea4efacab6188849e5aac2ba161Steve Block const QWebElementCollection* const collection; 238cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block }; 239cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block friend class const_iterator; 240cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 241643ca7872b450ea4efacab6188849e5aac2ba161Steve Block inline const_iterator begin() const { return constBegin(); } 242643ca7872b450ea4efacab6188849e5aac2ba161Steve Block inline const_iterator end() const { return constEnd(); } 243643ca7872b450ea4efacab6188849e5aac2ba161Steve Block inline const_iterator constBegin() const { return const_iterator(this, 0); } 244643ca7872b450ea4efacab6188849e5aac2ba161Steve Block inline const_iterator constEnd() const { return const_iterator(this, count()); }; 245643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 246643ca7872b450ea4efacab6188849e5aac2ba161Steve Block class iterator { 247643ca7872b450ea4efacab6188849e5aac2ba161Steve Block public: 248643ca7872b450ea4efacab6188849e5aac2ba161Steve Block inline iterator(const QWebElementCollection* collection, int index) : i(index), collection(collection) {} 249643ca7872b450ea4efacab6188849e5aac2ba161Steve Block inline iterator(const iterator& o) : i(o.i), collection(o.collection) {} 250643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 251643ca7872b450ea4efacab6188849e5aac2ba161Steve Block inline QWebElement operator*() const { return collection->at(i); } 252643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 253643ca7872b450ea4efacab6188849e5aac2ba161Steve Block inline bool operator==(const iterator& o) const { return i == o.i && collection == o.collection; } 254643ca7872b450ea4efacab6188849e5aac2ba161Steve Block inline bool operator!=(const iterator& o) const { return i != o.i || collection != o.collection; } 255643ca7872b450ea4efacab6188849e5aac2ba161Steve Block inline bool operator<(const iterator& o) const { return i < o.i; } 256643ca7872b450ea4efacab6188849e5aac2ba161Steve Block inline bool operator<=(const iterator& o) const { return i <= o.i; } 257643ca7872b450ea4efacab6188849e5aac2ba161Steve Block inline bool operator>(const iterator& o) const { return i > o.i; } 258643ca7872b450ea4efacab6188849e5aac2ba161Steve Block inline bool operator>=(const iterator& o) const { return i >= o.i; } 259643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 260643ca7872b450ea4efacab6188849e5aac2ba161Steve Block inline iterator& operator++() { ++i; return *this; } 261643ca7872b450ea4efacab6188849e5aac2ba161Steve Block inline iterator operator++(int) { iterator n(collection, i); ++i; return n; } 262643ca7872b450ea4efacab6188849e5aac2ba161Steve Block inline iterator& operator--() { i--; return *this; } 263643ca7872b450ea4efacab6188849e5aac2ba161Steve Block inline iterator operator--(int) { iterator n(collection, i); i--; return n; } 264643ca7872b450ea4efacab6188849e5aac2ba161Steve Block inline iterator& operator+=(int j) { i += j; return *this; } 265643ca7872b450ea4efacab6188849e5aac2ba161Steve Block inline iterator& operator-=(int j) { i -= j; return *this; } 266643ca7872b450ea4efacab6188849e5aac2ba161Steve Block inline iterator operator+(int j) const { return iterator(collection, i + j); } 267643ca7872b450ea4efacab6188849e5aac2ba161Steve Block inline iterator operator-(int j) const { return iterator(collection, i - j); } 268643ca7872b450ea4efacab6188849e5aac2ba161Steve Block inline int operator-(iterator j) const { return i - j.i; } 269643ca7872b450ea4efacab6188849e5aac2ba161Steve Block private: 270643ca7872b450ea4efacab6188849e5aac2ba161Steve Block int i; 271643ca7872b450ea4efacab6188849e5aac2ba161Steve Block const QWebElementCollection* const collection; 272643ca7872b450ea4efacab6188849e5aac2ba161Steve Block }; 273643ca7872b450ea4efacab6188849e5aac2ba161Steve Block friend class iterator; 274cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 275643ca7872b450ea4efacab6188849e5aac2ba161Steve Block inline iterator begin() { return iterator(this, 0); } 276643ca7872b450ea4efacab6188849e5aac2ba161Steve Block inline iterator end() { return iterator(this, count()); } 277cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Blockprivate: 278cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block QExplicitlySharedDataPointer<QWebElementCollectionPrivate> d; 279cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block}; 280cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 281692e5dbf12901edacf14812a6fae25462920af42Steve BlockQ_DECLARE_METATYPE(QWebElement) 282692e5dbf12901edacf14812a6fae25462920af42Steve Block 2830bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#endif // QWEBELEMENT_H 284