diff options
Diffstat (limited to 'src/sensors/gestures/qsensorgesture.cpp')
-rw-r--r-- | src/sensors/gestures/qsensorgesture.cpp | 226 |
1 files changed, 226 insertions, 0 deletions
diff --git a/src/sensors/gestures/qsensorgesture.cpp b/src/sensors/gestures/qsensorgesture.cpp new file mode 100644 index 0000000000..467b3a5daf --- /dev/null +++ b/src/sensors/gestures/qsensorgesture.cpp @@ -0,0 +1,226 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the Qt Mobility Components. +** +** $QT_BEGIN_LICENSE:LGPL$ +** 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 Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/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 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, Digia gives you certain additional +** rights. These rights are described in the Digia 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. +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include <QDir> +#include <QPluginLoader> +#include <QDebug> + +#include "qsensorgesture.h" +#include "qsensorgesture_p.h" +#include "qsensorgesturemanager.h" + +QTM_BEGIN_NAMESPACE + +/*! + \class QSensorGesture + \ingroup sensorgestures_main + \inmodule QtSensors + + \brief The QSensorGesture class represents one or more sensor gesture recognizers. + + + \sa QSensorGestureRecognizer + + You may use QSensorGestureManager to obtain the systems known sensor gesture ids. + + \sa QSensorGestureManager + */ + +/*! + \fn QSensorGesture::detected(QString gestureId) + Signals when the \a gestureId gesture has been recognized. + */ + +/*! + Constructs the sensor gesture, and initializes the \a ids list of recognizers, + with parent \a parent + */ +QSensorGesture::QSensorGesture(const QStringList &ids, QObject *parent) : + QObject(parent) +{ + d_ptr = new QSensorGesturePrivate(); + Q_FOREACH (const QString &id, ids) { + QSensorGestureRecognizer * rec = QSensorGestureManager::sensorGestureRecognizer(id); + if (rec != 0) { + d_ptr->m_sensorRecognizers.append(rec); + d_ptr->availableIds.append(id); + } else { + d_ptr->invalidIds.append(id); + //add to not available things + } + } + +// d_ptr->meta = 0; + +// QMetaObjectBuilder builder; +// builder.setSuperClass(&QObject::staticMetaObject); +// builder.setClassName("QSensorGesture"); + +// Q_FOREACH (QSensorGestureRecognizer *recognizer, d_ptr->m_sensorRecognizers) { +// Q_FOREACH (const QString &gesture, recognizer->gestureSignals()) { +// QMetaMethodBuilder b = builder.addSignal(gesture.toLatin1()); +// if (!d_ptr->localGestureSignals.contains(QLatin1String(b.signature()))) +// d_ptr->localGestureSignals.append(QLatin1String(b.signature())); +// } +// recognizer->createBackend(); +// } +// d_ptr->meta = builder.toMetaObject(); + + if (d_ptr->m_sensorRecognizers.count() > 0) { + d_ptr->valid = true; + } +} + +/*! + Destroy the QSensorGesture + */ +QSensorGesture::~QSensorGesture() +{ + stopDetection(); +// if (d_ptr->meta) +// free(d_ptr->meta); +// delete d_ptr; +} + +/*! + Returns the gesture recognizer ids that were found. + */ +QStringList QSensorGesture::validIds() const +{ + return d_ptr->availableIds; +} + +/*! + Returns the gesture recognizer ids that were not found. + */ +QStringList QSensorGesture::invalidIds() const +{ + return d_ptr->invalidIds; +} + +/*! + Starts the gesture detection routines in the recognizer. + */ +void QSensorGesture::startDetection() +{ + if (d_ptr->m_sensorRecognizers.count() < 1) + return; + if (d_ptr->isActive) + return; + + Q_FOREACH (QSensorGestureRecognizer *recognizer, d_ptr->m_sensorRecognizers) { + + Q_ASSERT(recognizer !=0); + + connect(recognizer,SIGNAL(detected(QString)), + this,SIGNAL(detected(QString)),Qt::UniqueConnection); + + //connect recognizer signals +// Q_FOREACH (QString method, recognizer->gestureSignals()) { +// method.prepend(QLatin1String("2")); +// connect(recognizer, method.toLatin1(), +// this, method.toLatin1(), Qt::UniqueConnection); +// } + + recognizer->startBackend(); + } + d_ptr->isActive = true; +} + +/*! + Stops the gesture detection routines. + */ +void QSensorGesture::stopDetection() +{ + if (d_ptr->m_sensorRecognizers.count() < 1) + return; + + if (!d_ptr->isActive) + return; + + Q_FOREACH (QSensorGestureRecognizer *recognizer, d_ptr->m_sensorRecognizers) { + disconnect(recognizer,SIGNAL(detected(QString)), + this,SIGNAL(detected(QString))); + //disconnect recognizer signals +// Q_FOREACH (QString method,recognizer->gestureSignals()) { +// method.prepend(QLatin1String("2")); +// disconnect(recognizer, method.toLatin1(), +// this, method.toLatin1()); +// } + + recognizer->stopBackend(); + } + d_ptr->isActive = false; +} + +/*! + Returns all the possible gestures signals that may be emitted. + */ +QStringList QSensorGesture::gestureSignals() const +{ + if (d_ptr->m_sensorRecognizers.count() > 0) { + return d_ptr->localGestureSignals; + } + return QStringList(); +} + +/*! + Returns whether this gesture is active or not. + */ + +bool QSensorGesture::isActive() +{ + return d_ptr->isActive; +} + +QSensorGesturePrivate::QSensorGesturePrivate(QObject *parent) + : QObject(parent),isActive(0), valid(0) +{ +} + +QSensorGesturePrivate::~QSensorGesturePrivate() +{ + +} + +#include "moc_qsensorgesture.cpp" + +QTM_END_NAMESPACE |