#ifndef FORMMAIN_H
#define FORMMAIN_H
#include <QMainWindow>
#include<GpsAccess.h>
#include<slippymap.h>
#include<formzone.h> // HERE THE INCLUDE OF MY QDIALOG
#include<threadzone.h>
namespace Ui {
class FormMain;
}
class FormMain : public QMainWindow
{
Q_OBJECT
public:
explicit FormMain(QWidget *parent = 0);
void setCenter(qreal lat, qreal lng);
~FormMain();
protected:
void paintEvent(QPaintEvent *event);
void resizeEvent(QResizeEvent *);
void mousePressEvent(QMouseEvent *event);
void changeEvent(QEvent *e);
void mouseMoveEvent(QMouseEvent *event);
void mouseReleaseEvent(QMouseEvent *) {
qDebug() << "release";
update();
}
private slots:
void on_ButtonPlus_clicked();
void on_ButtonMoins_clicked();
void updateMap(const QRect &r)
{
update(r);
}
void UpdatePositionGps();
void OnBtnZoneClick();
void ZoneAccepted();
private:
Ui::FormMain *ui;
SlippyMap *Map;
bool pressed;
QPoint pressPos;
QPoint dragPos;
GpsAccess *Gps;
double latitude;
double longitude;
QStatusBar *statusBar;
QLabel *lbStatus;
FormZone *fZone;
ThreadZone *th;
};
#include "formmain.h"
#include "ui_formmain.h"
FormMain::FormMain(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::FormMain)
{
ui->setupUi(this);
Gps = new GpsAccess();
ui->setupUi(this);
Map = new SlippyMap(this);
connect(Map, SIGNAL(updated(QRect)), SLOT(updateMap(QRect)));
connect(Gps, SIGNAL(UpdatePosition()), SLOT(UpdatePositionGps()));
//---------------- Event des objects graphique
connect(ui->ButtonMoins,SIGNAL(clicked()),this,SLOT(on_ButtonMoins_clicked()));
connect(ui->ButtonPlus,SIGNAL(clicked()),this,SLOT(on_ButtonPlus_clicked()));
connect(ui->_btnZone,SIGNAL(clicked()),this,SLOT(OnBtnZoneClick()));
QPalette qPalette;
qPalette.setColor( QPalette::Text, QColor( Qt::red ) );
lbStatus = new QLabel(this,0);
lbStatus->setPalette(qPalette);
statusBar = new QStatusBar(this);
statusBar->addWidget(lbStatus,0);statusBar->setGeometry(QRect());
QRect rect = this->geometry();
statusBar->setGeometry(rect.left(),rect.bottom()-200,rect.width(),50);
lbStatus->setGeometry(statusBar->geometry());
}
FormMain::~FormMain()
{
delete ui;
}
void FormMain:

aintEvent(QPaintEvent *event)
{
QPainter p;
p.begin(this);
QPointF posGps = Map->tileForCoordinate(latitude, longitude);
int posX = posGps.x();
int posY = posGps.y();
qreal lat1 = Map->latitudeFromTile(posY);
qreal lat2 = Map->latitudeFromTile(posY+1);
qreal lng1 = Map->longitudeFromTile(posX);
qreal lng2 = Map->longitudeFromTile(posX+1);
qreal diflat = (lat2-lat1)/256;
qreal diflng = (lng2-lng1)/256;
int y = (latitude-lat1)/ diflat;
int x = (longitude-lng1)/diflng;
QPoint *Deplacement = new QPoint (x,y);
QPoint *Tuile = new QPoint (posX, posY);
Map->render(&p, event->rect(), *Deplacement, *Tuile);
p.end();
}
void FormMain::resizeEvent(QResizeEvent *)
{
qDebug() << "Resize Event";
Map->width = width();
Map->height = height();
Map->invalidate();
}
void FormMain::mousePressEvent(QMouseEvent *event)
{
if (event->buttons() != Qt::LeftButton)
return;
pressed = true;
pressPos = dragPos = event->pos();
//qDebug() << "pressed";
}
void FormMain::mouseMoveEvent(QMouseEvent *event)
{
if (!event->buttons())
return;
if (pressed)
{
// qDebug() << "move";
QPoint delta = event->pos() - pressPos;
pressPos = event->pos();
Map->pan(delta);
return;
}
}
void FormMain::setCenter(qreal lat, qreal lng)
{
//qDebug() << "SetCenter" << lat << " " << lng;
Map->latitude = lat;
Map->longitude = lng;
Map->invalidate();
}
void FormMain::changeEvent(QEvent *e)
{
QMainWindow::changeEvent(e);
switch (e->type()) {
case QEvent::LanguageChange:
ui->retranslateUi(this);
break;
default:
break;
}
}
void FormMain:

n_ButtonMoins_clicked()
{
qDebug() << "Zoom moins";
if (Map->zoom == 18)
{
ui->ButtonPlus->setDisabled(false);
}
if(Map->zoom > 0)
{
Map->zoom = Map->zoom -1;
Map->invalidate();
}
if (Map->zoom == 0)
{
ui->ButtonMoins->setDisabled(true);
}
}
void FormMain:

n_ButtonPlus_clicked()
{
qDebug() << "Zoom plus";
if (Map->zoom == 0)
{
ui->ButtonMoins->setDisabled(false);
}
if(Map->zoom < 18)
{
Map->zoom = Map->zoom +1;
Map->invalidate();
}
if (Map->zoom == 18)
{
ui->ButtonPlus->setDisabled(true);
}
}
void FormMain::UpdatePositionGps()
{
//qDebug() << "Update Position";
//setCenter(Gps->getLatitude(), Gps->getLongitude());
latitude = Gps->getLatitude();
longitude = Gps->getLongitude();
setCenter(latitude, longitude);
QString temp = "Lat : %1 -- Lon %2";
temp = temp.arg(latitude).arg(longitude);
lbStatus->setText(temp);
}
void FormMain::OnBtnZoneClick()
{
if(!fZone);
{
fZone = new FormZone();//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! HERE IS THE ERROR
connect(fZone,SIGNAL(accepted()),this,SLOT(ZoneAccepted()));
}
fZone->exec();
Map->isZoneDownload = true;
Map->test();
Map->isZoneDownload = false;
}
void FormMain::ZoneAccepted()
{
qDebug()<<"ACCEPTED EVENT";
}
#endif // FORMMAIN_H