1 /*
2     Copyright (C) 2014 Aseman
3     http://aseman.co
4 
5     This project is free software: you can redistribute it and/or modify
6     it under the terms of the GNU General Public License as published by
7     the Free Software Foundation, either version 3 of the License, or
8     (at your option) any later version.
9 
10     This project is distributed in the hope that it will be useful,
11     but WITHOUT ANY WARRANTY; without even the implied warranty of
12     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13     GNU General Public License for more details.
14 
15     You should have received a copy of the GNU General Public License
16     along with this program.  If not, see <http://www.gnu.org/licenses/>.
17 */
18 
19 #ifndef ASEMANQUICKVIEW_H
20 #define ASEMANQUICKVIEW_H
21 
22 #include <QQuickView>
23 #include <QQmlEngine>
24 
25 #ifdef ASEMAN_QML_PLUGIN
26 #define INHERIT_VIEW QObject
27 #else
28 #define INHERIT_VIEW QQuickView
29 #endif
30 
31 class AsemanBackHandler;
32 class AsemanDesktopTools;
33 class AsemanDevices;
34 class AsemanJavaLayer;
35 class AsemanQtLogger;
36 class AsemanTools;
37 class AsemanCalendarConverter;
38 class AsemanQuickViewPrivate;
39 class AsemanQuickView : public INHERIT_VIEW
40 {
41     Q_OBJECT
42 
43     Q_PROPERTY(bool fullscreen READ fullscreen WRITE setFullscreen NOTIFY fullscreenChanged)
44     Q_PROPERTY(bool backController READ backController WRITE setBackController NOTIFY backControllerChanged)
45     Q_PROPERTY(bool reverseScroll READ reverseScroll WRITE setReverseScroll NOTIFY reverseScrollChanged)
46 
47     Q_PROPERTY(qreal statusBarHeight READ statusBarHeight NOTIFY statusBarHeightChanged)
48     Q_PROPERTY(qreal navigationBarHeight READ navigationBarHeight NOTIFY navigationBarHeightChanged)
49 
50     Q_PROPERTY(QObject*    root        READ root        WRITE setRoot        NOTIFY rootChanged)
51     Q_PROPERTY(QQuickItem* focusedText READ focusedText WRITE setFocusedText NOTIFY focusedTextChanged)
52 
53     Q_PROPERTY(int layoutDirection READ layoutDirection WRITE setLayoutDirection NOTIFY layoutDirectionChanged)
54 
55     Q_PROPERTY(qreal flickVelocity READ flickVelocity NOTIFY fakeSignal)
56 
57 public:
58 
59 #ifdef ASEMAN_QML_PLUGIN
60     AsemanQuickView(QQmlEngine *engine, QObject *parent = 0);
61 #else
62     AsemanQuickView(QWindow *parent = 0);
63 #endif
64     ~AsemanQuickView();
65 
66     AsemanDesktopTools *desktopTools() const;
67     AsemanDevices *devices() const;
68     AsemanQtLogger *qtLogger() const;
69     AsemanTools *tools() const;
70 #ifdef Q_OS_ANDROID
71     AsemanJavaLayer *javaLayer() const;
72 #endif
73     AsemanCalendarConverter *calendar() const;
74     AsemanBackHandler *backHandler() const;
75 
76     void setFullscreen( bool stt );
77     bool fullscreen() const;
78 
79     void setBackController(bool stt);
80     bool backController() const;
81 
82     void setReverseScroll(bool stt);
83     bool reverseScroll() const;
84 
85     qreal statusBarHeight() const;
86     qreal navigationBarHeight() const;
87 
88     void setRoot( QObject *root );
89     QObject *root() const;
90 
91     void setFocusedText( QQuickItem *item );
92     QQuickItem *focusedText() const;
93 
94     int layoutDirection() const;
95     void setLayoutDirection( int l );
96 
97     qreal flickVelocity() const;
98     Q_INVOKABLE QSize screenSize() const;
99 
100 public slots:
101     void discardFocusedText();
102     void tryClose();
103     void setMask(qreal x, qreal y, qreal width, qreal height);
104     void move(qreal x, qreal y);
105     void resize(qreal w, qreal h);
106 
107 signals:
108     void fullscreenChanged();
109     void statusBarHeightChanged();
110     void navigationBarHeightChanged();
111     void rootChanged();
112     void focusedTextChanged();
113     void layoutDirectionChanged();
114     void backControllerChanged();
115     void reverseScrollChanged();
116     void fakeSignal();
117     void closeRequest();
118 
119 protected:
120     bool event(QEvent *e);
121 
122 private:
123     AsemanQuickViewPrivate *p;
124 };
125 
126 #endif // ASEMANQUICKVIEW_H
127