summaryrefslogtreecommitdiffstats
path: root/src/qmlandroid/view/qqmlandroidview_p.h
blob: 15a0d1892fa8ce2ef29993e00efacee81259cab8 (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
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the Qt QML Android module of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:LGPL3$
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see http://www.qt.io/terms-conditions. For further
** information use the contact form at http://www.qt.io/contact-us.
**
** GNU Lesser General Public License Usage
** Alternatively, this file may be used under the terms of the GNU Lesser
** General Public License version 3 as published by the Free Software
** Foundation and appearing in the file LICENSE.LGPLv3 included in the
** packaging of this file. Please review the following information to
** ensure the GNU Lesser General Public License version 3 requirements
** will be met: https://www.gnu.org/licenses/lgpl.html.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 2.0 or later 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 2.0 requirements will be
** met: http://www.gnu.org/licenses/gpl-2.0.html.
**
** $QT_END_LICENSE$
**
****************************************************************************/

#ifndef QQMLANDROIDVIEW_P_H
#define QQMLANDROIDVIEW_P_H

//
//  W A R N I N G
//  -------------
//
// This file is not part of the Qt API.  It exists purely as an
// implementation detail.  This header file may change from version to
// version without notice, or even be removed.
//
// We mean it.
//

#include <QtQmlAndroid/private/qqmlandroidcontextual_p.h>
#include <QtQmlAndroid/private/qqmlandroidoptional_p.h>
#include <QtQml/qqml.h>

QT_BEGIN_NAMESPACE

class QQmlAndroidDrawable;
class QQmlAndroidAnimation;
class QQmlAndroidLayoutParams;

class Q_QMLANDROID_EXPORT QQmlAndroidView : public QQmlAndroidContextual
{
    Q_OBJECT
    Q_PROPERTY(QQmlAndroidView *parent READ parentView WRITE setParentView NOTIFY parentChanged)
    Q_PROPERTY(QQmlListProperty<QQmlAndroidView> children READ children NOTIFY childrenChanged)

    Q_PROPERTY(QQmlAndroidDrawable *background READ background WRITE setBackground NOTIFY backgroundChanged)
    Q_PROPERTY(int backgroundColor READ backgroundColor WRITE setBackgroundColor NOTIFY backgroundColorChanged)
    Q_PROPERTY(int backgroundResource READ backgroundResource WRITE setBackgroundResource NOTIFY backgroundResourceChanged)

    Q_PROPERTY(QQmlAndroidAnimation *animation READ animation WRITE setAnimation NOTIFY animationChanged)

    Q_PROPERTY(bool visible READ isVisible WRITE setVisible NOTIFY visibleChanged)
    Q_PROPERTY(bool focus READ hasFocus NOTIFY focusChanged)

    Q_PROPERTY(qreal x READ x NOTIFY xChanged)
    Q_PROPERTY(qreal y READ y NOTIFY yChanged)
    Q_PROPERTY(qreal z READ z WRITE setZ NOTIFY zChanged)

    Q_PROPERTY(int top READ top WRITE setTop NOTIFY topChanged)
    Q_PROPERTY(int left READ left WRITE setLeft NOTIFY leftChanged)
    Q_PROPERTY(int right READ right WRITE setRight NOTIFY rightChanged)
    Q_PROPERTY(int bottom READ bottom WRITE setBottom NOTIFY bottomChanged)
    Q_PROPERTY(int width READ width WRITE setWidth NOTIFY widthChanged)
    Q_PROPERTY(int height READ height WRITE setHeight NOTIFY heightChanged)

    Q_PROPERTY(int padding READ padding WRITE setPadding NOTIFY paddingChanged)
    Q_PROPERTY(int paddingTop READ paddingTop WRITE setPaddingTop NOTIFY paddingTopChanged)
    Q_PROPERTY(int paddingLeft READ paddingLeft WRITE setPaddingLeft NOTIFY paddingLeftChanged)
    Q_PROPERTY(int paddingRight READ paddingRight WRITE setPaddingRight NOTIFY paddingRightChanged)
    Q_PROPERTY(int paddingBottom READ paddingBottom WRITE setPaddingBottom NOTIFY paddingBottomChanged)

    Q_PROPERTY(qreal scaleX READ scaleX WRITE setScaleX NOTIFY scaleXChanged)
    Q_PROPERTY(qreal scaleY READ scaleY WRITE setScaleY NOTIFY scaleYChanged)
    Q_PROPERTY(qreal pivotX READ pivotX WRITE setPivotX NOTIFY pivotXChanged)
    Q_PROPERTY(qreal pivotY READ pivotY WRITE setPivotY NOTIFY pivotYChanged)
    Q_PROPERTY(qreal rotation READ rotation WRITE setRotation NOTIFY rotationChanged)
    Q_PROPERTY(qreal rotationX READ rotationX WRITE setRotationX NOTIFY rotationXChanged)
    Q_PROPERTY(qreal rotationY READ rotationY WRITE setRotationY NOTIFY rotationYChanged)
    Q_PROPERTY(qreal translationX READ translationX WRITE setTranslationX NOTIFY translationXChanged)
    Q_PROPERTY(qreal translationY READ translationY WRITE setTranslationY NOTIFY translationYChanged)
    Q_PROPERTY(qreal translationZ READ translationZ WRITE setTranslationZ NOTIFY translationZChanged)

public:
    explicit QQmlAndroidView(QQmlAndroidView *parent = 0);
    ~QQmlAndroidView();

    int identifier() const;
    void setIdentifier(int id);

    QQmlAndroidView *parentView() const;
    void setParentView(QQmlAndroidView *parent);

    QList<QQmlAndroidView *> childViews() const;
    QQmlListProperty<QQmlAndroidView> children();

    QQmlAndroidLayoutParams *layoutParams() const;
    void setLayoutParams(QQmlAndroidLayoutParams *params);

    QQmlAndroidDrawable *background() const;
    void setBackground(QQmlAndroidDrawable *background, int resource = 0);

    int backgroundColor() const;
    void setBackgroundColor(int color);

    int backgroundResource() const;
    void setBackgroundResource(int resource);

    QQmlAndroidAnimation *animation() const;
    void setAnimation(QQmlAndroidAnimation *animation);

    bool isVisible() const;
    void setVisible(bool visible);

    bool hasFocus() const;

    qreal x() const;
    qreal y() const;

    qreal z() const;
    void setZ(qreal z);

    int top() const;
    void setTop(int top);

    int left() const;
    void setLeft(int left);

    int right() const;
    void setRight(int right);

    int bottom() const;
    void setBottom(int bottom);

    int width() const;
    void setWidth(int width);

    int height() const;
    void setHeight(int height);

    int padding() const;
    void setPadding(int padding);

    int paddingTop() const;
    void setPaddingTop(int padding);

    int paddingLeft() const;
    void setPaddingLeft(int padding);

    int paddingRight() const;
    void setPaddingRight(int padding);

    int paddingBottom() const;
    void setPaddingBottom(int padding);

    qreal scaleX() const;
    void setScaleX(qreal scaleX);

    qreal scaleY() const;
    void setScaleY(qreal scaleY);

    qreal pivotX() const;
    void setPivotX(qreal pivotX);

    qreal pivotY() const;
    void setPivotY(qreal pivotY);

    qreal rotation() const;
    void setRotation(qreal rotation);

    qreal rotationX() const;
    void setRotationX(qreal rotationY);

    qreal rotationY() const;
    void setRotationY(qreal rotationY);

    qreal translationX() const;
    void setTranslationX(qreal translationY);

    qreal translationY() const;
    void setTranslationY(qreal translationY);

    qreal translationZ() const;
    void setTranslationZ(qreal translationZ);

    qreal elevation() const;
    void setElevation(qreal elevation);

    void requestPolish();

    enum ViewChange {
        ViewParentChange,       // data.view
        ViewChildAddedChange,   // data.view
        ViewChildRemovedChange, // data.view
        ViewVisibilityChange,   // data.boolean
    };

    union ViewChangeData {
        ViewChangeData(QQmlAndroidView *v) : view(v) {}
        ViewChangeData(qreal n) : number(n) {}
        ViewChangeData(bool b) : boolean(b) {}

        QQmlAndroidView *view;
        qreal number;
        bool boolean;
    };

Q_SIGNALS:
    void parentChanged();
    void backgroundChanged();
    void backgroundColorChanged();
    void backgroundResourceChanged();
    void animationChanged();
    void childrenChanged();
    void visibleChanged();
    void focusChanged();
    void click();
    void xChanged();
    void yChanged();
    void zChanged();
    void topChanged();
    void leftChanged();
    void rightChanged();
    void bottomChanged();
    void widthChanged();
    void heightChanged();
    void paddingChanged();
    void paddingTopChanged();
    void paddingLeftChanged();
    void paddingRightChanged();
    void paddingBottomChanged();
    void scaleXChanged();
    void scaleYChanged();
    void pivotXChanged();
    void pivotYChanged();
    void rotationChanged();
    void rotationXChanged();
    void rotationYChanged();
    void translationXChanged();
    void translationYChanged();
    void translationZChanged();
    void elevationChanged();
    void longClick(); // TODO: accept

protected:
    virtual void polish();
    virtual void viewChange(ViewChange change, const ViewChangeData &data);

    void addChild(QQmlAndroidView *child);
    void removeChild(QQmlAndroidView *child);

    static void children_append(QQmlListProperty<QQmlAndroidView> *list, QQmlAndroidView *child);
    static int children_count(QQmlListProperty<QQmlAndroidView> *list);
    static QQmlAndroidView *children_at(QQmlListProperty<QQmlAndroidView> *list, int index);
    static void children_clear(QQmlListProperty<QQmlAndroidView> *list);

    QAndroidJniObject onCreate() Q_DECL_OVERRIDE;
    void onInflate(QAndroidJniObject &instance) Q_DECL_OVERRIDE;

    static void onRegisterNativeMethods(jobject listener);
    static void onClick(JNIEnv *env, jobject object, jlong instance);
    static void onFocusChange(JNIEnv *env, jobject object, jlong instance, jboolean hasFocus);
    static void onLayoutChange(JNIEnv *env, jobject object, jlong instance, jint left, jint top, jint right, jint bottom);
    static bool onLongClick(JNIEnv *env, jobject object, jlong instance);

    bool event(QEvent *event) Q_DECL_OVERRIDE;

    void objectChange(ObjectChange change) Q_DECL_OVERRIDE;

private Q_SLOTS:
    void updateBackground();
    void updateAnimation();
    bool updateFocus(bool focus);
    void updateLayoutParams();
    void updateGeometry(int top, int left, int right, int bottom);

private:
    int m_id;
    QQmlAndroidView *m_parent;
    QList<QQmlAndroidView *> m_children;
    QQmlAndroidDrawable *m_background;
    int m_backgroundResource;
    QQmlAndroidAnimation *m_animation;
    bool m_polishing;
    bool m_visible;

    QAndroidJniObject m_listener;

    QQmlAndroidLayoutParams *m_layoutParams;

    QQmlAndroidOptional<bool> m_focus;
    QQmlAndroidOptional<int> m_top;
    QQmlAndroidOptional<int> m_left;
    QQmlAndroidOptional<int> m_right;
    QQmlAndroidOptional<int> m_bottom;
    QQmlAndroidOptional<int> m_padding;
    QQmlAndroidOptional<int> m_paddingTop;
    QQmlAndroidOptional<int> m_paddingLeft;
    QQmlAndroidOptional<int> m_paddingRight;
    QQmlAndroidOptional<int> m_paddingBottom;
    QQmlAndroidOptional<qreal> m_scaleX;
    QQmlAndroidOptional<qreal> m_scaleY;
    QQmlAndroidOptional<qreal> m_pivotX;
    QQmlAndroidOptional<qreal> m_pivotY;
    QQmlAndroidOptional<qreal> m_rotation;
    QQmlAndroidOptional<qreal> m_rotationX;
    QQmlAndroidOptional<qreal> m_rotationY;
    QQmlAndroidOptional<qreal> m_translationX;
    QQmlAndroidOptional<qreal> m_translationY;
    QQmlAndroidOptional<qreal> m_translationZ;
    QQmlAndroidOptional<qreal> m_elevation;
};

QT_END_NAMESPACE

#endif // QQMLANDROIDVIEW_P_H