From db2df16d1aa7ece4ee27b16122142c002b01d65d Mon Sep 17 00:00:00 2001 From: Lorn Potter Date: Wed, 9 Nov 2011 11:31:53 +1000 Subject: add documentation to sensor gesture c++ example Also make the example app a bit more informative and useful. Change-Id: I9e74d12c7d762df46355467670f0b9b41e7b3b5c Sanity-Review: Qt Sanity Bot Reviewed-by: Lincoln Ramsay --- doc/src/examples/sensorgestures.qdoc | 65 ++++++++++++++++++ doc/src/qtsensors.qdoc | 3 + examples/sensors/sensorgestures/mainwindow.cpp | 94 +++++++++++++++++++++++--- examples/sensors/sensorgestures/mainwindow.h | 6 ++ examples/sensors/sensorgestures/mainwindow.ui | 35 ++++++++-- examples/sensors/sensors.pro | 8 +-- 6 files changed, 191 insertions(+), 20 deletions(-) create mode 100644 doc/src/examples/sensorgestures.qdoc diff --git a/doc/src/examples/sensorgestures.qdoc b/doc/src/examples/sensorgestures.qdoc new file mode 100644 index 00000000..f3758dcc --- /dev/null +++ b/doc/src/examples/sensorgestures.qdoc @@ -0,0 +1,65 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** GNU Free Documentation License +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. +** +** 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$ +** +****************************************************************************/ + +/*! + \page sensorgestureexample.html + \title C++ Sensor Gestures Example + \brief The sensor gesture example demonstrates the steps for creating a C++ application + that uses sensor gestures and the included shake sensor. + + QSensorGestures class defines one predefined signal, \c { void detected(const QString &) } + + As well, Sensor Gesture Recognizers may implement any number of their own custom signals. + + Our shake recognizer defines one custom signal, \c {void shake()}, as well as the predefined + detected signal. + + \section1 SensorGestures Class Implementation + + In order to know about custom signals that may be available, we need to ask the QSensorGestureManager about them, + + Using the QSensorGesture::gestureIds() function, the manager will return a QStringList of known and valid gesture Ids. + \snippet ../examples/sensors/sensorgestures/mainwindow.cpp 0 + + We can then use this to create a QSensorGesture object that we can use to connect signals to, + and start the detection process. A QSensorGesture object will take a list of one or more + recognizer ids in it's constructor. + + \snippet ../examples/sensors/sensorgestures/mainwindow.cpp 1 + + and later stop the detection process. + + \snippet ../examples/sensors/sensorgestures/mainwindow.cpp 2 + + The QSensorGesture object will contain all the signals of the valid requested recognizers found on the system. + + You can discover which of the requested recognizer ID's that were not found by using QSensorGesture::invalidIds(); + + By using QSensorGesture::gestureSignals(), you can get a QStringList of usable signals. + + +*/ diff --git a/doc/src/qtsensors.qdoc b/doc/src/qtsensors.qdoc index 11af5156..b58c7316 100644 --- a/doc/src/qtsensors.qdoc +++ b/doc/src/qtsensors.qdoc @@ -81,6 +81,9 @@ \row \o \l {QtSensorGestures C++ API}{C++ API} \o Information about the QtSensorGestures C++ API + \row + \o \l {C++ Sensor Gestures Example} + \o The SensorGestures example demostrates how to use QSensorGestures \endtable \section1 Information for QtSensorGestures Recognizer Plugin Implementors. diff --git a/examples/sensors/sensorgestures/mainwindow.cpp b/examples/sensors/sensorgestures/mainwindow.cpp index 668d7a21..41e1a2b3 100644 --- a/examples/sensors/sensorgestures/mainwindow.cpp +++ b/examples/sensors/sensorgestures/mainwindow.cpp @@ -38,7 +38,8 @@ ** ****************************************************************************/ -#include +#include +#include #include "mainwindow.h" #include "ui_mainwindow.h" @@ -51,19 +52,24 @@ MainWindow::MainWindow(QWidget *parent) ui(new Ui::MainWindow) { ui->setupUi(this); + //! [0] QSensorGestureManager manager; - QSensorGesture *thisGesture = new QSensorGesture(manager.gestureIds(), this); + Q_FOREACH (const QString &gesture, manager.gestureIds()) { - if (thisGesture->availableIds().contains("QtSensors.shake")) { - connect(thisGesture,SIGNAL(shake()), - this,SLOT(onShake())); + QTreeWidgetItem *gestureId = new QTreeWidgetItem(ui->treeWidget); + QStringList recognizerSignals = manager.recognizerSignals(gesture); + gestureId->setText(0,gesture); + + for (int i = 0; i < recognizerSignals.count(); i++) { + QTreeWidgetItem *oneSignal = new QTreeWidgetItem(gestureId); + oneSignal->setText(0,recognizerSignals.at(i)); + } + ui->treeWidget->insertTopLevelItem(0,gestureId); } + //! [0] - connect(thisGesture,SIGNAL(detected(QString)), - this,SLOT(detectedShake(QString))); - thisGesture->startDetection(); ui->textEdit->setReadOnly(true); } @@ -75,7 +81,7 @@ MainWindow::~MainWindow() void MainWindow::detectedShake(const QString &name) { - QString str = ""+name+"
"; + QString str = ""+name+"
"; ui->textEdit->insertHtml(str); ui->textEdit->ensureCursorVisible(); } @@ -87,8 +93,76 @@ void MainWindow::on_pushButton_clicked() void MainWindow::onShake() { - QString str = "onShake()
"; + QString str = "onShake()
"; ui->textEdit->insertHtml(str); ui->textEdit->ensureCursorVisible(); } +void MainWindow::on_startPushButton_clicked() +{ + if (ui->treeWidget->currentItem() == 0) + return; + QString currentRecognizer; + + if (ui->treeWidget->currentItem()->childCount() == 0) { + currentRecognizer = ui->treeWidget->currentItem()->parent()->text(0); + } else { + currentRecognizer = ui->treeWidget->currentItem()->text(0); + } + + if (recognizerMap.contains(currentRecognizer)) + return; + //! [1] + QSensorGestureManager manager; + QSensorGesture *thisGesture = new QSensorGesture(QStringList() << currentRecognizer, this); + + if (currentRecognizer.contains("QtSensors.shake")) { + connect(thisGesture,SIGNAL(shake()), + this,SLOT(onShake())); + } + + connect(thisGesture,SIGNAL(detected(QString)), + this,SLOT(detectedShake(QString))); + thisGesture->startDetection(); + + //! [1] + + recognizerMap.insert(currentRecognizer,thisGesture); + + QString str = QString("Started %1
").arg(currentRecognizer); + ui->textEdit->insertHtml(str); + ui->textEdit->ensureCursorVisible(); +} + +void MainWindow::on_stopPushButton_clicked() +{ + if (ui->treeWidget->currentItem() == 0) + return; + QString currentRecognizer; + + if (ui->treeWidget->currentItem()->childCount() == 0) { + currentRecognizer = ui->treeWidget->currentItem()->parent()->text(0); + } else { + currentRecognizer = ui->treeWidget->currentItem()->text(0); + } + + if (!recognizerMap.contains(currentRecognizer)) + return; + //! [2] + + recognizerMap[currentRecognizer]->stopDetection(); + + if (currentRecognizer == "QtSensors.shake") { + disconnect(recognizerMap[currentRecognizer],SIGNAL(shake()), + this,SLOT(onShake())); + } + disconnect(recognizerMap[currentRecognizer],SIGNAL(detected(QString)), + this,SLOT(detectedShake(QString))); + //! [2] + + recognizerMap.take(currentRecognizer); + + QString str = QString("Stopped %1
").arg(currentRecognizer); + ui->textEdit->insertHtml(str); + ui->textEdit->ensureCursorVisible(); +} diff --git a/examples/sensors/sensorgestures/mainwindow.h b/examples/sensors/sensorgestures/mainwindow.h index 24a6f63c..d0fd7f73 100644 --- a/examples/sensors/sensorgestures/mainwindow.h +++ b/examples/sensors/sensorgestures/mainwindow.h @@ -42,6 +42,7 @@ #define MAINWINDOW_H #include +#include namespace Ui { class MainWindow; @@ -57,11 +58,16 @@ public: private: Ui::MainWindow *ui; + QMap recognizerMap; + private slots: void detectedShake(const QString&); void onShake(); void on_pushButton_clicked(); + + void on_startPushButton_clicked(); + void on_stopPushButton_clicked(); }; #endif // MAINWINDOW_H diff --git a/examples/sensors/sensorgestures/mainwindow.ui b/examples/sensors/sensorgestures/mainwindow.ui index b0bff42d..baccf98c 100644 --- a/examples/sensors/sensorgestures/mainwindow.ui +++ b/examples/sensors/sensorgestures/mainwindow.ui @@ -6,8 +6,8 @@ 0 0 - 400 - 300 + 423 + 474 @@ -15,18 +15,41 @@ - + + + + + Gesture Recognizer Id + + + + + + + + Start + + + + + + + Stop + + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:8pt;">hello</span></p></body></html> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;"></p></body></html> - + Clear @@ -40,7 +63,7 @@ p, li { white-space: pre-wrap; } 0 0 - 400 + 423 22 diff --git a/examples/sensors/sensors.pro b/examples/sensors/sensors.pro index 9826b522..50b5fac0 100644 --- a/examples/sensors/sensors.pro +++ b/examples/sensors/sensors.pro @@ -2,8 +2,8 @@ TEMPLATE = subdirs SUBDIRS += \ accel\ - grue - -contains(QT_CONFIG,widgets):SUBDIRS += \ - sensor_explorer \ + grue \ sensorgestures + +#contains(QT_CONFIG,widgets):SUBDIRS += \ + # sensor_explorer \ -- cgit v1.2.3