#include <QApplication>
#include <QMainWindow>
#include <QStatusBar>
#include <QGraphicsView>
#include <QGraphicsScene>
#include <QGraphicsTextItem>
#include <QMouseEvent>
#include <QGraphicsSceneMouseEvent>
#include <QScrollBar>
#include <QLabel>
#include <math.h>

class MapView : public QGraphicsView
{

public:
	MapView(QWidget *parent = 0);

protected:
	void scaleView(qreal scaleFactor);
	void wheelEvent(QWheelEvent *event);

private:

};

MapView::MapView(QWidget *parent)
    : QGraphicsView(parent)

{
	setAttribute (Qt::WA_SetCursor);
	setCursor(Qt::CrossCursor);
	scale(1,-1);

	setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
    setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
	setTransformationAnchor(QGraphicsView::AnchorUnderMouse);
    setDragMode(ScrollHandDrag);
}

 void MapView::wheelEvent(QWheelEvent *event)
 {
     scaleView(pow((double)2, event->delta() / 240.0));
 }

void MapView::scaleView(qreal scaleFactor)
{
    qreal factor = matrix().scale(scaleFactor, scaleFactor).mapRect(QRectF(0, 0, 1, 1)).width();
    if (factor < 0.07 || factor > 100)
        return;
    scale(scaleFactor, scaleFactor);
}


class MapScene : public QGraphicsScene
{
public:
	MapScene(QWidget *parent = 0);
	QPointF cursorPosition;
	QLabel *coordinateDisplayLabel;

protected:
	void mouseMoveEvent(QGraphicsSceneMouseEvent *event);

private:
	QString cursorXString;
	QString cursorYString;
};

MapScene::MapScene(QWidget *parent)
    : QGraphicsScene(parent)

{
	coordinateDisplayLabel = new QLabel(0);
	setSceneRect(-30000, -30000, 60000, 60000);
  	setBackgroundBrush(Qt::black);
}

void MapScene::mouseMoveEvent (QGraphicsSceneMouseEvent *event)
{
	cursorPosition = event->scenePos();
	cursorXString.setNum(cursorPosition.x());
	cursorYString.setNum(cursorPosition.y());
	coordinateDisplayLabel->setText("x = " + cursorXString + "    " + "y = " + cursorYString);
	QGraphicsScene::mouseMoveEvent(event);
}


int main( int argc, char **argv )
{
    QApplication a( argc, argv );
    QMainWindow *mw = new QMainWindow();
    QStatusBar *statusbar = new QStatusBar;
  	MapView *view = new MapView;
  	MapScene *scene = new MapScene;

	scene->addLine ( -50, 0, 50, 0, (QPen(Qt::white, 0)));
	scene->addLine ( 0, -50, 0, 50, (QPen(Qt::white, 0)));
	QGraphicsTextItem item1("0,0");
	item1.setDefaultTextColor(Qt::white);
	item1.setPos(0,0);
	item1.scale(1,-1);
	scene->addItem(&item1);
	scene->addLine ( 200, 250, 300, 250, (QPen(Qt::white, 0)));
	scene->addLine ( 250, 300, 250, 200, (QPen(Qt::white, 0)));
	QGraphicsTextItem item2("250,250");
	item2.setDefaultTextColor(Qt::white);
	item2.setPos(250,250);
	item2.scale(1,-1);
	scene->addItem(&item2);

  	view->setScene(scene);
	mw->setCentralWidget(view);
	statusbar->addPermanentWidget(scene->coordinateDisplayLabel, 0);
	mw->setStatusBar(statusbar);
  	mw->show();

  	return a.exec();
}

