From 1a2c653e3ef82de04906e88bdf2ec5efada324f9 Mon Sep 17 00:00:00 2001 From: Wolfgang Beck Date: Fri, 30 Dec 2011 12:53:45 +1000 Subject: Convert sensor explorer example into a QML based application Change-Id: If8628363c4998dabf85cad4277df088be23e3ff4 Sanity-Review: Qt Sanity Bot Reviewed-by: Zsolt Simon --- examples/sensors/sensor_explorer/explorer.cpp | 450 --------------------- examples/sensors/sensor_explorer/explorer.h | 83 ---- examples/sensors/sensor_explorer/explorer.ui | 406 ------------------- .../sensors/sensor_explorer/import/explorer.cpp | 138 +++++++ examples/sensors/sensor_explorer/import/explorer.h | 79 ++++ examples/sensors/sensor_explorer/import/import.pro | 24 ++ examples/sensors/sensor_explorer/import/main.cpp | 67 +++ .../sensor_explorer/import/propertyinfo.cpp | 140 +++++++ .../sensors/sensor_explorer/import/propertyinfo.h | 83 ++++ examples/sensors/sensor_explorer/import/qmldir | 1 + .../sensor_explorer/import/qsensorsimport.pri | 27 ++ .../sensors/sensor_explorer/import/sensoritem.cpp | 317 +++++++++++++++ .../sensors/sensor_explorer/import/sensoritem.h | 96 +++++ examples/sensors/sensor_explorer/main.cpp | 50 --- .../sensors/sensor_explorer/qml_app/Button.qml | 75 ++++ .../sensor_explorer/qml_app/PropertyList.qml | 130 ++++++ .../sensors/sensor_explorer/qml_app/SensorList.qml | 149 +++++++ .../sensors/sensor_explorer/qml_app/TextField.qml | 103 +++++ examples/sensors/sensor_explorer/qml_app/icon.png | Bin 0 -> 2205 bytes .../qml_app/images/button_background_disabled.png | Bin 0 -> 579 bytes .../qml_app/images/button_background_normal.png | Bin 0 -> 901 bytes .../qml_app/images/button_background_pressed.png | Bin 0 -> 334 bytes .../qml_app/images/listitem_select.png | Bin 0 -> 156 bytes .../images/textfield_background_disabled.png | Bin 0 -> 936 bytes .../qml_app/images/textfield_background_normal.png | Bin 0 -> 767 bytes examples/sensors/sensor_explorer/qml_app/info.json | 15 + examples/sensors/sensor_explorer/qml_app/main.qml | 192 +++++++++ .../sensor_explorer/qml_app/qml_app.qmlproject | 18 + .../sensors/sensor_explorer/sensor_explorer.pro | 16 +- 29 files changed, 1656 insertions(+), 1003 deletions(-) delete mode 100644 examples/sensors/sensor_explorer/explorer.cpp delete mode 100644 examples/sensors/sensor_explorer/explorer.h delete mode 100644 examples/sensors/sensor_explorer/explorer.ui create mode 100644 examples/sensors/sensor_explorer/import/explorer.cpp create mode 100644 examples/sensors/sensor_explorer/import/explorer.h create mode 100644 examples/sensors/sensor_explorer/import/import.pro create mode 100644 examples/sensors/sensor_explorer/import/main.cpp create mode 100644 examples/sensors/sensor_explorer/import/propertyinfo.cpp create mode 100644 examples/sensors/sensor_explorer/import/propertyinfo.h create mode 100644 examples/sensors/sensor_explorer/import/qmldir create mode 100644 examples/sensors/sensor_explorer/import/qsensorsimport.pri create mode 100644 examples/sensors/sensor_explorer/import/sensoritem.cpp create mode 100644 examples/sensors/sensor_explorer/import/sensoritem.h delete mode 100644 examples/sensors/sensor_explorer/main.cpp create mode 100644 examples/sensors/sensor_explorer/qml_app/Button.qml create mode 100644 examples/sensors/sensor_explorer/qml_app/PropertyList.qml create mode 100644 examples/sensors/sensor_explorer/qml_app/SensorList.qml create mode 100644 examples/sensors/sensor_explorer/qml_app/TextField.qml create mode 100755 examples/sensors/sensor_explorer/qml_app/icon.png create mode 100644 examples/sensors/sensor_explorer/qml_app/images/button_background_disabled.png create mode 100644 examples/sensors/sensor_explorer/qml_app/images/button_background_normal.png create mode 100644 examples/sensors/sensor_explorer/qml_app/images/button_background_pressed.png create mode 100644 examples/sensors/sensor_explorer/qml_app/images/listitem_select.png create mode 100644 examples/sensors/sensor_explorer/qml_app/images/textfield_background_disabled.png create mode 100644 examples/sensors/sensor_explorer/qml_app/images/textfield_background_normal.png create mode 100644 examples/sensors/sensor_explorer/qml_app/info.json create mode 100644 examples/sensors/sensor_explorer/qml_app/main.qml create mode 100644 examples/sensors/sensor_explorer/qml_app/qml_app.qmlproject (limited to 'examples/sensors/sensor_explorer') diff --git a/examples/sensors/sensor_explorer/explorer.cpp b/examples/sensors/sensor_explorer/explorer.cpp deleted file mode 100644 index e8fd3f5..0000000 --- a/examples/sensors/sensor_explorer/explorer.cpp +++ /dev/null @@ -1,450 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtSensors module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:BSD$ -** You may use this file under the terms of the BSD license as follows: -** -** "Redistribution and use in source and binary forms, with or without -** modification, are permitted provided that the following conditions are -** met: -** * Redistributions of source code must retain the above copyright -** notice, this list of conditions and the following disclaimer. -** * Redistributions in binary form must reproduce the above copyright -** notice, this list of conditions and the following disclaimer in -** the documentation and/or other materials provided with the -** distribution. -** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor -** the names of its contributors may be used to endorse or promote -** products derived from this software without specific prior written -** permission. -** -** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "explorer.h" -#include -#include -#include -#include -#include - -Explorer::Explorer(QWidget *parent) - : QMainWindow(parent) - , m_sensor(0) - , ignoreItemChanged(false) -{ - ui.setupUi(this); -#ifdef MAEMO5 - ui.label->hide(); -#endif - // Clear out example data from the .ui file - ui.sensors->clear(); - clearSensorProperties(); - clearReading(); - - // Force types to be registered - (void)QSensor::sensorTypes(); - // Listen for changes to the registered types - QSensor *sensor = new QSensor(QByteArray(), this); - connect(sensor, SIGNAL(availableSensorsChanged()), this, SLOT(loadSensors())); -} - -Explorer::~Explorer() -{ -} - -void Explorer::loadSensors() -{ - qDebug() << "Explorer::loadSensors"; - - // Clear out anything that's in there now - ui.sensors->clear(); - - foreach (const QByteArray &type, QSensor::sensorTypes()) { - qDebug() << "Found type" << type; - foreach (const QByteArray &identifier, QSensor::sensorsForType(type)) { - qDebug() << "Found identifier" << identifier; - // Don't put in sensors we can't connect to - QSensor sensor(type); - sensor.setIdentifier(identifier); - if (!sensor.connectToBackend()) { - qDebug() << "Couldn't connect to" << identifier; - continue; - } - - qDebug() << "Adding identifier" << identifier; - QTreeWidgetItem *item = new QTreeWidgetItem(QStringList() << QString::fromLatin1(identifier)); - item->setData(0, Qt::UserRole, QString::fromLatin1(type)); - ui.sensors->addTopLevelItem(item); - } - } - - if (ui.sensors->topLevelItemCount() == 0) { - QTreeWidgetItem *item = new QTreeWidgetItem(QStringList() << tr("No Sensors Found")); - item->setData(0, Qt::UserRole, QString()); - ui.sensors->addTopLevelItem(item); - } - - ui.sensors->setCurrentItem(0); - ui.scrollArea->hide(); - - resizeSensors(); -} - -void Explorer::resizeSensors() -{ - ui.sensors->resizeColumnToContents(0); - int length = ui.sensors->header()->length() + 4; - ui.sensors->setFixedWidth(length); -} - -void Explorer::on_sensors_currentItemChanged() -{ - qDebug() << "Explorer::sensorSelected"; - - // Clear out anything that's in there now - if (m_sensor) { - delete m_sensor; - m_sensor = 0; - } - clearSensorProperties(); - clearReading(); - ui.scrollArea->hide(); - - // Check that we've selected an item - QTreeWidgetItem *item = ui.sensors->currentItem(); - if (!item) { - qWarning() << "Didn't select an item!"; - return; - } - - QByteArray type = item->data(0, Qt::UserRole).toString().toLatin1(); - QByteArray identifier = item->data(0, Qt::DisplayRole).toString().toLatin1(); - - if (type.isEmpty()) { - // Uh oh, there aren't any sensors. - // The user has clicked the dummy list entry so just ignore it. - return; - } - - // Connect to the sensor so we can probe it - m_sensor = new QSensor(type, this); - connect(m_sensor, SIGNAL(readingChanged()), this, SLOT(sensor_changed())); - m_sensor->setIdentifier(identifier); - if (!m_sensor->connectToBackend()) { - delete m_sensor; - m_sensor = 0; - qWarning() << "Can't connect to the sensor!"; - return; - } - - ui.scrollArea->show(); - loadSensorProperties(); - loadReading(); - - adjustTableColumns(ui.sensorprops); - adjustTableColumns(ui.reading); - QTimer::singleShot(100, this, SLOT(adjustSizes())); -} - -void Explorer::clearReading() -{ - ui.reading->setRowCount(0); -} - -void Explorer::loadReading() -{ - // Probe the reading using Qt's meta-object facilities - QSensorReading *reading = m_sensor->reading(); - const QMetaObject *mo = reading->metaObject(); - int firstProperty = QSensorReading::staticMetaObject.propertyOffset(); - - ui.reading->setRowCount(mo->propertyCount() - firstProperty); - - for (int i = firstProperty; i < mo->propertyCount(); ++i) { - int row = i - firstProperty; - QTableWidgetItem *index; - if (row == 0) - // timestamp is not available via index - index = new QTableWidgetItem(QLatin1String("N/A")); - else - index = new QTableWidgetItem(QVariant(row - 1).toString()); - QTableWidgetItem *prop = new QTableWidgetItem(mo->property(i).name()); - QString typeName = QLatin1String(mo->property(i).typeName()); - int crap = typeName.lastIndexOf("::"); - if (crap != -1) - typeName = typeName.mid(crap + 2); - QTableWidgetItem *type = new QTableWidgetItem(typeName); - QTableWidgetItem *value = new QTableWidgetItem(); - - index->setFlags(value->flags() ^ Qt::ItemIsEditable); - prop->setFlags(value->flags() ^ Qt::ItemIsEditable); - type->setFlags(value->flags() ^ Qt::ItemIsEditable); - value->setFlags(value->flags() ^ Qt::ItemIsEditable); - - ui.reading->setItem(row, 0, index); - ui.reading->setItem(row, 1, prop); - ui.reading->setItem(row, 2, type); - ui.reading->setItem(row, 3, value); - } -} - -void Explorer::clearSensorProperties() -{ - ui.sensorprops->setRowCount(0); -} - -void Explorer::loadSensorProperties() -{ - ignoreItemChanged = true; - - // Probe the sensor using Qt's meta-object facilities - const QMetaObject *mo = m_sensor->metaObject(); - int firstProperty = QSensor::staticMetaObject.propertyOffset(); - - int rows = mo->propertyCount() - firstProperty; - ui.sensorprops->setRowCount(rows); - - int offset = 0; - for (int i = firstProperty; i < mo->propertyCount(); ++i) { - int row = i - firstProperty - offset; - QLatin1String name(mo->property(i).name()); - if (name == "sensorid" || - //name == "type" || - name == "reading" || - name == "connected" || - name == "running" || - name == "supportsPolling") { - ++offset; - continue; - } - QTableWidgetItem *prop = new QTableWidgetItem(name); - QString typeName = QLatin1String(mo->property(i).typeName()); - int crap = typeName.lastIndexOf("::"); - if (crap != -1) - typeName = typeName.mid(crap + 2); - QTableWidgetItem *type = new QTableWidgetItem(typeName); - QVariant v = mo->property(i).read(m_sensor); - QString val; - if (typeName == "qrangelist") { - qrangelist rl = v.value(); - QStringList out; - foreach (const qrange &r, rl) { - if (r.first == r.second) - out << QString("%1 Hz").arg(r.first); - else - out << QString("%1-%2 Hz").arg(r.first).arg(r.second); - } - val = out.join(", "); - } else if (typeName == "qoutputrangelist") { - qoutputrangelist rl = v.value(); - QStringList out; - foreach (const qoutputrange &r, rl) { - out << QString("(%1, %2) += %3").arg(r.minimum).arg(r.maximum).arg(r.accuracy); - } - val = out.join(", "); - } else { - val = v.toString(); - } - QTableWidgetItem *value = new QTableWidgetItem(val); - - prop->setFlags(value->flags() ^ Qt::ItemIsEditable); - type->setFlags(value->flags() ^ Qt::ItemIsEditable); - if (!mo->property(i).isWritable()) { - // clear the editable flag - value->setFlags(value->flags() ^ Qt::ItemIsEditable); - } - - ui.sensorprops->setItem(row, 0, prop); - ui.sensorprops->setItem(row, 1, type); - ui.sensorprops->setItem(row, 2, value); - } - - // We don't add all properties - ui.sensorprops->setRowCount(rows - offset); - - ignoreItemChanged = false; -} - -void Explorer::showEvent(QShowEvent *event) -{ - // Once we're visible, load the sensors - // (don't delay showing the UI while we load plugins, connect to backends, etc.) - QTimer::singleShot(0, this, SLOT(loadSensors())); - - QMainWindow::showEvent(event); -} - -// Resize columns to fit the space. -// This shouldn't be so hard! -void Explorer::adjustTableColumns(QTableWidget *table) -{ - if (table->rowCount() == 0) { - table->setFixedHeight(0); - return; - } - - // At least this is easy to do - table->resizeColumnsToContents(); - int length = table->verticalHeader()->length(); - length += (length / static_cast(table->verticalHeader()->count())); // Add 1 more (the header itself) -#ifdef MAEMO5 - length += 10; // required for N900 UI -#endif - table->setFixedHeight(length); - - int columns = table->columnCount(); - QList width; - int suggestedWidth = 0; - for (int i = 0; i < columns; ++i) { - int cwidth = table->columnWidth(i); - width << cwidth; - suggestedWidth += cwidth; - } - - int actualWidth = table->size().width(); - //qDebug() << "suggestedWidth" << suggestedWidth << "actualWidth" << actualWidth; - - // We only scale the columns up, we don't scale down - if (actualWidth <= suggestedWidth) - return; - - qreal multiplier = actualWidth / static_cast(suggestedWidth); - int currentSpace = 4; - for (int i = 0; i < columns; ++i) { - width[i] = multiplier * width[i]; - currentSpace += width[i]; - } - - // It ends up too big due to cell decorations or something. - // Make things smaller one pixel at a time in round robin fashion until we're good. - int i = 0; - while (currentSpace > actualWidth) { - --width[i]; - --currentSpace; - i = (i + 1) % columns; - } - - for (int i = 0; i < columns; ++i) { - table->setColumnWidth(i, width[i]); - } - - table->setMinimumWidth(suggestedWidth); -} - -void Explorer::adjustSizes() -{ - adjustTableColumns(ui.reading); - adjustTableColumns(ui.sensorprops); -} - -void Explorer::resizeEvent(QResizeEvent *event) -{ - resizeSensors(); - adjustSizes(); - - QMainWindow::resizeEvent(event); -} - -void Explorer::on_start_clicked() -{ - m_sensor->start(); - QTimer::singleShot(0, this, SLOT(loadSensorProperties())); -} - -void Explorer::on_stop_clicked() -{ - m_sensor->stop(); - QTimer::singleShot(0, this, SLOT(loadSensorProperties())); -} - -void Explorer::sensor_changed() -{ - QSensorReading *reading = m_sensor->reading(); - filter(reading); -} - -bool Explorer::filter(QSensorReading *reading) -{ - const QMetaObject *mo = reading->metaObject(); - int firstProperty = QSensorReading::staticMetaObject.propertyOffset(); - - for (int i = firstProperty; i < mo->propertyCount(); ++i) { - int row = i - firstProperty; - QString typeName = QLatin1String(mo->property(i).typeName()); - int crap = typeName.lastIndexOf("::"); - if (crap != -1) - typeName = typeName.mid(crap + 2); - QLatin1String name(mo->property(i).name()); - QTableWidgetItem *value = ui.reading->item(row, 3); - QVariant val = mo->property(i).read(reading); - if (typeName == "qtimestamp") { - value->setText(QString("%1").arg(val.value())); - } else if (typeName == "LightLevel") { - QString text; - switch (val.toInt()) { - case 1: - text = "Dark"; - break; - case 2: - text = "Twilight"; - break; - case 3: - text = "Light"; - break; - case 4: - text = "Bright"; - break; - case 5: - text = "Sunny"; - break; - default: - text = "Undefined"; - break; - } - value->setText(text); - } else { - value->setText(val.toString()); - } - } - - adjustTableColumns(ui.reading); - //QTimer::singleShot(0, this, SLOT(adjustSizes())); - - return false; -} - -void Explorer::on_sensorprops_itemChanged(QTableWidgetItem *item) -{ - if (ignoreItemChanged) - return; - if (!(item->flags() & Qt::ItemIsEditable)) - return; - - int row = item->row(); - QString name = ui.sensorprops->item(row, 0)->text(); - QVariant value = item->text(); - - qDebug() << "setProperty" << name << value; - m_sensor->setProperty(name.toLatin1().constData(), QVariant(value)); - - QTimer::singleShot(0, this, SLOT(loadSensorProperties())); -} - diff --git a/examples/sensors/sensor_explorer/explorer.h b/examples/sensors/sensor_explorer/explorer.h deleted file mode 100644 index 18887fe..0000000 --- a/examples/sensors/sensor_explorer/explorer.h +++ /dev/null @@ -1,83 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtSensors module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:BSD$ -** You may use this file under the terms of the BSD license as follows: -** -** "Redistribution and use in source and binary forms, with or without -** modification, are permitted provided that the following conditions are -** met: -** * Redistributions of source code must retain the above copyright -** notice, this list of conditions and the following disclaimer. -** * Redistributions in binary form must reproduce the above copyright -** notice, this list of conditions and the following disclaimer in -** the documentation and/or other materials provided with the -** distribution. -** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor -** the names of its contributors may be used to endorse or promote -** products derived from this software without specific prior written -** permission. -** -** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef EXPLORER_H -#define EXPLORER_H - -#include -#include -#include - -class Explorer : public QMainWindow, public QSensorFilter -{ - Q_OBJECT -public: - Explorer(QWidget *parent = 0); - ~Explorer(); - - bool filter(QSensorReading *reading); - -private slots: - void loadSensors(); - void on_sensors_currentItemChanged(); - void on_sensorprops_itemChanged(QTableWidgetItem *item); - void on_start_clicked(); - void on_stop_clicked(); - void sensor_changed(); - void adjustSizes(); - void loadSensorProperties(); - -private: - void showEvent(QShowEvent *event); - void resizeEvent(QResizeEvent *event); - - void clearReading(); - void loadReading(); - void clearSensorProperties(); - void adjustTableColumns(QTableWidget *table); - void resizeSensors(); - - Ui::Explorer ui; - QSensor *m_sensor; - bool ignoreItemChanged; -}; - -#endif - diff --git a/examples/sensors/sensor_explorer/explorer.ui b/examples/sensors/sensor_explorer/explorer.ui deleted file mode 100644 index 166e9c3..0000000 --- a/examples/sensors/sensor_explorer/explorer.ui +++ /dev/null @@ -1,406 +0,0 @@ - - - Explorer - - - - 0 - 0 - 760 - 636 - - - - - 0 - 0 - - - - MainWindow - - - - - 9 - - - - - Sensors that were detected on the device are listed in the list on the left, grouped by type. The reading properties for the sensor will be presented on the right. - - - Qt::AutoText - - - true - - - - - - - - 9 - - - 0 - - - - - - 9 - - - 0 - - - - - Sensor - - - sensors - - - - - - - - 0 - 0 - - - - true - - - QAbstractItemView::SelectRows - - - false - - - false - - - false - - - false - - - false - - - - Sensor - - - - - dummy.accelerometer - - - - - - - - - - - QFrame::NoFrame - - - true - - - - - 0 - 0 - 477 - 556 - - - - - 9 - - - 0 - - - - - - 0 - 0 - - - - - 9 - - - 0 - - - - - Sensor Properties - - - - - - - - 0 - 0 - - - - Qt::ScrollBarAlwaysOff - - - true - - - 3 - - - false - - - false - - - - 1 - - - - - Name - - - - - Type - - - - - Value - - - - - supportedIntervals - - - - - qrangelist - - - - - - - - - - - - - - - - - 9 - - - 0 - - - - - start - - - - - - - stop - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - - - - 0 - 0 - - - - - 9 - - - 0 - - - - - Reading Properties - - - - - - - - 0 - 0 - - - - Qt::ScrollBarAlwaysOff - - - true - - - 4 - - - false - - - false - - - - 1 - - - - - 2 - - - - - Index - - - - - Value - - - - - Type - - - - - Value - - - - - 0 - - - - - x - - - - - qreal - - - - - 9.8 - - - - - 0 - - - - - changeOfBeingEaten - - - - - bool - - - - - true - - - - - - - - - - - Qt::Vertical - - - - 0 - 18 - - - - - - - - - - - - - - - - - - diff --git a/examples/sensors/sensor_explorer/import/explorer.cpp b/examples/sensors/sensor_explorer/import/explorer.cpp new file mode 100644 index 0000000..65f2472 --- /dev/null +++ b/examples/sensors/sensor_explorer/import/explorer.cpp @@ -0,0 +1,138 @@ +/**************************************************************************** +** +** 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 QtSensors module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** GNU Lesser General Public License Usage +** 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, Nokia gives you certain additional +** rights. These rights are described in the Nokia 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. +** +** 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$ +** +****************************************************************************/ + +#include "explorer.h" +#include +#include +#include +#include + +QT_BEGIN_NAMESPACE + +/*! + \class QSensorExplorer + \brief The QSensorExplorer element provides an easy access for reading all avalaible sensors installed on the system. +*/ + +/*! + Construct a QSensorExplorer object with parent \a parent +*/ +QSensorExplorer::QSensorExplorer(QObject* parent) + : QObject(parent) + , _selectedSensorItem(0) +{ + loadSensors(); +} + +/*! + Destructor of a QSensorExplorer +*/ +QSensorExplorer::~QSensorExplorer() +{ +} + +/*! + Load all available sensors and store it in a list. +*/ +void QSensorExplorer::loadSensors() +{ + //! [0] + _availableSensors.clear(); + + foreach (const QByteArray &type, QSensor::sensorTypes()) { + qDebug() << "Found type" << type; + foreach (const QByteArray &identifier, QSensor::sensorsForType(type)) { + qDebug() << "Found identifier" << identifier; + // Don't put in sensors we can't connect to + QSensor* sensor = new QSensor(type, this); + sensor->setIdentifier(identifier); + if (!sensor->connectToBackend()) { + qDebug() << "Couldn't connect to" << identifier; + continue; + } + + qDebug() << "Adding identifier" << identifier; + _availableSensors.append(new QSensorItem(sensor, this)); + } + } + emit availableSensorsChanged(); + //! [0] +} + +/*! + \fn QSensorExplorer::availableSensorsChanged() + Notifies the client if the list of the available sensors was changed +*/ + +/*! + \property QSensorExplorer::availableSensors + Returns a list of all available sensor. +*/ +QDeclarativeListProperty QSensorExplorer::availableSensors() +{ + return QDeclarativeListProperty(this,_availableSensors); +} + +/*! + \property QSensorExplorer::selectedSensorItem + Returns the current selected sensor item. +*/ +QSensorItem* QSensorExplorer::selectedSensorItem() +{ + return _selectedSensorItem; +} + +/*! + \fn QSensorExplorer::setSelectedSensorItem(QSensorItem* selitem) + Sets the QSensorItem \a selitem as the current selected QSensorItem. +*/ +void QSensorExplorer::setSelectedSensorItem(QSensorItem* selitem) +{ + if (selitem && _selectedSensorItem != selitem) { + if (_selectedSensorItem) + _selectedSensorItem->unSelect(); + _selectedSensorItem = selitem; + _selectedSensorItem->select(); + emit selectedSensorItemChanged(); + } +} + +QT_END_NAMESPACE diff --git a/examples/sensors/sensor_explorer/import/explorer.h b/examples/sensors/sensor_explorer/import/explorer.h new file mode 100644 index 0000000..b32e6bd --- /dev/null +++ b/examples/sensors/sensor_explorer/import/explorer.h @@ -0,0 +1,79 @@ +/**************************************************************************** +** +** 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 QtSensors module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** GNU Lesser General Public License Usage +** 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, Nokia gives you certain additional +** rights. These rights are described in the Nokia 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. +** +** 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$ +** +****************************************************************************/ + +#ifndef QSEONSOREXPLORER_H +#define QSEONSOREXPLORER_H + +#include +#include +#include "sensoritem.h" + +QT_BEGIN_NAMESPACE + +class QSensorExplorer : public QObject +{ + Q_OBJECT + Q_PROPERTY(QDeclarativeListProperty availableSensors READ availableSensors NOTIFY availableSensorsChanged) + Q_PROPERTY(QSensorItem* selectedSensorItem READ selectedSensorItem WRITE setSelectedSensorItem NOTIFY selectedSensorItemChanged) +public: + QSensorExplorer(QObject* parent = 0); + virtual ~QSensorExplorer(); + +private: + QDeclarativeListProperty availableSensors(); + void loadSensors(); + void setSelectedSensorItem(QSensorItem* selitem); + QSensorItem* selectedSensorItem(); + +Q_SIGNALS: + void availableSensorsChanged(); + void selectedSensorItemChanged(); + +private: + QList _availableSensors; + QSensorItem* _selectedSensorItem; +}; + +QT_END_NAMESPACE + +QML_DECLARE_TYPE(QSensorExplorer) + +#endif // QSEONSOREXPLORER_H diff --git a/examples/sensors/sensor_explorer/import/import.pro b/examples/sensors/sensor_explorer/import/import.pro new file mode 100644 index 0000000..7baec42 --- /dev/null +++ b/examples/sensors/sensor_explorer/import/import.pro @@ -0,0 +1,24 @@ +TARGET = declarative_explorer +TARGETPATH = Explorer + +include(qsensorsimport.pri) + +QT += declarative sensors + +SOURCES = main.cpp explorer.cpp sensoritem.cpp propertyinfo.cpp +HEADERS = explorer.h sensoritem.h propertyinfo.h + +symbian { + TARGET.EPOCALLOWDLLDATA = 1 + TARGET.CAPABILITY = ALL -TCB +} + +!isEmpty(EXAMPLES_PREFIX):DESTPATH=$$EXAMPLES_PREFIX/sensor_explorer/imports/Explorer +else:DESTPATH=$$[QT_INSTALL_IMPORTS]/Explorer + +target.path=$$DESTPATH +INSTALLS += target + +qmldir.files=$$PWD/qmldir +qmldir.path=$$DESTPATH +INSTALLS += qmldir diff --git a/examples/sensors/sensor_explorer/import/main.cpp b/examples/sensors/sensor_explorer/import/main.cpp new file mode 100644 index 0000000..df4db20 --- /dev/null +++ b/examples/sensors/sensor_explorer/import/main.cpp @@ -0,0 +1,67 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtSensors module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include +#include "explorer.h" +#include + +QT_BEGIN_NAMESPACE + +class SensorExplorerDeclarativeModule : public QDeclarativeExtensionPlugin +{ + Q_OBJECT +public: + virtual void registerTypes(const char *uri) + { + qDebug() << "SensorExplorerDeclarativeModule::registerTypes(const char *uri)"; + + Q_ASSERT(QLatin1String(uri) == QLatin1String("Explorer")); + qmlRegisterType(uri, 1, 0, "SensorExplorer"); + qmlRegisterType(uri, 1, 0, "SensorItem"); + qmlRegisterType(uri, 1, 0, "PropertyInfo"); + } +}; + +QT_END_NAMESPACE + +#include "main.moc" + +Q_EXPORT_PLUGIN2(sensorexplorerdeclarativemodule, QT_PREPEND_NAMESPACE(SensorExplorerDeclarativeModule)) diff --git a/examples/sensors/sensor_explorer/import/propertyinfo.cpp b/examples/sensors/sensor_explorer/import/propertyinfo.cpp new file mode 100644 index 0000000..6ddcd3f --- /dev/null +++ b/examples/sensors/sensor_explorer/import/propertyinfo.cpp @@ -0,0 +1,140 @@ +/**************************************************************************** +** +** 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 QtSensors module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** GNU Lesser General Public License Usage +** 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, Nokia gives you certain additional +** rights. These rights are described in the Nokia 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. +** +** 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$ +** +****************************************************************************/ + +#include "sensoritem.h" +#include +#include + +QT_BEGIN_NAMESPACE + +/*! + \class QPropertyInfo + \brief The QPropertyInfo element provides an easy access for reading and writing the property values. +*/ + +/*! + Construct a QPropertyInfo object with parent \a parent +*/ +QPropertyInfo::QPropertyInfo(QObject* parent) + : QObject(parent) + , _index(0) + , _isWriteable(false) + , _name("") + , _typeName("") + , _value("") +{} + +/*! + Construct a QPropertyInfo object with parent \a parent, property name \a name, property index \a index, + property write access \a writeable, property type \a typeName and property value \a value +*/ +QPropertyInfo::QPropertyInfo(const QString& name, int index, bool writeable, const QString& typeName, const QString& value, QObject* parent) + : QObject(parent) + , _index(index) + , _isWriteable(writeable) + , _name(name) + , _typeName(typeName) + , _value(value) +{} + +/*! + \property QPropertyInfo::name + Returns the name of the property +*/ +QString QPropertyInfo::name() +{ + return _name; +} + +/*! + \property QPropertyInfo::typeName + Returns the type of the property +*/ +QString QPropertyInfo::typeName() +{ + return _typeName; +} + +/*! + \property QPropertyInfo::value + Returns the current value of the property +*/ +QString QPropertyInfo::value() +{ + return _value; +} + +/*! + \fn void QPropertyInfo::valueChanged() + Signal that notifies the client if the property value was changed. +*/ + +/*! + \fn QPropertyInfo::setValue(const QString& value) + Sets the value \a value of the property +*/ +void QPropertyInfo::setValue(const QString& value) +{ + if (value != _value){ + _value = value; + emit valueChanged(); + } +} + +/*! + \fn QPropertyInfo::index() + Returns the meta-data index of the property +*/ +int QPropertyInfo::index() +{ + return _index; +} + +/*! + \property QPropertyInfo::isWriteable + Returns true if the property is writeable false if property is read only +*/ +bool QPropertyInfo::isWriteable() +{ + return _isWriteable; +} + +QT_END_NAMESPACE diff --git a/examples/sensors/sensor_explorer/import/propertyinfo.h b/examples/sensors/sensor_explorer/import/propertyinfo.h new file mode 100644 index 0000000..4f693e8 --- /dev/null +++ b/examples/sensors/sensor_explorer/import/propertyinfo.h @@ -0,0 +1,83 @@ +/**************************************************************************** +** +** 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 QtSensors module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** GNU Lesser General Public License Usage +** 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, Nokia gives you certain additional +** rights. These rights are described in the Nokia 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. +** +** 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$ +** +****************************************************************************/ + +#ifndef QPROPERTYINFO_H +#define QPROPERTYINFO_H + +#include +#include + +QT_BEGIN_NAMESPACE + +class QPropertyInfo : public QObject +{ + Q_OBJECT + Q_PROPERTY(QString name READ name CONSTANT) + Q_PROPERTY(QString typeName READ typeName CONSTANT) + Q_PROPERTY(QString value READ value NOTIFY valueChanged) + Q_PROPERTY(bool isWriteable READ isWriteable CONSTANT) + +public: + QPropertyInfo(QObject* parent = 0); + QPropertyInfo(const QString& name, int index, bool writeable, const QString& typeName, const QString& value, QObject* parent=0); + QString name(); + QString typeName(); + QString value(); + void setValue(const QString& value); + int index(); + bool isWriteable(); + +Q_SIGNALS: + void valueChanged(); + +private: + int _index; + bool _isWriteable; + QString _name; + QString _typeName; + QString _value; +}; + +QT_END_NAMESPACE + +QML_DECLARE_TYPE(QPropertyInfo) + +#endif // QPROPERTYINFO_H diff --git a/examples/sensors/sensor_explorer/import/qmldir b/examples/sensors/sensor_explorer/import/qmldir new file mode 100644 index 0000000..60d8f88 --- /dev/null +++ b/examples/sensors/sensor_explorer/import/qmldir @@ -0,0 +1 @@ +plugin declarative_explorer diff --git a/examples/sensors/sensor_explorer/import/qsensorsimport.pri b/examples/sensors/sensor_explorer/import/qsensorsimport.pri new file mode 100644 index 0000000..b8af2b7 --- /dev/null +++ b/examples/sensors/sensor_explorer/import/qsensorsimport.pri @@ -0,0 +1,27 @@ +load(qt_module) + +symbian:load(qt_plugin) +TEMPLATE = lib +CONFIG += qt plugin + +win32|mac:!wince*:!win32-msvc:!macx-xcode:CONFIG += debug_and_release + +isEmpty(TARGETPATH) { + error("qimportbase.pri: You must provide a TARGETPATH!") +} +isEmpty(TARGET) { + error("qimportbase.pri: You must provide a TARGET!") +} + +TARGET = $$qtLibraryTarget($$TARGET) +contains(QT_CONFIG, reduce_exports):CONFIG += hide_symbols + +load(qt_targets) + +wince*:LIBS += $$QMAKE_LIBS_GUI + +symbian: { + TARGET.EPOCALLOWDLLDATA=1 + TARGET.CAPABILITY = All -Tcb + load(armcc_warnings) +} diff --git a/examples/sensors/sensor_explorer/import/sensoritem.cpp b/examples/sensors/sensor_explorer/import/sensoritem.cpp new file mode 100644 index 0000000..21fc776 --- /dev/null +++ b/examples/sensors/sensor_explorer/import/sensoritem.cpp @@ -0,0 +1,317 @@ +/**************************************************************************** +** +** 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 QtSensors module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** GNU Lesser General Public License Usage +** 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, Nokia gives you certain additional +** rights. These rights are described in the Nokia 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. +** +** 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$ +** +****************************************************************************/ + +#include "sensoritem.h" +#include +#include + +QT_BEGIN_NAMESPACE + +/*! + \class QSensorItem + \brief The QSensorItem element provides information about the meta-datas from a sensors installed on the system. +*/ + +/*! + Construct a QSensorItem object with parent \a parent +*/ +QSensorItem::QSensorItem(QObject* parent) + : QObject(parent) + , _qsensor(0) +{ +} + +/*! + Construct a QSensorItem object with QSensor \a sensor and parent \a parent +*/ +QSensorItem::QSensorItem(QSensor* sensor, QObject* parent) + : QObject(parent) + , _qsensor(sensor) +{ +} + +/*! + Destructor of a QSensorItem +*/ +QSensorItem::~QSensorItem() +{ +} + +/*! + \property QSensorItem::start + This property starts or stops the sensor +*/ +bool QSensorItem::start() +{ + return (_qsensor ? _qsensor->isActive() : false); +} + +void QSensorItem::setStart(bool run) +{ + if (_qsensor) + _qsensor->setActive(run); +} + +/*! + \property QSensorItem::id + Returns the sensor id of the sensor item +*/ +QString QSensorItem::id() +{ + return (_qsensor ? _qsensor->identifier() : ""); +} + +/*! + Set the new value \a val to the QPropertyInfo object \a property +*/ +void QSensorItem::changePropertyValue(QPropertyInfo* property, const QString& val) +{ + if (_qsensor && _sensorProperties.contains(property)){ + if ( _qsensor->setProperty(property->name().toLatin1().constData(), QVariant(val))) + updateSensorPropertyValues(); + else + qWarning() << "new property value couldn't be set"; + } +} + +/*! + Reading the meta-datas and activates the sensor. +*/ +void QSensorItem::select() +{ + if (_sensorProperties.isEmpty()) { + // Probe the reading using Qt's meta-object facilities + //Read properties from reader + QSensorReading *reading = _qsensor->reading(); + const QMetaObject *mo = reading->metaObject(); + int firstProperty = QSensorReading::staticMetaObject.propertyOffset(); + + for (int i = firstProperty; i < mo->propertyCount(); ++i) { + QString typeName = QLatin1String(mo->property(i).typeName()); + int crap = typeName.lastIndexOf("::"); + if (crap != -1) + typeName = typeName.mid(crap + 2); + + QPropertyInfo* pi = new QPropertyInfo(mo->property(i).name() + , i + , isWriteable(mo->property(i).name()) + , typeName + , "-" + , this); + _readerProperties.append(pi); + } + + //Read properties from sensor + const QMetaObject *mo1 = _qsensor->metaObject(); + firstProperty = QSensorReading::staticMetaObject.propertyOffset(); + + for (int i = firstProperty; i < mo1->propertyCount(); ++i) { + QString propertyname = mo1->property(i).name(); + if (ignoreProperty(propertyname)) + continue; + + QString typeName = QLatin1String(mo1->property(i).typeName()); + int crap = typeName.lastIndexOf("::"); + if (crap != -1) + typeName = typeName.mid(crap + 2); + + QPropertyInfo* pi = new QPropertyInfo(propertyname + , i + , isWriteable(propertyname) + , typeName + , "-" + , this); + _sensorProperties.append(pi); + } + updateSensorPropertyValues(); + connect(_qsensor, SIGNAL(readingChanged()), this, SLOT(sensorReadingChanged())); + } + connect(_qsensor, SIGNAL(activeChanged()), SIGNAL(startChanged())); +} + +/*! + Unselect the sensor by stopping the sensor. +*/ +void QSensorItem::unSelect() +{ + _qsensor->stop(); + disconnect(_qsensor, SIGNAL(activeChanged()), this , SIGNAL(startChanged())); +} + +/*! + Updates the property values from QSensor +*/ +void QSensorItem::updateSensorPropertyValues() +{ + if (_qsensor){ + const QMetaObject *mo = _qsensor->metaObject(); + for (int i = 0; i < _sensorProperties.count(); i++){ + QVariant val = mo->property(_sensorProperties[i]->index()).read(_qsensor); + _sensorProperties[i]->setValue(convertValue(_sensorProperties[i]->typeName(), val)); + } + } +} + +/*! + \fn QSensorItem::propertiesChanged() + Notifies the client if the list of the properties was changed +*/ + +/*! + Updates the property values from the QSensorReader +*/ +void QSensorItem::sensorReadingChanged() +{ + QSensorReading *reading = _qsensor->reading(); + const QMetaObject *mo = reading->metaObject(); + for (int i = 0; i < _readerProperties.count(); i++){ + QVariant val = mo->property(_readerProperties[i]->index()).read(reading); + _readerProperties[i]->setValue(convertValue(_readerProperties[i]->typeName(), val)); + } +} + +/*! + Returns true if the property with the name \a propertyname should be ignored +*/ +bool QSensorItem::ignoreProperty(const QString& propertyname) +{ + if (propertyname == "reading" || + propertyname == "active" || + propertyname == "sensorid" || + propertyname == "connectedToBackend" || + propertyname == "busy") + return true; + + return false; +} + +/*! + Returns true if the property with the name \a propertyname is writeable +*/ +bool QSensorItem::isWriteable(const QString& propertyname) +{ + if (_qsensor){ + const QMetaObject *mo = _qsensor->metaObject(); + int propertyindex = mo->indexOfProperty(propertyname.toLocal8Bit().constData()); + if (propertyindex >= 0){ + QMetaProperty prop = mo->property(propertyindex); + return prop.isWritable(); + } + else { + QSensorReading *reading = _qsensor->reading(); + const QMetaObject *moreader = reading->metaObject(); + propertyindex = moreader->indexOfProperty(propertyname.toLocal8Bit().constData()); + if (propertyindex >= 0){ + QMetaProperty prop = mo->property(propertyindex); + return prop.isWritable(); + } + } + } + + return false; +} + +/*! + Convert the variant \a val dependend on the type \a type and returns the converted value as a QString +*/ +QString QSensorItem::convertValue(const QString& type, const QVariant& val) +{ + if (type == "LightLevel"){ + switch (val.toInt()) { + case 1: return "Dark"; + case 2: return "Twilight"; + case 3: return "Light"; + case 4: return "Bright"; + case 5: return "Sunny"; + default: return "Undefined"; + } + } + else if (type == "Orientation"){ + switch (val.toInt()) { + case 1: return "TopUp"; + case 2: return "TopDown"; + case 3: return "LeftUp"; + case 4: return "RightUp"; + case 5: return "FaceUp"; + case 6: return "FaceDown"; + default: return "Undefined"; + } + } + else if (type == "qrangelist"){ + qrangelist rangelist = val.value(); + QStringList ranges; + foreach (const qrange &r, rangelist) { + if (r.first == r.second) + ranges << QString("%1 Hz").arg(r.first); + else + ranges << QString("%1-%2 Hz").arg(r.first).arg(r.second); + } + if (ranges.count() > 0) + return ranges.join(", "); + return "-"; + } + else if (type == "qoutputrangelist") { + qoutputrangelist rangelist = val.value(); + QStringList ranges; + foreach (const qoutputrange &r, rangelist) { + ranges << QString("(%1, %2) += %3").arg(r.minimum).arg(r.maximum).arg(r.accuracy); + } + if (ranges.count() > 0) + return ranges.join(", "); + return "-"; + } + + return val.toString(); +} + +/*! + \property QSensorItem::properties + Returns a list of all properties from the sensor +*/ +QDeclarativeListProperty QSensorItem::properties() +{ + _properties.clear(); + _properties.append(_sensorProperties); + _properties.append(_readerProperties); + return QDeclarativeListProperty (this, _properties); +} + +QT_END_NAMESPACE diff --git a/examples/sensors/sensor_explorer/import/sensoritem.h b/examples/sensors/sensor_explorer/import/sensoritem.h new file mode 100644 index 0000000..9e9ab94 --- /dev/null +++ b/examples/sensors/sensor_explorer/import/sensoritem.h @@ -0,0 +1,96 @@ +/**************************************************************************** +** +** 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 QtSensors module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** GNU Lesser General Public License Usage +** 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, Nokia gives you certain additional +** rights. These rights are described in the Nokia 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. +** +** 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$ +** +****************************************************************************/ + +#ifndef QSENSORITEM_H +#define QSENSORITEM_H + +#include +#include +#include "propertyinfo.h" + +QT_BEGIN_NAMESPACE + +class QSensor; +class QSensorItem : public QObject +{ + Q_OBJECT + Q_PROPERTY(bool start READ start WRITE setStart NOTIFY startChanged) + Q_PROPERTY(QString id READ id CONSTANT) + Q_PROPERTY(QDeclarativeListProperty properties READ properties NOTIFY propertiesChanged) +public: + QSensorItem(QObject* parent = 0); + QSensorItem(QSensor* sensor, QObject* parent = 0); + virtual ~QSensorItem(); + +public slots: + void select(); + void unSelect(); + void changePropertyValue(QPropertyInfo* property, const QString& val); + +private slots: + void sensorReadingChanged(); + +private: + QString id(); + bool start(); + void setStart(bool run); + QDeclarativeListProperty properties(); + QString convertValue(const QString& type, const QVariant& val); + bool isWriteable(const QString& propertyname); + bool ignoreProperty(const QString& propertyname); + void updateSensorPropertyValues(); + +Q_SIGNALS: + void propertiesChanged(); + void startChanged(); + +private: + QSensor* _qsensor; + QList _properties; + QList _readerProperties; + QList _sensorProperties; +}; + +QT_END_NAMESPACE + +QML_DECLARE_TYPE(QSensorItem) + +#endif // QSENSORITEM_H diff --git a/examples/sensors/sensor_explorer/main.cpp b/examples/sensors/sensor_explorer/main.cpp deleted file mode 100644 index 624f7b6..0000000 --- a/examples/sensors/sensor_explorer/main.cpp +++ /dev/null @@ -1,50 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtSensors module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:BSD$ -** You may use this file under the terms of the BSD license as follows: -** -** "Redistribution and use in source and binary forms, with or without -** modification, are permitted provided that the following conditions are -** met: -** * Redistributions of source code must retain the above copyright -** notice, this list of conditions and the following disclaimer. -** * Redistributions in binary form must reproduce the above copyright -** notice, this list of conditions and the following disclaimer in -** the documentation and/or other materials provided with the -** distribution. -** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor -** the names of its contributors may be used to endorse or promote -** products derived from this software without specific prior written -** permission. -** -** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "explorer.h" - -int main(int argc, char **argv) -{ - QApplication app(argc, argv); - Explorer explorer; - explorer.show(); - return app.exec(); -} - diff --git a/examples/sensors/sensor_explorer/qml_app/Button.qml b/examples/sensors/sensor_explorer/qml_app/Button.qml new file mode 100644 index 0000000..ce8feb3 --- /dev/null +++ b/examples/sensors/sensor_explorer/qml_app/Button.qml @@ -0,0 +1,75 @@ +/**************************************************************************** +** +** 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 QtSensors module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//Import the declarative plugins +import QtQuick 2.0 + +//Implementation of the Button control. +Item { + id: button + width: 30 + height: 100 + property alias text: innerText.text + signal clicked + + Image { + id: backgroundImage + anchors.fill: parent + source: (button.enabled ? "images/button_background_normal.png" : "images/button_background_disabled.png") + } + + Text { + id: innerText + anchors.centerIn: parent + color: "white" + font.bold: true + } + + //Mouse area to react on click events + MouseArea { + anchors.fill: button + onClicked: { button.clicked();} + onPressed: { + backgroundImage.source = "images/button_background_pressed.png" } + onReleased: { + backgroundImage.source = (button.enabled ? "images/button_background_normal.png" : "images/button_background_disabled.png") + } + } +} diff --git a/examples/sensors/sensor_explorer/qml_app/PropertyList.qml b/examples/sensors/sensor_explorer/qml_app/PropertyList.qml new file mode 100644 index 0000000..1e55b48 --- /dev/null +++ b/examples/sensors/sensor_explorer/qml_app/PropertyList.qml @@ -0,0 +1,130 @@ +/**************************************************************************** +** +** 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 QtSensors module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//Import the declarative plugins +import QtQuick 2.0 +import Explorer 1.0 + +Rectangle { + id: controlrect + anchors.margins: 5 + color: "transparent" + + property PropertyInfo selectedItem: null; + signal selectedItemChanged(); + property alias listmodel: itemList.model + + onListmodelChanged: { + itemList.currentIndex = -1; + selectedItem = null; + selectedItemChanged(); + } + + Rectangle { + id: itemListRect + anchors.fill: parent + color: "transparent" + + ListView { + id: itemList + anchors.fill: itemListRect + anchors.leftMargin: 5 + anchors.rightMargin: 5 + focus: true + currentIndex: -1 + delegate: itemListDelegate + clip: true + + Rectangle { + id: scrollbar + anchors.right: itemList.right + y: itemList.visibleArea.yPosition * itemList.height + width: 2 + height: itemList.visibleArea.heightRatio * itemList.height + color: "black" + } + } + + Component { + id: itemListDelegate + + Rectangle { + width: itemList.width + height: itemNameText.font.pixelSize + 3 + color: "transparent" + + Image { + id: backgroundImage + anchors.fill: parent + source: "images/listitem_select.png" + visible: itemList.currentIndex === index + } + + Text { + id: itemNameText + text: model.modelData.name + font.pixelSize: 15 + color: (itemList.currentIndex === index ? "#1c94ff" : "black") + } + + Text { + id: itemValueText + anchors.left: parent.left + anchors.right: parent.right + anchors.rightMargin: 5 + font.pixelSize: 15 + horizontalAlignment: Text.AlignRight + text: model.modelData.value + color: (itemList.currentIndex === index ? "#1c94ff" : "black") + } + + MouseArea { + anchors.fill: parent + + onClicked: { + itemList.currentIndex = index; + selectedItem = model.modelData; + selectedItemChanged(); + } + } + } + } + } +} diff --git a/examples/sensors/sensor_explorer/qml_app/SensorList.qml b/examples/sensors/sensor_explorer/qml_app/SensorList.qml new file mode 100644 index 0000000..a9f40ce --- /dev/null +++ b/examples/sensors/sensor_explorer/qml_app/SensorList.qml @@ -0,0 +1,149 @@ +/**************************************************************************** +** +** 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 QtSensors module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//Import the declarative plugins +import QtQuick 2.0 +import Explorer 1.0 + +Rectangle { + id: controlrect + anchors.margins: 5 + color: "transparent" + + property SensorItem selectedItem: null; + signal selectedItemChanged(); + property alias title: labelTitle.text + property alias listmodel: itemList.model + + onListmodelChanged: { + itemList.currentIndex = -1; + selectedItem = null; + selectedItemChanged(); + } + + Text { + id: labelTitle + anchors.top: controlrect.top + anchors.left: controlrect.left + anchors.right: controlrect.right + horizontalAlignment: Text.AlignHCenter + font.pixelSize: 30 + font.bold: true + text: "" + } + + Rectangle { + id: titleLine + anchors.top: labelTitle.bottom + anchors.left: controlrect.left + anchors.right: controlrect.right + height: 1 + border.width: 1 + border.color: "#999999" + } + + Rectangle { + id: itemListRect + anchors.top: titleLine.bottom + anchors.left: controlrect.left + anchors.right: controlrect.right + anchors.bottom: controlrect.bottom + color: "transparent" + + ListView { + id: itemList + anchors.fill: itemListRect + anchors.leftMargin: 5 + anchors.rightMargin: 5 + focus: true + currentIndex: -1 + delegate: itemListDelegate + clip: true + + Rectangle { + id: scrollbar + anchors.right: itemList.right + y: itemList.visibleArea.yPosition * itemList.height + width: 2 + height: itemList.visibleArea.heightRatio * itemList.height + color: "black" + } + } + + Component { + id: itemListDelegate + + Rectangle { + width: itemList.width + height: 30 + color: "transparent" + + Image { + id: backgroundImage + anchors.fill: parent + source: "images/listitem_select.png" + visible: itemList.currentIndex === index + } + + Text { + id: itemText + height: 30 + anchors.top: parent.top + anchors.left: parent.left + anchors.leftMargin: 5 + text: model.modelData.id + color: (itemList.currentIndex === index ? "#1c94ff" : "black") + verticalAlignment: Text.AlignVCenter + font.pixelSize: 15 + } + + MouseArea { + anchors.fill: parent + + onClicked: { + itemList.currentIndex = index; + selectedItem = model.modelData; + selectedItemChanged(); + } + } + } + } + } +} diff --git a/examples/sensors/sensor_explorer/qml_app/TextField.qml b/examples/sensors/sensor_explorer/qml_app/TextField.qml new file mode 100644 index 0000000..681b712 --- /dev/null +++ b/examples/sensors/sensor_explorer/qml_app/TextField.qml @@ -0,0 +1,103 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtSensors module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//Import the declarative plugins +import QtQuick 2.0 + +Item { + id: textInputFrame + property alias text: textInput.text + resources: [ + Component{ + id: cursorA + Rectangle { + id: cursor_rect + width: 2 + height: 20 + color: "#1c94ff" + visible: textInput.cursorVisible + + PropertyAnimation on opacity { + easing.type: Easing.OutSine + loops: Animation.Infinite + from: 0 + to: 1.0 + duration: 750 + } + } + } + ] + + Image { + id: backgroundImage + anchors.fill: parent + source: (textInputFrame.enabled ? "images/textfield_background_normal.png" : "images/textfield_background_disabled.png") + } + + TextInput { + id: textInput + anchors.fill: parent + anchors.topMargin: 5 + anchors.leftMargin: 5 + anchors.rightMargin: 5 + activeFocusOnPress: false + + cursorDelegate: cursorA + + onEnabledChanged: { + textInput.focus = false; + } + + MouseArea { + anchors.fill: parent + + onClicked: { + if (!textInput.activeFocus) { + textInput.forceActiveFocus() + textInput.openSoftwareInputPanel(); + } else { + textInput.focus = false; + } + } + + onPressAndHold: textInput.closeSoftwareInputPanel(); + } + } +} diff --git a/examples/sensors/sensor_explorer/qml_app/icon.png b/examples/sensors/sensor_explorer/qml_app/icon.png new file mode 100755 index 0000000..c48b609 Binary files /dev/null and b/examples/sensors/sensor_explorer/qml_app/icon.png differ diff --git a/examples/sensors/sensor_explorer/qml_app/images/button_background_disabled.png b/examples/sensors/sensor_explorer/qml_app/images/button_background_disabled.png new file mode 100644 index 0000000..62a00b9 Binary files /dev/null and b/examples/sensors/sensor_explorer/qml_app/images/button_background_disabled.png differ diff --git a/examples/sensors/sensor_explorer/qml_app/images/button_background_normal.png b/examples/sensors/sensor_explorer/qml_app/images/button_background_normal.png new file mode 100644 index 0000000..1fecad5 Binary files /dev/null and b/examples/sensors/sensor_explorer/qml_app/images/button_background_normal.png differ diff --git a/examples/sensors/sensor_explorer/qml_app/images/button_background_pressed.png b/examples/sensors/sensor_explorer/qml_app/images/button_background_pressed.png new file mode 100644 index 0000000..149529e Binary files /dev/null and b/examples/sensors/sensor_explorer/qml_app/images/button_background_pressed.png differ diff --git a/examples/sensors/sensor_explorer/qml_app/images/listitem_select.png b/examples/sensors/sensor_explorer/qml_app/images/listitem_select.png new file mode 100644 index 0000000..def234f Binary files /dev/null and b/examples/sensors/sensor_explorer/qml_app/images/listitem_select.png differ diff --git a/examples/sensors/sensor_explorer/qml_app/images/textfield_background_disabled.png b/examples/sensors/sensor_explorer/qml_app/images/textfield_background_disabled.png new file mode 100644 index 0000000..98bc601 Binary files /dev/null and b/examples/sensors/sensor_explorer/qml_app/images/textfield_background_disabled.png differ diff --git a/examples/sensors/sensor_explorer/qml_app/images/textfield_background_normal.png b/examples/sensors/sensor_explorer/qml_app/images/textfield_background_normal.png new file mode 100644 index 0000000..b90b50c Binary files /dev/null and b/examples/sensors/sensor_explorer/qml_app/images/textfield_background_normal.png differ diff --git a/examples/sensors/sensor_explorer/qml_app/info.json b/examples/sensors/sensor_explorer/qml_app/info.json new file mode 100644 index 0000000..3f1feb4 --- /dev/null +++ b/examples/sensors/sensor_explorer/qml_app/info.json @@ -0,0 +1,15 @@ +{ + "info-version": "1.0", + "dict": { + "Category": "application", + "Runtime": "qml", + "DisplayName": "Sensor Explorer", + "Subcategory": "utility", + "MainQML": "main.qml", + "Version": "1.0", + "Identifier": "com.nokia.mt.sensorexplorer.demo", + "Summary": "QML Sensor Explorer demo", + "Author": "Qt" + } +} + diff --git a/examples/sensors/sensor_explorer/qml_app/main.qml b/examples/sensors/sensor_explorer/qml_app/main.qml new file mode 100644 index 0000000..7796b8a --- /dev/null +++ b/examples/sensors/sensor_explorer/qml_app/main.qml @@ -0,0 +1,192 @@ +/**************************************************************************** +** +** 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 QtSensors module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//Import the declarative plugins +import QtQuick 2.0 + +//! [0] +import Explorer 1.0 +//! [0] + +Rectangle { + id: mainWnd + x: 0 + y: 0 + width: 320 + height: 480 + color: "#ececec" + +//! [1] + SensorExplorer { + id: explorer + } +//! [1] + + SensorList { + id: sensorList + anchors.top: parent.top + anchors.topMargin: 20 + anchors.left: parent.left + anchors.right: parent.right + height: 200 + title: "sensor explorer" + +//! [2] + listmodel: explorer.availableSensors +//! [2] + + onSelectedItemChanged: { + explorer.selectedSensorItem = sensorList.selectedItem; + startstopButton.text=(explorer.selectedSensorItem !== null ? + (explorer.selectedSensorItem.start === true ? "Stop" : "Start") : "Start") + if (sensorList.selectedItem !== null) + +//! [3] + propertyList.listmodel = sensorList.selectedItem.properties; +//! [3] + } + } + + Rectangle { + id: listSplitLine + anchors.top: sensorList.bottom + anchors.left: parent.left + anchors.right: parent.right + anchors.leftMargin: 5 + anchors.rightMargin: 5 + height: 1 + border.width: 1 + border.color: "#999999" + } + + PropertyList { + id: propertyList + anchors.top: listSplitLine.bottom + anchors.left: parent.left + anchors.right: parent.right + anchors.bottom: listPropertyEndLine.top + anchors.bottomMargin: 5 + + onSelectedItemChanged: { + changePropertyButton.enabled = (propertyList.selectedItem === null ? + false : propertyList.selectedItem.isWriteable); + } + } + + Rectangle { + id: listPropertyEndLine + anchors.bottom: startstopButton.top + anchors.bottomMargin: 5 + anchors.left: parent.left + anchors.right: parent.right + anchors.leftMargin: 5 + anchors.rightMargin: 5 + height: 1 + border.width: 1 + border.color: "#999999" + } + + + Button { + id: startstopButton + anchors.bottom: parent.bottom + anchors.left: parent.left + anchors.margins: 5 + text: (explorer.selectedSensorItem !== null ? + (explorer.selectedSensorItem.start === true ? "Stop" : "Start") : "Start") + enabled: true + height: 30 + width: 80 + + onClicked: { + if (explorer.selectedSensorItem !== null) { +//! [5] + if (text === "Start") { + explorer.selectedSensorItem.start = true; + text = "Stop"; + } + else { + explorer.selectedSensorItem.start = false; + text = "Start"; + } +//! [5] + } + + textfield.text = ""; + } + } + + Button { + id: changePropertyButton + anchors.bottom: parent.bottom + anchors.left: startstopButton.right + anchors.margins: 5 + text: "Set" + enabled: false + height: 30 + width: 60 + + onEnabledChanged: { + textfield.visible = changePropertyButton.enabled; + } + + onClicked: { + if (explorer.selectedSensorItem !== null + && propertyList.selectedItem !== null) { +//! [4] + explorer.selectedSensorItem.changePropertyValue(propertyList.selectedItem, textfield.text); +//! [4] + } + + textfield.text = ""; + } + } + + TextField { + id: textfield + anchors.bottom: parent.bottom + anchors.left: changePropertyButton.right + anchors.right: parent.right + anchors.margins: 5 + height: 30 + enabled: true + } +} + diff --git a/examples/sensors/sensor_explorer/qml_app/qml_app.qmlproject b/examples/sensors/sensor_explorer/qml_app/qml_app.qmlproject new file mode 100644 index 0000000..4d32f75 --- /dev/null +++ b/examples/sensors/sensor_explorer/qml_app/qml_app.qmlproject @@ -0,0 +1,18 @@ +import QmlProject 1.1 + +Project { + mainFile: "main.qml" + + /* Include .qml, .js, and image files from current directory and subdirectories */ + QmlFiles { + directory: "." + } + JavaScriptFiles { + directory: "." + } + ImageFiles { + directory: "." + } + /* List of plugin directories passed to QML runtime */ + // importPaths: [ "../exampleplugin" ] +} diff --git a/examples/sensors/sensor_explorer/sensor_explorer.pro b/examples/sensors/sensor_explorer/sensor_explorer.pro index 311ae0b..caa6680 100644 --- a/examples/sensors/sensor_explorer/sensor_explorer.pro +++ b/examples/sensors/sensor_explorer/sensor_explorer.pro @@ -1,16 +1,4 @@ -TEMPLATE=app -TARGET=sensor_explorer -QT=core gui widgets sensors +TEMPLATE = subdirs -FORMS=\ - explorer.ui - -HEADERS=\ - explorer.h - -SOURCES=\ - explorer.cpp\ - main.cpp - -maemo5:DEFINES+=MAEMO5 +SUBDIRS += import #qml_app -- cgit v1.2.1