3 #include <QGeoMapPixmapObject>
4 #include "../user/friendmodel.h"
5 #include "../coordinates/geocoordinate.h"
6 #include <QGraphicsSceneMouseEvent>
8 using namespace QtMobility;
16 gpsLocationMapObject(0)
19 FriendModel* friendModel;
20 FilteredFriendModel* friendFilterModel;
22 QGeoMapPixmapObject* gpsLocationMapObject;
24 QList<QGeoMapPixmapObject*> friendMapObjects;
27 GeoMap::GeoMap(QGraphicsItem* parent)
28 : QGraphicsGeoMap(parent),
29 d_ptr(new GeoMapPrivate),
34 qDebug() << __PRETTY_FUNCTION__;
35 connect(this, SIGNAL(panned(QPoint)), this, SLOT(panned()));
37 setCenter(prevGpsLocation);
41 setObjectName("geoMap");
46 qDebug() << __PRETTY_FUNCTION__;
49 qreal GeoMap::angleToGpsLocation() const
51 const qreal result = prevGpsLocation.isValid() ? center().azimuthTo(prevGpsLocation) : 0.0;
52 qDebug() << "QmlMap::angleToGpsLocation: " << result;
56 qreal GeoMap::distanceToGpsLocation() const
58 const qreal result = prevGpsLocation.isValid() ? center().distanceTo(prevGpsLocation) : 0.0;
59 const int km = result * 0.001;
60 qDebug() << "QmlMap::distanceToGpsLocation: " << km;
64 double GeoMap::centerLatitude() const {
65 return center().latitude();
68 void GeoMap::setCenterLatitude(const double latitude) {
69 QGeoCoordinate newCenter = center();
70 newCenter.setLatitude(latitude);
72 emit positionChanged();
75 double GeoMap::centerLongitude() const
77 return center().longitude();
80 void GeoMap::setCenterLongitude(const double longitude) {
81 QGeoCoordinate newCenter = center();
82 newCenter.setLongitude(longitude);
84 emit positionChanged();
88 double GeoMap::gpsLocationLatitude() const
90 return prevGpsLocation.latitude();
93 double GeoMap::gpsLocationLongitude() const
95 return prevGpsLocation.longitude();
98 void GeoMap::setFriendModels(FriendModel* friendModel, FilteredFriendModel* friendFilterModel)
101 Q_ASSERT(friendModel && friendFilterModel);
102 if (friendModel && friendFilterModel) {
103 d->friendModel = friendModel;
104 d->friendFilterModel = friendFilterModel;
105 connect(d->friendModel, SIGNAL(modelReset()), this, SLOT(onFriendModelReset()));
109 void GeoMap::panned()
111 emit positionChanged();
114 void GeoMap::onFriendModelReset()
117 Q_ASSERT(d->friendModel);
119 foreach(QGeoMapPixmapObject* mapObject, d->friendMapObjects)
120 removeMapObject(mapObject);
122 for (int i=0; i < d->friendModel->rowCount(); ++i) {
123 const QModelIndex index = d->friendModel->index(i);
124 QPixmap pixmap = d->friendModel->data(index, FriendModel::ImageRole).value<QPixmap>();
125 GeoCoordinate coordinate = d->friendModel->data(index, FriendModel::CoordinateRole).value<GeoCoordinate>();
128 pixmap = QPixmap(":/res/images/user_info.png");
130 Q_ASSERT(!pixmap.isNull());
132 if (!pixmap.isNull() && coordinate.isValid()) {
133 QPoint offset(-pixmap.width()/2, -pixmap.height()/2);
134 QGeoMapPixmapObject* object = new QGeoMapPixmapObject(QGeoCoordinate(coordinate.latitude(), coordinate.longitude()),
138 object->setProperty("user", d->friendModel->data(index, FriendModel::UserRole));
139 addMapObject(object);
140 d->friendMapObjects << object;
145 void GeoMap::goToGpsLocation()
147 qDebug() << "QmlMap::goToGpsLocation";
149 source = QGeoPositionInfoSource::createDefaultSource(this);
152 source->requestUpdate();
153 connect(source, SIGNAL(positionUpdated(QGeoPositionInfo)), this, SLOT(positionUpdated(QGeoPositionInfo)));
154 source->setUpdateInterval(10000);
155 source->startUpdates();
159 void GeoMap::onClicked(qreal mouseX, qreal mouseY)
162 QList<QGeoMapObject*> mapObjects = mapObjectsAtScreenPosition(QPointF(mouseX, mouseY));
164 foreach(QGeoMapObject* mapObject, mapObjects) {
165 User* user = static_cast<User*>(mapObject->property("user").value<void*>());
169 // TODO: reset filter only if it contains at least one entry
170 //if (!filter.isEmpty())
171 d->friendFilterModel->setFilter(filter);
174 void GeoMap::positionUpdated(const QGeoPositionInfo& positionInfo)
176 qDebug() << "QmlMap::positionUpdated: " << positionInfo.coordinate();
177 prevGpsLocation = positionInfo.coordinate();
180 if (!d->gpsLocationMapObject) {
181 QPixmap image(":/res/gps_position.png");
182 Q_ASSERT(!image.isNull());
183 d->gpsLocationMapObject = new QGeoMapPixmapObject(prevGpsLocation, QPoint(-image.width()/2, -image.height()/2), image);
184 addMapObject(d->gpsLocationMapObject);
185 setCenter(prevGpsLocation);
186 emit positionChanged();
189 d->gpsLocationMapObject->setCoordinate(prevGpsLocation);
191 emit gpsLocationChanged();