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#include <QApplication>
210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include <QUrl>
220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include <qwebview.h>
230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include <qwebframe.h>
240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include <qwebelement.h>
250bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochstatic QWebFrame *frame;
270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochstatic void traverse()
290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch//! [Traversing with QWebElement]
310bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    frame->setHtml("<html><body><p>First Paragraph</p><p>Second Paragraph</p></body></html>");
320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QWebElement doc = frame->documentElement();
330bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QWebElement body = doc.firstChild();
340bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QWebElement firstParagraph = body.firstChild();
350bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QWebElement secondParagraph = firstParagraph.nextSibling();
360bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch//! [Traversing with QWebElement]
370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
380bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
396c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsenstatic void findButtonAndClick()
406c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen{
416c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen
426c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    frame->setHtml("<form name=\"myform\" action=\"submit_form.asp\" method=\"get\">"
436c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen                   "<input type=\"text\" name=\"myfield\">"
446c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen                   "<input type=\"submit\" value=\"Submit\">"
456c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen                   "</form>");
466c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen
476c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen//! [Calling a DOM element method]
486c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen
496c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    QWebElement document = frame->documentElement();
506c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    /* Assume that the document has the following structure:
516c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen
526c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen        <form name="myform" action="submit_form.asp" method="get">
536c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen            <input type="text" name="myfield">
546c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen            <input type="submit" value="Submit">
556c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen        </form>
566c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen
576c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen     */
586c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen
596c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    QWebElement button = document.findFirst("input[type=submit]");
606c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    button.evaluateJavaScript("click()");
616c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen
626c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen//! [Calling a DOM element method]
636c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen
646c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen }
656c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen
666c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsenstatic void autocomplete1()
676c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen{
686c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    QWebElement document = frame->documentElement();
696c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen
706c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen//! [autocomplete1]
716c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    QWebElement firstTextInput = document.findFirst("input[type=text]");
726c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    QString storedText = firstTextInput.attribute("value");
736c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen//! [autocomplete1]
746c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen
756c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen}
766c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen
776c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen
786c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsenstatic void autocomplete2()
796c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen{
806c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen
816c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    QWebElement document = frame->documentElement();
826c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    QString storedText = "text";
836c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen
846c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen//! [autocomplete2]
856c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    QWebElement firstTextInput = document.findFirst("input[type=text]");
866c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    textInput.setAttribute("value", storedText);
876c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen//! [autocomplete2]
886c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen
896c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen}
906c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen
916c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen
920bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochstatic void findAll()
930bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
940bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch//! [FindAll]
950bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QWebElement document = frame->documentElement();
960bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    /* Assume the document has the following structure:
970bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
980bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch       <p class=intro>
990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch         <span>Intro</span>
1000bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch         <span>Snippets</span>
1010bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch       </p>
1020bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch       <p>
1030bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch         <span>Content</span>
1040bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch         <span>Here</span>
1050bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch       </p>
1060bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    */
1070bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
108643ca7872b450ea4efacab6188849e5aac2ba161Steve Block//! [FindAll intro]
109d0825bca7fe65beaee391d30da42e937db621564Steve Block    QWebElementCollection allSpans = document.findAll("span");
110d0825bca7fe65beaee391d30da42e937db621564Steve Block    QWebElementCollection introSpans = document.findAll("p.intro span");
111643ca7872b450ea4efacab6188849e5aac2ba161Steve Block//! [FindAll intro] //! [FindAll]
1120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
1130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochint main(int argc, char *argv[])
1150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
1160bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QApplication app(argc, argv);
1170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QWebView *view = new QWebView(0);
1180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    frame = view->page()->mainFrame();
1190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    traverse();
1200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    findAll();
1216c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    findButtonAndClick();
1226c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    autocomplete1();
1236c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    autocomplete2();
1240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    return 0;
1250bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
126