diff --git a/telldus-gui/Plugins/Sensors/CMakeLists.txt b/telldus-gui/Plugins/Sensors/CMakeLists.txt index 065b7d97..bfd56a32 100644 --- a/telldus-gui/Plugins/Sensors/CMakeLists.txt +++ b/telldus-gui/Plugins/Sensors/CMakeLists.txt @@ -1,12 +1,15 @@ SET(REQUIRE_PLUGIN_QML TRUE PARENT_SCOPE) SET(REQUIRE_PLUGIN_SETTINGS TRUE PARENT_SCOPE) +SET(QT_USE_QTDECLARATIVE TRUE) + SET( Plugin_NAME "sensors" ) SET( Plugin_SRCS sensor.cpp sensorsplugin.cpp + sensorvalue.cpp ) SET( Plugin_HDRS @@ -15,6 +18,7 @@ SET( Plugin_HDRS SET( Plugin_MOC_HDRS sensor.h + sensorvalue.h ) SET( Plugin_PATH "com.telldus.sensors" ) diff --git a/telldus-gui/Plugins/Sensors/sensor.cpp b/telldus-gui/Plugins/Sensors/sensor.cpp index b07c6a56..6a39b006 100644 --- a/telldus-gui/Plugins/Sensors/sensor.cpp +++ b/telldus-gui/Plugins/Sensors/sensor.cpp @@ -1,19 +1,20 @@ #include "sensor.h" +#include "sensorvalue.h" +#include class Sensor::PrivateData { public: bool hasTemperature, hasHumidity; int id; - QString model, name, protocol, temperature, humidity; + QString model, name, protocol; QDateTime lastUpdated; + QMap values; }; Sensor::Sensor(QObject *parent) : QObject(parent) { d = new PrivateData; - d->hasTemperature = false; - d->hasHumidity = false; d->id = 0; } @@ -21,19 +22,8 @@ Sensor::~Sensor() { delete d; } -QString Sensor::humidity() const { - return d->humidity; -} - -void Sensor::setHumidity(const QString &humidity) { - d->humidity = humidity; - d->hasHumidity = true; - emit humidityChanged(); - emit hasHumidityChanged(); -} - bool Sensor::hasHumidity() const { - return d->hasHumidity; + return d->values.contains(TELLSTICK_HUMIDITY); } int Sensor::id() const { @@ -45,15 +35,6 @@ void Sensor::setId(int id) { emit idChanged(); } -QDateTime Sensor::lastUpdated() const { - return d->lastUpdated; -} - -void Sensor::setLastUpdated(const QDateTime &lastUpdated) { - d->lastUpdated = lastUpdated; - emit lastUpdatedChanged(); -} - QString Sensor::model() const { return d->model; } @@ -81,17 +62,28 @@ void Sensor::setProtocol(const QString &protocol) { emit protocolChanged(); } -QString Sensor::temperature() const { - return d->temperature; -} - -void Sensor::setTemperature(const QString &temperature) { - d->temperature = temperature; - d->hasTemperature = true; - emit temperatureChanged(); - emit hasTemperatureChanged(); -} - bool Sensor::hasTemperature() const { - return d->hasTemperature; + return d->values.contains(TELLSTICK_TEMPERATURE); +} + +SensorValue * Sensor::sensorValue(int type) { + return (d->values.contains(type) ? d->values[type] : 0); +} + +void Sensor::setValue(int type, const QString &value, const QDateTime ×tamp) { + SensorValue *sensorValue; + if (d->values.contains(type)) { + sensorValue = d->values[type]; + } else { + sensorValue = new SensorValue(this); + d->values[type] = sensorValue; + } + sensorValue->setValue(value); + sensorValue->setLastUpdated(timestamp); + + if (type == TELLSTICK_TEMPERATURE) { + emit hasTemperatureChanged(); + } else if (type == TELLSTICK_HUMIDITY) { + emit hasHumidityChanged(); + } } diff --git a/telldus-gui/Plugins/Sensors/sensor.h b/telldus-gui/Plugins/Sensors/sensor.h index 41c2260f..fc70468d 100644 --- a/telldus-gui/Plugins/Sensors/sensor.h +++ b/telldus-gui/Plugins/Sensors/sensor.h @@ -6,32 +6,26 @@ #include #include +class SensorValue; + class Sensor : public QObject { Q_OBJECT Q_PROPERTY(bool hasHumidity READ hasHumidity NOTIFY hasHumidityChanged) Q_PROPERTY(bool hasTemperature READ hasTemperature NOTIFY hasTemperatureChanged) - Q_PROPERTY(QString humidity READ humidity WRITE setHumidity NOTIFY humidityChanged) Q_PROPERTY(int id READ id WRITE setId NOTIFY idChanged) - Q_PROPERTY(QDateTime lastUpdated READ lastUpdated WRITE setLastUpdated NOTIFY lastUpdatedChanged) Q_PROPERTY(QString model READ model WRITE setModel NOTIFY modelChanged) Q_PROPERTY(QString name READ name WRITE setName NOTIFY nameChanged) Q_PROPERTY(QString protocol READ protocol WRITE setProtocol NOTIFY protocolChanged) - Q_PROPERTY(QString temperature READ temperature WRITE setTemperature NOTIFY temperatureChanged) public: explicit Sensor(QObject *parent = 0); ~Sensor(); - QString humidity() const; - void setHumidity(const QString &humidity); bool hasHumidity() const; int id() const; void setId(int id); - QDateTime lastUpdated() const; - void setLastUpdated(const QDateTime &lastUpdated); - QString model() const; void setModel(const QString &model); @@ -41,20 +35,18 @@ public: QString protocol() const; void setProtocol(const QString &protocol); - QString temperature() const; - void setTemperature(const QString &temperature); bool hasTemperature() const; + Q_INVOKABLE SensorValue *sensorValue(int type); + Q_INVOKABLE void setValue(int type, const QString &value, const QDateTime ×tamp); + signals: void idChanged(); void hasHumidityChanged(); void hasTemperatureChanged(); - void humidityChanged(); - void lastUpdatedChanged(); void modelChanged(); void nameChanged(); void protocolChanged(); - void temperatureChanged(); private: class PrivateData; diff --git a/telldus-gui/Plugins/Sensors/sensorvalue.cpp b/telldus-gui/Plugins/Sensors/sensorvalue.cpp new file mode 100644 index 00000000..108e0f99 --- /dev/null +++ b/telldus-gui/Plugins/Sensors/sensorvalue.cpp @@ -0,0 +1,35 @@ +#include "sensorvalue.h" + +class SensorValue::PrivateData { +public: + QString value; + QDateTime lastUpdated; +}; + +SensorValue::SensorValue(QObject *parent) : + QObject(parent) +{ + d = new PrivateData; +} + +SensorValue::~SensorValue() { + delete d; +} + +QDateTime SensorValue::lastUpdated() const { + return d->lastUpdated; +} + +void SensorValue::setLastUpdated(const QDateTime &lastUpdated) { + d->lastUpdated = lastUpdated; + emit lastUpdatedChanged(); +} + +QString SensorValue::value() const { + return d->value; +} + +void SensorValue::setValue(const QString &value) { + d->value = value; + emit valueChanged(); +} diff --git a/telldus-gui/Plugins/Sensors/sensorvalue.h b/telldus-gui/Plugins/Sensors/sensorvalue.h new file mode 100644 index 00000000..9cac8c8c --- /dev/null +++ b/telldus-gui/Plugins/Sensors/sensorvalue.h @@ -0,0 +1,36 @@ +#ifndef SENSORVALUE_H +#define SENSORVALUE_H + +#include +#include +#include +#include + +class SensorValue : public QObject +{ + Q_OBJECT + Q_PROPERTY(QDateTime lastUpdated READ lastUpdated WRITE setLastUpdated NOTIFY lastUpdatedChanged) + Q_PROPERTY(QString value READ value WRITE setValue NOTIFY valueChanged) + +public: + explicit SensorValue(QObject *parent = 0); + ~SensorValue(); + + QDateTime lastUpdated() const; + void setLastUpdated(const QDateTime &lastUpdated); + + QString value() const; + void setValue(const QString &model); + +signals: + void lastUpdatedChanged(); + void valueChanged(); + +private: + class PrivateData; + PrivateData *d; +}; + +Q_DECLARE_METATYPE(SensorValue*) + +#endif // SENSORVALUE_H