Commit 2f111432 authored by Mariano Lizarraga's avatar Mariano Lizarraga

Finished scaffolding the graphical addition of WP via the MapWidget. Added the...

Finished scaffolding the graphical addition of WP via the MapWidget. Added the possibility to display the latitude and longitude of the cursor as a property of QMapControl. Major reorganization of the MapWidget constructor
parent 0a242d66
...@@ -27,7 +27,7 @@ ...@@ -27,7 +27,7 @@
namespace qmapcontrol namespace qmapcontrol
{ {
MapControl::MapControl(QSize size, MouseMode mousemode) MapControl::MapControl(QSize size, MouseMode mousemode)
: size(size), mymousemode(mousemode), scaleVisible(false) : size(size), mymousemode(mousemode), scaleVisible(false), cursorPosVisible(false)
{ {
layermanager = new LayerManager(this, size); layermanager = new LayerManager(this, size);
screen_middle = QPoint(size.width()/2, size.height()/2); screen_middle = QPoint(size.width()/2, size.height()/2);
...@@ -41,6 +41,9 @@ namespace qmapcontrol ...@@ -41,6 +41,9 @@ namespace qmapcontrol
this, SLOT(loadingFinished())); this, SLOT(loadingFinished()));
this->setMaximumSize(size.width()+1, size.height()+1); this->setMaximumSize(size.width()+1, size.height()+1);
distanceList<<5000000<<2000000<<1000000<<1000000<<1000000<<100000<<100000<<50000<<50000<<10000<<10000<<10000<<1000<<1000<<500<<200<<100<<50<<25;
} }
MapControl::~MapControl() MapControl::~MapControl()
...@@ -127,6 +130,8 @@ namespace qmapcontrol ...@@ -127,6 +130,8 @@ namespace qmapcontrol
{ {
QWidget::paintEvent(evnt); QWidget::paintEvent(evnt);
QPainter painter(this); QPainter painter(this);
double line;
// painter.translate(150,190); // painter.translate(150,190);
// painter.scale(0.5,0.5); // painter.scale(0.5,0.5);
...@@ -150,11 +155,8 @@ namespace qmapcontrol ...@@ -150,11 +155,8 @@ namespace qmapcontrol
// draw scale // draw scale
if (scaleVisible) if (scaleVisible)
{ {
QList<double> distanceList;
distanceList<<5000000<<2000000<<1000000<<1000000<<1000000<<100000<<100000<<50000<<50000<<10000<<10000<<10000<<1000<<1000<<500<<200<<100<<50<<25;
if (currentZoom() >= 0 && distanceList.size() > currentZoom()) if (currentZoom() >= 0 && distanceList.size() > currentZoom())
{ {
double line;
line = distanceList.at( currentZoom() ) / pow(2, 18-currentZoom() ) / 0.597164; line = distanceList.at( currentZoom() ) / pow(2, 18-currentZoom() ) / 0.597164;
// draw the scale // draw the scale
...@@ -199,12 +201,25 @@ namespace qmapcontrol ...@@ -199,12 +201,25 @@ namespace qmapcontrol
//qt = painter.transform(); //qt = painter.transform();
qm = painter.combinedMatrix(); qm = painter.combinedMatrix();
*/ */
if (mousepressed && mymousemode == Dragging) if (mousepressed && mymousemode == Dragging)
{ {
QRect rect = QRect(pre_click_px, current_mouse_pos); QRect rect = QRect(pre_click_px, current_mouse_pos);
painter.drawRect(rect); painter.drawRect(rect);
} }
// Draw the Lat and Lon if needed
if (cursorPosVisible) {
line = distanceList.at( currentZoom() ) / pow(2, 18-currentZoom() ) / 0.597164;
QString str;
str = QString(tr(" Lat: %1")).arg(currentWorldCoordinate.y());
painter.drawText(QPoint((int)line+70,size.height()-15), str);
str = QString(tr(" Lon: %1")).arg(currentWorldCoordinate.x());
painter.drawText(QPoint((int)line+160,size.height()-15), str);
}
emit viewChanged(currentCoordinate(), currentZoom()); emit viewChanged(currentCoordinate(), currentZoom());
} }
...@@ -256,7 +271,8 @@ namespace qmapcontrol ...@@ -256,7 +271,8 @@ namespace qmapcontrol
void MapControl::mouseMoveEvent(QMouseEvent* evnt) void MapControl::mouseMoveEvent(QMouseEvent* evnt)
{ {
// emit(mouseEvent(evnt)); emit(mouseEvent(evnt));
/* /*
// rotating // rotating
...@@ -275,8 +291,13 @@ namespace qmapcontrol ...@@ -275,8 +291,13 @@ namespace qmapcontrol
} }
// emit(mouseEventCoordinate(evnt, clickToWorldCoordinate(evnt->pos()))); // emit(mouseEventCoordinate(evnt, clickToWorldCoordinate(evnt->pos())));
update(); currentWorldCoordinate = clickToWorldCoordinate(evnt->pos());
// emit(mouseEventCoordinate(evnt, clickToWorldCoordinate(evnt->pos())));
emit(mouseMoveCoordinateEvent(currentWorldCoordinate));
update();
//emit(mouseEventCoordinate(evnt, clickToWorldCoordinate(evnt->pos())));
} }
QPointF MapControl::clickToWorldCoordinate(QPoint click) QPointF MapControl::clickToWorldCoordinate(QPoint click)
...@@ -403,6 +424,11 @@ namespace qmapcontrol ...@@ -403,6 +424,11 @@ namespace qmapcontrol
scaleVisible = show; scaleVisible = show;
} }
void MapControl::showCoord(bool show)
{
cursorPosVisible = show;
}
void MapControl::resize(const QSize newSize) void MapControl::resize(const QSize newSize)
{ {
this->size = newSize; this->size = newSize;
......
...@@ -214,6 +214,14 @@ namespace qmapcontrol ...@@ -214,6 +214,14 @@ namespace qmapcontrol
*/ */
void showScale ( bool show ); void showScale ( bool show );
//! Displays the Lat and Lon within the widget
/*!
*
* @param show true if Lat and Lon should be displayed
*/
void showCoord ( bool show );
private: private:
LayerManager* layermanager; LayerManager* layermanager;
QPoint screen_middle; // middle of the widget (half size) QPoint screen_middle; // middle of the widget (half size)
...@@ -223,9 +231,14 @@ namespace qmapcontrol ...@@ -223,9 +231,14 @@ namespace qmapcontrol
QSize size; // size of the widget QSize size; // size of the widget
QPointF currentWorldCoordinate; // updated by mouseMove
QList<double> distanceList;
bool mousepressed; bool mousepressed;
MouseMode mymousemode; MouseMode mymousemode;
bool scaleVisible; bool scaleVisible;
bool cursorPosVisible;
bool m_loadingFlag; bool m_loadingFlag;
...@@ -244,7 +257,7 @@ namespace qmapcontrol ...@@ -244,7 +257,7 @@ namespace qmapcontrol
void mouseMoveEvent ( QMouseEvent* evnt ); void mouseMoveEvent ( QMouseEvent* evnt );
signals: signals:
// void mouseEvent(const QMouseEvent* evnt); void mouseEvent(const QMouseEvent* evnt);
//! Emitted AFTER a MouseEvent occured //! Emitted AFTER a MouseEvent occured
/*! /*!
...@@ -256,6 +269,15 @@ namespace qmapcontrol ...@@ -256,6 +269,15 @@ namespace qmapcontrol
*/ */
void mouseEventCoordinate ( const QMouseEvent* evnt, const QPointF coordinate ); void mouseEventCoordinate ( const QMouseEvent* evnt, const QPointF coordinate );
//! Emitted on mouse move generating
/*!
* This signals allows to receive the mouse position in the world coordinate.
* It is emitted on mouseMoveEvents.
* setMouseTracking must be set programatically to have this method work.
* @param coordinate the corresponding world coordinate
*/
void mouseMoveCoordinateEvent(const QPointF coordinate);
//! Emitted, after a Rectangular is dragged. //! Emitted, after a Rectangular is dragged.
/*! /*!
* It is possible to select a rectangular area in the map, if the MouseMode is set to Dragging. * It is possible to select a rectangular area in the map, if the MouseMode is set to Dragging.
......
...@@ -44,30 +44,26 @@ MapWidget::MapWidget(QWidget *parent) : ...@@ -44,30 +44,26 @@ MapWidget::MapWidget(QWidget *parent) :
m_ui(new Ui::MapWidget) m_ui(new Ui::MapWidget)
{ {
m_ui->setupUi(this); m_ui->setupUi(this);
// Accept focus by clicking or keyboard // Accept focus by clicking or keyboard
this->setFocusPolicy(Qt::StrongFocus); this->setFocusPolicy(Qt::StrongFocus);
// create MapControl // create MapControl
mc = new MapControl(QSize(320, 240)); mc = new MapControl(QSize(320, 240));
mc->showScale(true); mc->showScale(true);
mc->showCoord(true);
mc->enablePersistentCache(); mc->enablePersistentCache();
mc->setMouseTracking(true); // required to update the mouse position for diplay and capture
//uasIcons = QMap<int, CirclePoint*>();
//QSize(480,640)
// ImageManager::instance()->setProxy("www-cache", 8080);
// create MapAdapter to get maps from // create MapAdapter to get maps from
TileMapAdapter* osmAdapter = new TileMapAdapter("tile.openstreetmap.org", "/%1/%2/%3.png", 256, 0, 17); TileMapAdapter* osmAdapter = new TileMapAdapter("tile.openstreetmap.org", "/%1/%2/%3.png", 256, 0, 17);
//GoogleSatMapAdapter* gSatAdapter = new GoogleSatMapAdapter();
// create a layer with the mapadapter and type MapLayer // create a layer with the mapadapter and type MapLayer
osmLayer = new Layer("Custom Layer", osmAdapter, Layer::MapLayer); osmLayer = new Layer("Custom Layer", osmAdapter, Layer::MapLayer);
//Layer* gSatLayer = new Layer("Custom Layer", gSatAdapter, Layer::MapLayer);
// add Layer to the MapControl // add Layer to the MapControl
mc->addLayer(osmLayer); mc->addLayer(osmLayer);
//mc->addLayer(gSatLayer); mc->setZoom(3);
// display the MapControl in the application // display the MapControl in the application
QHBoxLayout* layout = new QHBoxLayout; QHBoxLayout* layout = new QHBoxLayout;
...@@ -75,40 +71,81 @@ MapWidget::MapWidget(QWidget *parent) : ...@@ -75,40 +71,81 @@ MapWidget::MapWidget(QWidget *parent) :
layout->addWidget(mc); layout->addWidget(mc);
setLayout(layout); setLayout(layout);
// create buttons as controls for zoom
// create buttons to control the map (zoom, GPS tracking and WP capture)
QPushButton* zoomin = new QPushButton(QIcon(":/images/actions/list-add.svg"), "", this); QPushButton* zoomin = new QPushButton(QIcon(":/images/actions/list-add.svg"), "", this);
QPushButton* zoomout = new QPushButton(QIcon(":/images/actions/list-remove.svg"), "", this); QPushButton* zoomout = new QPushButton(QIcon(":/images/actions/list-remove.svg"), "", this);
createPath = new QPushButton(QIcon(":/images/actions/go-bottom.svg"), "", this);
followgps = new QPushButton(QIcon(":/images/actions/system-lock-screen.svg"), "", this); followgps = new QPushButton(QIcon(":/images/actions/system-lock-screen.svg"), "", this);
followgps->setCheckable(true);
// gpsposition = new QLabel();
zoomin->setMaximumWidth(50); zoomin->setMaximumWidth(50);
zoomout->setMaximumWidth(50); zoomout->setMaximumWidth(50);
createPath->setMaximumWidth(50);
followgps->setMaximumWidth(50); followgps->setMaximumWidth(50);
//gpsposition->setFont(QFont("Arial", 10));
connect(zoomin, SIGNAL(clicked(bool)),
mc, SLOT(zoomIn()));
connect(zoomout, SIGNAL(clicked(bool)),
mc, SLOT(zoomOut()));
// add zoom buttons to the layout of the MapControl // Set checkable buttons
// TODO: Currently checked buttons are are very difficult to distinguish when checked.
// create a style and the slots to change the background so it is easier to distinguish
followgps->setCheckable(true);
createPath->setCheckable(true);
// add buttons to control the map (zoom, GPS tracking and WP capture)
QVBoxLayout* innerlayout = new QVBoxLayout; QVBoxLayout* innerlayout = new QVBoxLayout;
innerlayout->addWidget(zoomin); innerlayout->addWidget(zoomin);
innerlayout->addWidget(zoomout); innerlayout->addWidget(zoomout);
innerlayout->addWidget(followgps); innerlayout->addWidget(followgps);
//innerlayout->addWidget(gpsposition); innerlayout->addWidget(createPath);
mc->setLayout(innerlayout); mc->setLayout(innerlayout);
// Connect the required signals-slots
connect(UASManager::instance(), SIGNAL(UASCreated(UASInterface*)),
this, SLOT(addUAS(UASInterface*)));
connect(mc, SIGNAL(mouseEventCoordinate(const QMouseEvent*, const QPointF)),
this, SLOT(captureMapClick(const QMouseEvent*, const QPointF)));
connect(createPath, SIGNAL(clicked(bool)),
this, SLOT(createPathButtonClicked()));
this->setVisible(false);
// Attic (Code that was commented)
// ==============================
//uasIcons = QMap<int, CirclePoint*>();
//QSize(480,640)
// ImageManager::instance()->setProxy("www-cache", 8080);
//GoogleSatMapAdapter* gSatAdapter = new GoogleSatMapAdapter();
//Layer* gSatLayer = new Layer("Custom Layer", gSatAdapter, Layer::MapLayer);
//mc->addLayer(gSatLayer);
// gpsposition = new QLabel();
//gpsposition->setFont(QFont("Arial", 10));
//GPS_Neo* gm = new GPS_Neo(); //GPS_Neo* gm = new GPS_Neo();
//connect(gm, SIGNAL(new_position(float, QPointF)), //connect(gm, SIGNAL(new_position(float, QPointF)),
// this, SLOT(updatePosition(float, QPointF))); // this, SLOT(updatePosition(float, QPointF)));
//gm->start(); //gm->start();
mc->setZoom(3); }
connect(UASManager::instance(), SIGNAL(UASCreated(UASInterface*)), this, SLOT(addUAS(UASInterface*))); void MapWidget::createPathButtonClicked(){
this->setCursor(createPath->isChecked()? Qt::PointingHandCursor : Qt::ArrowCursor);
}
this->setVisible(false);
void MapWidget::captureMapClick(const QMouseEvent* event, const QPointF coordinate){
if (QEvent::MouseButtonRelease == event->type() && createPath->isChecked()){
qDebug()<< "Click Event";
qDebug()<< "Lat: " << coordinate.y();
qDebug()<< "Lon: " << coordinate.x();
}
} }
MapWidget::~MapWidget() MapWidget::~MapWidget()
...@@ -180,7 +217,7 @@ void MapWidget::updateGlobalPosition(UASInterface* uas, double lat, double lon, ...@@ -180,7 +217,7 @@ void MapWidget::updateGlobalPosition(UASInterface* uas, double lat, double lon,
// points.append(new Point(8.260378, 50.030345, "Wiesbaden-Mainz-Amoneburg, Dyckerhoffstraße")); // points.append(new Point(8.260378, 50.030345, "Wiesbaden-Mainz-Amoneburg, Dyckerhoffstraße"));
// Connect click events of the layer to this object // Connect click events of the layer to this object
//connect(osmLayer, SIGNAL(geometryClicked(Geometry*, QPoint)), // connect(osmLayer, SIGNAL(geometryClicked(Geometry*, QPoint)),
// this, SLOT(geometryClicked(Geometry*, QPoint))); // this, SLOT(geometryClicked(Geometry*, QPoint)));
// Sets the view to the interesting area // Sets the view to the interesting area
......
...@@ -60,8 +60,11 @@ protected: ...@@ -60,8 +60,11 @@ protected:
void keyPressEvent(QKeyEvent *event); void keyPressEvent(QKeyEvent *event);
void resizeEvent(QResizeEvent* event); void resizeEvent(QResizeEvent* event);
QPushButton* followgps; QPushButton* followgps;
QPushButton* createPath;
QLabel* gpsposition; QLabel* gpsposition;
MapControl* mc; MapControl* mc;
int zoomLevel; int zoomLevel;
int detailZoom; ///< Steps zoomed in further than qMapControl allows int detailZoom; ///< Steps zoomed in further than qMapControl allows
...@@ -70,13 +73,17 @@ protected: ...@@ -70,13 +73,17 @@ protected:
TileMapAdapter* osmAdapter; TileMapAdapter* osmAdapter;
GoogleSatMapAdapter* gSatAdapter; GoogleSatMapAdapter* gSatAdapter;
Layer* osmLayer; Layer* osmLayer;
Layer* gSatLayer; //Layer* gSatLayer;
QMap<int, CirclePoint*> uasIcons; QMap<int, CirclePoint*> uasIcons;
QMap<int, LineString*> uasTrails; QMap<int, LineString*> uasTrails;
UASInterface* mav; UASInterface* mav;
quint64 lastUpdate; quint64 lastUpdate;
protected slots:
void captureMapClick (const QMouseEvent* event, const QPointF coordinate);
void createPathButtonClicked();
private: private:
Ui::MapWidget *m_ui; Ui::MapWidget *m_ui;
}; };
......
...@@ -10,6 +10,12 @@ ...@@ -10,6 +10,12 @@
<height>300</height> <height>300</height>
</rect> </rect>
</property> </property>
<property name="cursor">
<cursorShape>ArrowCursor</cursorShape>
</property>
<property name="mouseTracking">
<bool>true</bool>
</property>
<property name="windowTitle"> <property name="windowTitle">
<string>Form</string> <string>Form</string>
</property> </property>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment