1545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
2545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdochvoid wrapInFunction()
3545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch{
4545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
5545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    //! [0]
6545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    // ...
7545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    QWebFrame *frame = myWebPage->mainFrame();
8545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    frame->addToJavaScriptWindowObject("someNameForMyObject", myObject);
9545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    // ...
10545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    //! [0]
11545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch#if 0
12545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    //! [1]
13545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    {
14545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        width: ...,
1506ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen        height: ...,
1606ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen        toDataURL: function() { ... },
1706ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen        assignToHTMLImageElement: function(element) { ... }
1806ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen    }
19545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    //! [1]
20545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch#endif
21545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    //! [2]
22545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    class MyObject : QObject {
23545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        Q_OBJECT
24545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        Q_PROPERTY(QPixmap myPixmap READ getPixmap)
25545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
26545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    public:
2706ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen        QPixmap getPixmap() const;
28545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    };
29545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
30545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    /* ... */
31545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
32545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    MyObject myObject;
33545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    myWebPage.mainFrame()->addToJavaScriptWindowObject("myObject", &myObject);
34545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
35545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    //! [2]
36545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch#if 0
37545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    //! [3]
38545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    <html>
3906ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen        <head>
40545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch            <script>
4106ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen                function loadImage()
4206ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen                {
4306ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen                    myObject.myPixmap.assignToHTMLImageElement(document.getElementById("imageElement"));
4406ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen                }
4506ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen            </script>
4606ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen        </head>
4706ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen        <body onload="loadImage()">
4806ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen            <img id="imageElement" width="300" height="200" />
4906ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen        </body>
5006ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen    </html>
5106ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen//! [3]
52545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch#endif
5306ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen//! [4]
5406ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsenclass MyObject : QObject {
55545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        Q_OBJECT
56545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
57545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    public slots:
58545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        void doSomethingWithWebElement(const QWebElement&);
59545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    };
60545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
61545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    /* ... */
62545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
63545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    MyObject myObject;
64545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    myWebPage.mainFrame()->addToJavaScriptWindowObject("myObject", &myObject);
65545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
66545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    //! [4]
67545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch#if 0
68545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    //! [5]
69545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    <html>
70545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch         <head>
71545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch             <script>
72545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch                 function runExample() {
73545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch                    myObject.doSomethingWithWebElement(document.getElementById("someElement"));
74545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch                 }
75545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch            </script>
76545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch         </head>
77545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch         <body onload="runExample()">
78545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch             <span id="someElement">Text</span>
79545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch         </body>
80545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch     </html>
81545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    //! [5]
82545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    //! [6]
83545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    connect(function);
84545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    //! [6]
85545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    //! [7]
86545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    function myInterestingScriptFunction() { ... }
87545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    ...
88545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    myQObject.somethingChanged.connect(myInterestingScriptFunction);
89545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    //! [7]
90545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    //! [8]
91545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    myQObject.somethingChanged.connect(myOtherQObject.doSomething);
92545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    //! [8]
93545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    //! [9]
94545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    myQObject.somethingChanged.disconnect(myInterestingFunction);
95545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    myQObject.somethingChanged.disconnect(myOtherQObject.doSomething);
96545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    //! [9]
97545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    //! [10]
98dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch    myQObject.somethingChanged.connect(thisObject, function)
99545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    //! [10]
100545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    //! [11]
101dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch    var form = { x: 123 };
102dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch    var onClicked = function() { print(this.x); };
103dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch    myButton.clicked.connect(form, onClicked);
104545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    //! [11]
105545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    //! [12]
106dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch    myQObject.somethingChanged.disconnect(thisObject, function);
107545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    //! [12]
108545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    //! [13]
109545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    connect(function);
110545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    //! [13]
111545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    //! [14]
112dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch    myQObject.somethingChanged.connect(thisObject, "functionName")
113545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    //! [14]
114545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    //! [15]
115545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    var obj = { x: 123, fun: function() { print(this.x); } };
116545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    myQObject.somethingChanged.connect(obj, "fun");
117545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    //! [15]
118545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    //! [16]
119545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    connect(function);
120545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    //! [16]
121545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    //! [17]
122dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch    myQObject.somethingChanged.disconnect(thisObject, "functionName");
123545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    //! [17]
124545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    //! [18]
125545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    try {
126545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        myQObject.somethingChanged.connect(myQObject, "slotThatDoesntExist");
127545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    } catch (e) {
128545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        print(e);
129545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    }
130545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    //! [18]
131545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    //! [19]
132545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    myQObject.somethingChanged("hello");
133545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    //! [19]
134545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    //! [20]
135545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    myQObject.myOverloadedSlot(10);   // will call the int overload
136545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    myQObject.myOverloadedSlot("10"); // will call the QString overload
137545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    //! [20]
138545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    //! [21]
139545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    myQObject['myOverloadedSlot(int)']("10");   // call int overload; the argument is converted to an int
140545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    myQObject['myOverloadedSlot(QString)'](10); // call QString overload; the argument is converted to a string
141545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    //! [21]
142545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    //! [22]
143545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    class MyObject : public QObject
144545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    {
145545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        Q_OBJECT
146545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
147545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    public:
148dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch        Q_INVOKABLE void thisMethodIsInvokableInJavaScript();
149dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch        void thisMethodIsNotInvokableInJavaScript();
150545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
151545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        ...
152545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    };
153545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    //! [22]
154545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    //! [23]
155545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        Q_PROPERTY(bool enabled READ enabled WRITE setEnabled)
156545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    //! [23]
157545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    //! [24]
158545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    myQObject.enabled = true;
159545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
160545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    ...
161545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
162545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    myQObject.enabled = !myQObject.enabled;
163545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    //! [24]
164545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    //! [25]
16506ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen    myDialog.okButton
166545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    //! [25]
167545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    //! [26]
168545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    myDialog.okButton
169545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    myDialog.okButton.objectName = "cancelButton";
170545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    // from now on, myDialog.cancelButton references the button
171545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    //! [26]
172545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch#endif
173545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch}
174545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
175