summaryrefslogtreecommitdiffstats
path: root/src/remote/slave/lib/qtuitestwidgetinterface.cpp
blob: 126efcdf7c2feb40de8c33c17c667a210f2df7ee (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
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
/****************************************************************************
**
** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
** Contact: http://www.qt-project.org/
**
** This file is part of QtSystemTest.
**
** $QT_BEGIN_LICENSE:LGPL$
** GNU Lesser General Public License Usage
** This file may be used under the terms of the GNU Lesser General Public
** License version 2.1 as published by the Free Software Foundation and
** appearing in the file LICENSE.LGPL included in the packaging of this
** file. Please review the following information to ensure the GNU Lesser
** General Public License version 2.1 requirements will be met:
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
**
** In addition, as a special exception, Nokia gives you certain additional
** rights. These rights are described in the Nokia Qt LGPL Exception
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU General
** Public License version 3.0 as published by the Free Software Foundation
** and appearing in the file LICENSE.GPL included in the packaging of this
** file. Please review the following information to ensure the GNU General
** Public License version 3.0 requirements will be met:
** http://www.gnu.org/copyleft/gpl.html.
**
** Other Usage
** Alternatively, this file may be used in accordance with the terms and
** conditions contained in a signed written agreement between you and Nokia.
**
**
**
**
**
**
** $QT_END_LICENSE$
**
****************************************************************************/


#include "qtuitestwidgetinterface.h"
#include "qtuitestnamespace.h"

#include <QRect>
#include <QRegion>
#include <QVariant>

/*!
    \preliminary
    \class QtUiTest::WidgetFactory
    \inpublicgroup QtUiTestModule
    \brief The WidgetFactory class provides a factory interface
    for QtUiTest widget wrapper classes.

    QtUiTest::WidgetFactory is an abstract base class which enables the
    creation of QtUiTest wrapper objects around Qt widgets.

    Customizing QtUiTest behaviour for particular widgets is achieved by
    implementing one or more test widget classes which inherit from
    one or more QtUiTest widget interfaces,
    subclassing QtUiTest::WidgetFactory, reimplementing the pure virtual
    keys() and create() functions to create instances of the custom test
    widget classes, and exporting the factory class using the
    Q_EXPORT_PLUGIN2() macro.
*/

/*!
    \fn QtUiTest::WidgetFactory::create(QObject* object)

    Attempts to create a test widget to wrap \a object.  Returns the created
    test widget.  Returns 0 if this factory does not support wrapping
    \a object.

    The returned object is suitable for use with
    \l{QtUiTest}{qtuitest_cast}.

    This function will only be called for objects which inherit one of the
    classes returned by keys().
*/

/*!
    \fn QtUiTest::WidgetFactory::keys() const

    Returns the list of C++ class names this factory can generate test widgets
    for.

    Note that returning a class from this function does not guarantee that the
    factory will always be able to generate a test widget for that class.
*/

/*!
    \preliminary
    \class QtUiTest::Widget
    \inpublicgroup QtUiTestModule
    \brief The Widget class provides an abstract base class
    for all test widgets.

    QtUiTest::Widget encapsulates important information
    and functionality related to two-dimensional GUI elements.

    All test widgets should implement the QtUiTest::Widget interface,
    using multiple inheritance to implement other QtUiTest interfaces
    where suitable.
*/

/*!
    \fn const QRect& QtUiTest::Widget::geometry() const

    Returns the geometry of this widget in parent coordinates.
*/

/*!
    Returns the left of the widget, in global coordinates.

    \sa mapToGlobal()
*/
int QtUiTest::Widget::x() const
{
    return mapToGlobal(QPoint()).x();
}

/*!
    Returns the top of the widget, in global coordinates.

    \sa mapToGlobal()
*/
int QtUiTest::Widget::y() const
{
    return mapToGlobal(QPoint()).y();
}

/*!
    Returns the width of the widget.

    \sa geometry()
*/
int QtUiTest::Widget::width() const
{
    return geometry().width();
}

/*!
    Returns the height of the widget.

    \sa geometry()
*/
int QtUiTest::Widget::height() const
{
    return geometry().height();
}

/*!
    \fn bool QtUiTest::Widget::isVisible() const

    Returns true if this widget is currently visible.
*/

/*!
    \fn QObject* QtUiTest::Widget::parent() const

    Returns the parent of this widget, or 0 if this widget has no parent.

    The returned object may be an actual widget, or may be a wrapping
    test widget.  Therefore, the only safe way to use the returned value
    of this function is to cast it to the desired QtUiTest interface
    using \l{QtUiTest}{qtuitest_cast}.

    \sa QObject::parent(), children()
*/

/*!
    \fn const QObjectList& QtUiTest::Widget::children() const

    Returns all children of this widget.

    The returned objects may be actual widget instances, or may be wrapping
    test widgets.  Therefore, the only safe way to use the returned objects
    are to cast them to the desired QtUiTest interface using
    \l{QtUiTest}{qtuitest_cast}.

    Reimplementing this function allows widgets which are conceptually
    widgets but are not QObject subclasses to be wrapped.  This can be
    achieved by returning a list of test widgets which do not necessarily
    have underlying widget instances.

    \sa QObject::children(), parent()
*/

/*!
    \internal

    Returns all ancestors of this widget.

    \sa children(), parent()
*/
QObjectList QtUiTest::Object::ancestors() const
{
    QObjectList found;
    QObject *p = parent();
    if (p) {
        QtUiTest::Object* qw = qtuitest_cast<QtUiTest::Object*>(p);
        found << p << qw->ancestors();
    }
    return found;
}

/*!
    \internal

    Returns all descendants of this widget. The results are appended to \a descendants.

    \sa children(), parent()
*/
void QtUiTest::Object::descendants(QSet<QObject*> &descendants) const
{
    foreach (QObject *child, children()) {
        if (!descendants.contains(child)) {
            descendants.insert(child);
            QtUiTest::Object* qw = qtuitest_cast<QtUiTest::Object*>(child);
            if (qw)
                qw->descendants(descendants);
        }
    }
}

/*!
    \internal

    Convenience function to return descendants as QObjectList.

    \sa ancestors()
*/
QObjectList QtUiTest::Object::descendants() const
{
    QSet<QObject*> found;
    descendants(found);
    return QObjectList::fromSet(found);
}

/*!
    \fn QPoint QtUiTest::Widget::mapToGlobal(const QPoint& pos) const

    Maps \a pos from widget coordinates to global screen coordinates and
    returns the result.
*/

/*!
    \fn QPoint QtUiTest::Widget::mapFromGlobal(const QPoint& pos) const

    Maps \a pos from global screen coordinates to widget coordinates and
    returns the result.
*/

/*!
    Returns the center point of the widget. The base implementation
    returns geometry().center().

    \sa QtUiTest::Widget::geometry()
*/
QPoint QtUiTest::Widget::center() const
{
    QPoint ret;
    ret = mapToGlobal( geometry().center() );
    return ret;
}

/*!
    \fn bool QtUiTest::Widget::hasFocus() const
    Returns true if this widget currently has keyboard focus.
*/

/*!
    Returns the focus proxy of this widget, or 0 if this widget has no focus proxy.
    A widget may "have focus", but have a child widget that actually handles the
    focus.

    The returned object may be an actual widget, or may be a wrapping
    test widget.  Therefore, the only safe way to use the returned value
    of this function is to cast it to the desired QtUiTest interface
    using \l{QtUiTest}{qtuitest_cast}.

*/
QObject* QtUiTest::Widget::focusProxy() const
{
    return 0;
}

/*!
    Sets \a img to image of the widget. Returns true on success.

    The base implementation always returns false.
*/
bool QtUiTest::Widget::grabImage(QImage &img) const
{ Q_UNUSED(img); return false; }

/*!
    Returns true if this widget should be ignored by QtUiTest. If
    a widget is ignored, any child widgets will still be processed.

    The base implementation always returns false.

    \sa {Widget Specifiers}, {Querying Objects}
*/
bool QtUiTest::Widget::ignoreScan() const
{ return false; }

/*!
    Returns the widget's window.
*/
QObject* QtUiTest::Widget::window() const
{
    return 0;
}
/*!
    Returns the value of this widget's property specified by \a property.

    \sa setProperty()
*/
QVariant QtUiTest::Object::getProperty(const QString& property) const
{
    Q_UNUSED(property)
    return QVariant();
}

/*!
    Sets the value of this widget's property specified by \a property to \a value.
    Returns true on success, and false if the property could not be set.

    \sa getProperty()
*/
bool QtUiTest::Object::setProperty(const QString &property, const QVariant &value)
{
    Q_UNUSED(property)
    Q_UNUSED(value)
    return false;
}

/*!
    Return true if this widget matches the \a value of pseudo-property \a property.

    \sa getProperty()
*/
bool QtUiTest::Object::matchProperty(const QString &property, const QVariant &value) const
{
    Q_UNUSED(property)
    Q_UNUSED(value)
    return false;
}

/*!
    Returns a map containing all the widget's properties.

    \sa getProperty()
*/
QVariantMap QtUiTest::Object::getProperties() const
{
    return QVariantMap();
}

QVariantList QtUiTest::Object::resources() const
{
    QVariantList ret;
    return ret;
}

/*!
    Returns the type of widget.
*/
QString QtUiTest::Object::typeOf() const
{
    return QString();
}

/*!
    Returns the widget's list of superclasses.
*/
QStringList QtUiTest::Object::inheritance() const
{
    return QStringList();
}

/*!
    Returns true if the item has displayable contents.
*/
bool QtUiTest::Object::hasContents() const
{
    return false;
}

/*!
    Returns a string value for debugging purposes.
*/
QString QtUiTest::Object::debugString() const
{
    return QString();
}