Unity 8
qinputinfo.h
1 /****************************************************************************
2 **
3 ** Copyright (C) 2014 Canonical, Ltd. and/or its subsidiary(-ies).
4 ** Contact: http://www.qt-project.org/legal
5 **
6 ** This file is part of the QtSystems module of the Qt Toolkit.
7 **
8 ** $QT_BEGIN_LICENSE:LGPL$
9 ** Commercial License Usage
10 ** Licensees holding valid commercial Qt licenses may use this file in
11 ** accordance with the commercial license agreement provided with the
12 ** Software or, alternatively, in accordance with the terms contained in
13 ** a written agreement between you and Digia. For licensing terms and
14 ** conditions see http://qt.digia.com/licensing. For further information
15 ** use the contact form at http://qt.digia.com/contact-us.
16 **
17 ** GNU Lesser General Public License Usage
18 ** Alternatively, this file may be used under the terms of the GNU Lesser
19 ** General Public License version 2.1 as published by the Free Software
20 ** Foundation and appearing in the file LICENSE.LGPL included in the
21 ** packaging of this file. Please review the following information to
22 ** ensure the GNU Lesser General Public License version 2.1 requirements
23 ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
24 **
25 ** In addition, as a special exception, Digia gives you certain additional
26 ** rights. These rights are described in the Digia Qt LGPL Exception
27 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
28 **
29 ** GNU General Public License Usage
30 ** Alternatively, this file may be used under the terms of the GNU
31 ** General Public License version 3.0 as published by the Free Software
32 ** Foundation and appearing in the file LICENSE.GPL included in the
33 ** packaging of this file. Please review the following information to
34 ** ensure the GNU General Public License version 3.0 requirements will be
35 ** met: http://www.gnu.org/copyleft/gpl.html.
36 **
37 **
38 ** $QT_END_LICENSE$
39 **
40 ****************************************************************************/
41 
42 #ifndef QINPUTINFO_H
43 #define QINPUTINFO_H
44 
45 #include <QObject>
46 #include <QVector>
47 #include <QMap>
48 #include <QSocketNotifier>
49 #include <QDebug>
50 
51 class QInputDeviceInfoPrivate;
52 class QInputDevicePrivate;
53 class QInputDevice;
54 
55 class QInputDeviceInfoPrivate;
56 class QInputDeviceInfo : public QObject
57 {
58  Q_OBJECT
59  Q_PROPERTY(int deviceCount READ deviceCount)
60 public:
61 
62  enum InputType {
63  Unknown = 0,
64  Button = 1,
65  Mouse = 2,
66  TouchPad = 4,
67  TouchScreen = 8,
68  Keyboard = 16,
69  Switch = 32
70  };
71  Q_ENUMS(InputType)
72  Q_FLAGS(InputTypes)
73  Q_DECLARE_FLAGS(InputTypes, InputType)
74 
75  explicit QInputDeviceInfo(QObject *parent = 0);
76 
77  Q_INVOKABLE QVector <QInputDevice *> deviceList();
78 
79  Q_INVOKABLE QMap <QString, QInputDevice *> deviceMap();
80  int deviceCount() { return deviceList().count(); }
81 Q_SIGNALS:
82 
83  void deviceAdded(const QString & devicePath);
84  void deviceRemoved(const QString & devicePath);
85 
86  void ready();
87 
88 public Q_SLOTS:
89  void addedDevice(const QString & devicePath);
90 
91 private:
92  Q_DISABLE_COPY(QInputDeviceInfo)
93 #if !defined(QT_SIMULATOR)
94  QInputDeviceInfoPrivate *const d_ptr;
95  Q_DECLARE_PRIVATE(QInputDeviceInfo)
96 #endif
97 };
98 
99 class QInputDevice : public QObject
100 {
101  friend class QInputDeviceInfoPrivate;
102  Q_OBJECT
103  Q_ENUMS(InputType)
104  Q_FLAGS(InputTypes)
105  Q_PROPERTY(QString name READ name NOTIFY nameChanged)
106  Q_PROPERTY(QString devicePath READ devicePath NOTIFY devicePathChanged)
107  Q_PROPERTY(QList <int> buttons READ buttons NOTIFY buttonsChanged)
108  Q_PROPERTY(QList <int> switches READ switches NOTIFY switchesChanged)
109  Q_PROPERTY(QList <int> relativeAxis READ relativeAxis NOTIFY relativeAxisChanged)
110  Q_PROPERTY(QList <int> absoluteAxis READ absoluteAxis NOTIFY absoluteAxisChanged)
111  Q_PROPERTY(QInputDeviceInfo::InputTypes types READ types NOTIFY typesChanged)
112 
113 public:
114  explicit QInputDevice(QObject *parent = 0);
115 
116  QString name() const;
117  QString devicePath() const;
118  QList <int> buttons() const; //keys event code
119  QList <int> switches() const;
120  QList <int> relativeAxis() const;
121  QList <int> absoluteAxis() const;
122 
123  QInputDeviceInfo::InputTypes types();
124 Q_SIGNALS:
125  void nameChanged();
126  void devicePathChanged();
127  void buttonsChanged();
128  void switchesChanged();
129  void relativeAxisChanged();
130  void absoluteAxisChanged();
131  void typesChanged();
132 private:
133  QInputDevicePrivate *d_ptr;
134  void setName(const QString &);
135  void setDevicePath(const QString &);
136  void addButton(int);
137  void addSwitch(int);
138  void addRelativeAxis(int);
139  void addAbsoluteAxis(int);
140  void setTypes(QInputDeviceInfo::InputTypes);
141 };
142 
143 #endif // QINPUTINFO_H