summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--qmapwatchlet/arrow.png (renamed from qmapwatchlet/map-arrow.png)bin180 -> 180 bytes
-rw-r--r--qmapwatchlet/compass-metawatch-digital.qml53
-rw-r--r--qmapwatchlet/compass.pngbin0 -> 211 bytes
-rw-r--r--qmapwatchlet/compassview.cpp118
-rw-r--r--qmapwatchlet/compassview.h56
-rw-r--r--qmapwatchlet/compasswatchlet.cpp8
-rw-r--r--qmapwatchlet/compasswatchlet.h10
-rw-r--r--qmapwatchlet/qmapwatchlet.pro8
-rw-r--r--qmapwatchlet/qmapwatchletplugin.cpp22
9 files changed, 224 insertions, 51 deletions
diff --git a/qmapwatchlet/map-arrow.png b/qmapwatchlet/arrow.png
index f6beadf..f6beadf 100644
--- a/qmapwatchlet/map-arrow.png
+++ b/qmapwatchlet/arrow.png
Binary files differ
diff --git a/qmapwatchlet/compass-metawatch-digital.qml b/qmapwatchlet/compass-metawatch-digital.qml
index 9268435..c465e20 100644
--- a/qmapwatchlet/compass-metawatch-digital.qml
+++ b/qmapwatchlet/compass-metawatch-digital.qml
@@ -4,44 +4,39 @@ import com.javispedro.sowatch.metawatch 1.0
import com.javispedro.sowatch.qmap 1.0
MWPage {
- MWTitle {
- anchors.top: parent.top
- anchors.left: parent.left
- anchors.right: parent.right
- text: qsTr("Trip computer")
- icon.source: "trip-icon.png"
- }
-
- PositionSource {
- id: gps
- active: watch.active
- updateInterval: 2000
- }
function formatSpeed(speed) {
- if (speed < 10) {
- return speed.toFixed(1);
+ var kmh = speed * 3.6;
+ if (kmh < 0) {
+ return "";
+ } else if (kmh < 10) {
+ return kmh.toFixed(1) + " km/h";
} else {
- return speed.toFixed(0);
+ return kmh.toFixed(0) + " km/h";
}
}
Column {
- anchors.verticalCenter: parent.verticalCenter
- MWLabel {
- text: qsTr("Speed")
- }
- MWLabel {
- id: speedLabel
- text: gps.position.speedValid ? formatSpeed(gps.position.speed) : ""
- }
+ anchors.top: parent.top
+ width: parent.width
- MWLabel {
- text: qsTr("Altitude")
+ CompassView {
+ anchors.horizontalCenter: parent.horizontalCenter
+ id: compass
+ updateEnabled: watch.active
+ updateInterval: 3000
+ width: 48
+ height: 48
}
- }
-
- Column {
+ Row {
+ MWLabel {
+ text: qsTr("Speed") + " "
+ }
+ MWLabel {
+ id: speedLabel
+ text: formatSpeed(compass.currentSpeed)
+ }
+ }
}
}
diff --git a/qmapwatchlet/compass.png b/qmapwatchlet/compass.png
new file mode 100644
index 0000000..a754863
--- /dev/null
+++ b/qmapwatchlet/compass.png
Binary files differ
diff --git a/qmapwatchlet/compassview.cpp b/qmapwatchlet/compassview.cpp
new file mode 100644
index 0000000..5de44a5
--- /dev/null
+++ b/qmapwatchlet/compassview.cpp
@@ -0,0 +1,118 @@
+#include "qmapwatchletplugin.h"
+#include "compassview.h"
+
+using namespace sowatch;
+QTM_USE_NAMESPACE
+
+CompassView::CompassView(QDeclarativeItem *parent) :
+ QDeclarativeItem(parent),
+ _enabled(false),
+ _image(SOWATCH_QML_DIR "/qmapwatchlet/compass.png"),
+ _posSource(QGeoPositionInfoSource::createDefaultSource(this)),
+ _direction(-1.0), _speed(-1.0), _altitude(-1.0)
+{
+ if (_posSource) {
+ connect(_posSource, SIGNAL(positionUpdated(QGeoPositionInfo)),
+ SLOT(handlePositionUpdate(QGeoPositionInfo)));
+ _posSource->lastKnownPosition();
+ } else {
+ qWarning() << "No position source for moving map!";
+ }
+
+ setFlag(QGraphicsItem::ItemHasNoContents, false);
+}
+
+bool CompassView::updateEnabled() const
+{
+ return _enabled;
+}
+
+void CompassView::setUpdateEnabled(bool enabled)
+{
+ if (_posSource && _enabled != enabled) {
+ if (enabled) {
+ qDebug() << "Start position updates";
+ _posSource->startUpdates();
+ } else {
+ qDebug() << "Stop position updates";
+ _posSource->stopUpdates();
+ }
+ _enabled = enabled;
+
+ emit updateEnabledChanged();
+ }
+
+}
+
+int CompassView::updateInterval() const
+{
+ if (_posSource) {
+ return _posSource->updateInterval();
+ } else {
+ return 0;
+ }
+}
+
+void CompassView::setUpdateInterval(int msec)
+{
+ if (_posSource) {
+ _posSource->setUpdateInterval(msec);
+ emit updateIntervalChanged();
+ }
+}
+
+qreal CompassView::currentSpeed() const
+{
+ return _speed;
+}
+
+qreal CompassView::currentAltitude() const
+{
+ return _altitude;
+}
+
+void CompassView::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
+{
+ Q_UNUSED(widget);
+ // Now render the arrow indicator
+ const int centerX = _size.width() / 2, centerY = _size.height() / 2;
+
+ if (_direction >= 0.0) {
+ painter->save();
+ painter->translate(centerX, centerY);
+ painter->rotate(_direction);
+ painter->drawImage(-_image.width() / 2, -_image.height() / 2, _image);
+ painter->restore();
+ }
+}
+
+void CompassView::geometryChanged(const QRectF &newGeometry, const QRectF &oldGeometry)
+{
+ Q_UNUSED(oldGeometry);
+ _size = newGeometry.size().toSize();
+}
+
+void CompassView::handlePositionUpdate(const QGeoPositionInfo &info)
+{
+ qDebug() << "Pos update";
+
+ qreal newDirection = -1.0;
+ if (info.hasAttribute(QGeoPositionInfo::Direction)) {
+ newDirection = info.attribute(QGeoPositionInfo::Direction);
+ }
+ qDebug() << "New dir" << newDirection;
+ if (newDirection != _direction) {
+ _direction = newDirection;
+ update();
+ }
+
+ qreal newSpeed = -1.0;
+ if (info.hasAttribute(QGeoPositionInfo::GroundSpeed)) {
+ newSpeed = info.attribute(QGeoPositionInfo::GroundSpeed);
+ }
+ qDebug() << "New speed" << newSpeed;
+ if (newSpeed != _speed) {
+ _speed = newSpeed;
+ emit currentSpeedChanged();
+ }
+}
diff --git a/qmapwatchlet/compassview.h b/qmapwatchlet/compassview.h
new file mode 100644
index 0000000..3e87a65
--- /dev/null
+++ b/qmapwatchlet/compassview.h
@@ -0,0 +1,56 @@
+#ifndef COMPASSVIEW_H
+#define COMPASSVIEW_H
+
+#include <QtGui/QImage>
+#include <QtDeclarative/QDeclarativeItem>
+#include <QtLocation/QGeoPositionInfoSource>
+
+using QTM_PREPEND_NAMESPACE(QGeoPositionInfoSource);
+using QTM_PREPEND_NAMESPACE(QGeoPositionInfo);
+
+class CompassView : public QDeclarativeItem
+{
+ Q_OBJECT
+ Q_PROPERTY(bool updateEnabled READ updateEnabled WRITE setUpdateEnabled NOTIFY updateEnabledChanged)
+ Q_PROPERTY(int updateInterval READ updateInterval WRITE setUpdateInterval NOTIFY updateIntervalChanged)
+
+ Q_PROPERTY(qreal currentSpeed READ currentSpeed NOTIFY currentSpeedChanged)
+ Q_PROPERTY(qreal currentAltitude READ currentAltitude NOTIFY currentAltitudeChanged)
+
+public:
+ explicit CompassView(QDeclarativeItem *parent = 0);
+
+ bool updateEnabled() const;
+ void setUpdateEnabled(bool enabled);
+
+ int updateInterval() const;
+ void setUpdateInterval(int msec);
+
+ qreal currentSpeed() const;
+ qreal currentAltitude() const;
+
+ void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
+
+signals:
+ void updateEnabledChanged();
+ void updateIntervalChanged();
+ void currentSpeedChanged();
+ void currentAltitudeChanged();
+
+protected:
+ void geometryChanged(const QRectF &newGeometry, const QRectF &oldGeometry);
+
+private slots:
+ void handlePositionUpdate(const QGeoPositionInfo& info);
+
+private:
+ bool _enabled;
+ QSize _size;
+ QImage _image;
+ QGeoPositionInfoSource *_posSource;
+ qreal _direction;
+ qreal _speed;
+ qreal _altitude;
+};
+
+#endif // COMPASSVIEW_H
diff --git a/qmapwatchlet/compasswatchlet.cpp b/qmapwatchlet/compasswatchlet.cpp
index 3101955..cbc19a4 100644
--- a/qmapwatchlet/compasswatchlet.cpp
+++ b/qmapwatchlet/compasswatchlet.cpp
@@ -1,11 +1,11 @@
-#include "tripwatchlet.h"
+#include "compasswatchlet.h"
using namespace sowatch;
-const QLatin1String TripWatchlet::myId("com.javispedro.sowatch.trip");
+const QLatin1String CompassWatchlet::myId("com.javispedro.sowatch.compass");
-TripWatchlet::TripWatchlet(WatchServer* server) :
+CompassWatchlet::CompassWatchlet(WatchServer* server) :
DeclarativeWatchlet(server, myId)
{
- setSource(QUrl(SOWATCH_QML_DIR "/qmapwatchlet/trip-" + server->watch()->model() + ".qml"));
+ setSource(QUrl(SOWATCH_QML_DIR "/qmapwatchlet/compass-" + server->watch()->model() + ".qml"));
}
diff --git a/qmapwatchlet/compasswatchlet.h b/qmapwatchlet/compasswatchlet.h
index 185205b..88547a2 100644
--- a/qmapwatchlet/compasswatchlet.h
+++ b/qmapwatchlet/compasswatchlet.h
@@ -1,20 +1,20 @@
-#ifndef TRIPWATCHLET_H
-#define TRIPWATCHLET_H
+#ifndef COMPASSWATCHLET_H
+#define COMPASSWATCHLET_H
#include <sowatch.h>
namespace sowatch
{
-class TripWatchlet : public DeclarativeWatchlet
+class CompassWatchlet : public DeclarativeWatchlet
{
Q_OBJECT
public:
- explicit TripWatchlet(WatchServer* server);
+ explicit CompassWatchlet(WatchServer* server);
static const QLatin1String myId;
};
}
-#endif // TRIPWATCHLET_H
+#endif // COMPASSWATCHLET_H
diff --git a/qmapwatchlet/qmapwatchlet.pro b/qmapwatchlet/qmapwatchlet.pro
index ab51e30..6ed3fcf 100644
--- a/qmapwatchlet/qmapwatchlet.pro
+++ b/qmapwatchlet/qmapwatchlet.pro
@@ -6,13 +6,13 @@ CONFIG += mobility
MOBILITY += location
SOURCES += qmapwatchletplugin.cpp qmapwatchlet.cpp mapview.cpp \
- compasswatchlet.cpp
+ compasswatchlet.cpp compassview.cpp
HEADERS += qmapwatchletplugin.h qmapwatchlet.h mapview.h \
- compasswatchlet.h
+ compasswatchlet.h compassview.h
-qml_files.files = map-metawatch-digital.qml map-icon.png map-arrow.png \
- compass-metawatch-digital.qml compass-icon.png
+qml_files.files = map-metawatch-digital.qml map-icon.png arrow.png \
+ compass-metawatch-digital.qml compass-icon.png compass.png
LIBS += -L$$OUT_PWD/../libsowatch/ -lsowatch
INCLUDEPATH += $$PWD/../libsowatch
diff --git a/qmapwatchlet/qmapwatchletplugin.cpp b/qmapwatchlet/qmapwatchletplugin.cpp
index 5beaf7e..32762d0 100644
--- a/qmapwatchlet/qmapwatchletplugin.cpp
+++ b/qmapwatchlet/qmapwatchletplugin.cpp
@@ -1,7 +1,8 @@
#include "qmapwatchlet.h"
#include "mapview.h"
+#include "compassview.h"
#include "qmapwatchletplugin.h"
-#include "tripwatchlet.h"
+#include "compasswatchlet.h"
using namespace sowatch;
QTM_USE_NAMESPACE
@@ -18,6 +19,7 @@ QMapWatchletPlugin::QMapWatchletPlugin(QObject *parent) :
_provider = 0;
}
qmlRegisterType<MapView>("com.javispedro.sowatch.qmap", 1, 0, "MapView");
+ qmlRegisterType<CompassView>("com.javispedro.sowatch.qmap", 1, 0, "CompassView");
}
QMapWatchletPlugin::~QMapWatchletPlugin()
@@ -29,7 +31,7 @@ QMapWatchletPlugin::~QMapWatchletPlugin()
QStringList QMapWatchletPlugin::watchlets()
{
QStringList l;
- l << QMapWatchlet::myId;
+ l << QMapWatchlet::myId << CompassWatchlet::myId;
return l;
}
@@ -38,21 +40,23 @@ WatchletPluginInterface::WatchletInfo QMapWatchletPlugin::describeWatchlet(const
WatchletInfo info;
if (id == QMapWatchlet::myId) {
info.name = tr("Map");
- info.icon = QUrl::fromLocalFile(SOWATCH_QML_DIR "/qmapwatchlet/icon.png");
- } else if (id == TripWatchlet::myId) {
+ info.icon = QUrl::fromLocalFile(SOWATCH_QML_DIR "/qmapwatchlet/map-icon.png");
+ } else if (id == CompassWatchlet::myId) {
info.name = tr("Trip computer");
- info.icon =
+ info.icon = QUrl::fromLocalFile(SOWATCH_QML_DIR "/qmapwatchlet/compass-icon.png");
}
- if (id != ) return info;
-
return info;
}
Watchlet* QMapWatchletPlugin::getWatchlet(const QString &id, ConfigKey *config, WatchServer *server)
{
Q_UNUSED(config);
- if (id != QMapWatchlet::myId) return 0;
- return new QMapWatchlet(server);
+ if (id == QMapWatchlet::myId) {
+ return new QMapWatchlet(server);
+ } else if (id == CompassWatchlet::myId) {
+ return new CompassWatchlet(server);
+ }
+ return 0;
}
QGeoServiceProvider *QMapWatchletPlugin::geoServiceProvider()