29
QgsMapToolZoom::QgsMapToolZoom(QgsMapCanvas* canvas, bool zoomOut)
30
: QgsMapTool(canvas), mZoomOut(zoomOut), mDragging(false)
27
#include "qgslogger.h"
30
QgsMapToolZoom::QgsMapToolZoom( QgsMapCanvas* canvas, bool zoomOut )
31
: QgsMapTool( canvas ), mZoomOut( zoomOut ), mDragging( false )
33
QPixmap myZoomQPixmap = QPixmap((const char **) (zoomOut ? zoom_out : zoom_in));
34
mCursor = QCursor(myZoomQPixmap, 7, 7);
34
QPixmap myZoomQPixmap = QPixmap(( const char ** )( zoomOut ? zoom_out : zoom_in ) );
35
mCursor = QCursor( myZoomQPixmap, 7, 7 );
38
void QgsMapToolZoom::canvasMoveEvent(QMouseEvent * e)
39
void QgsMapToolZoom::canvasMoveEvent( QMouseEvent * e )
40
if (e->state() != Qt::LeftButton)
41
if ( !( e->buttons() & Qt::LeftButton ) )
46
mRubberBand = new QRubberBand(QRubberBand::Rectangle, mCanvas);
47
mZoomRect.setTopLeft(e->pos());
47
mRubberBand = new QRubberBand( QRubberBand::Rectangle, mCanvas );
48
mZoomRect.setTopLeft( e->pos() );
49
mZoomRect.setBottomRight(e->pos());
50
mRubberBand->setGeometry(mZoomRect.normalized());
50
mZoomRect.setBottomRight( e->pos() );
51
mRubberBand->setGeometry( mZoomRect.normalized() );
51
52
mRubberBand->show();
55
void QgsMapToolZoom::canvasPressEvent(QMouseEvent * e)
56
void QgsMapToolZoom::canvasPressEvent( QMouseEvent * e )
57
mZoomRect.setRect(0, 0, 0, 0);
58
if ( e->button() != Qt::LeftButton )
61
mZoomRect.setRect( 0, 0, 0, 0 );
61
void QgsMapToolZoom::canvasReleaseEvent(QMouseEvent * e)
65
void QgsMapToolZoom::canvasReleaseEvent( QMouseEvent * e )
67
if ( e->button() != Qt::LeftButton )
66
73
delete mRubberBand;
69
76
// store the rectangle
70
mZoomRect.setRight(e->pos().x());
71
mZoomRect.setBottom(e->pos().y());
73
QgsMapToPixel *coordXForm = mCanvas->getCoordinateTransform();
75
// set the extent to the zoomBox
76
QgsPoint ll = coordXForm->toMapCoordinates(mZoomRect.left(), mZoomRect.bottom());
77
QgsPoint ur = coordXForm->toMapCoordinates(mZoomRect.right(), mZoomRect.top());
77
mZoomRect.setRight( e->pos().x() );
78
mZoomRect.setBottom( e->pos().y() );
80
const QgsMapToPixel* coordinateTransform = mCanvas->getCoordinateTransform();
82
// set the extent to the zoomBox
83
QgsPoint ll = coordinateTransform->toMapCoordinates( mZoomRect.left(), mZoomRect.bottom() );
84
QgsPoint ur = coordinateTransform->toMapCoordinates( mZoomRect.right(), mZoomRect.top() );
87
r.setXMinimum( ll.x() );
88
r.setYMinimum( ll.y() );
89
r.setXMaximum( ur.x() );
90
r.setYMaximum( ur.y() );
93
// prevent zooming to an empty extent
94
if ( r.width() == 0 || r.height() == 0 )
88
101
QgsPoint cer = r.center();
89
QgsRect extent = mCanvas->extent();
102
QgsRectangle extent = mCanvas->extent();
92
if (mZoomRect.width() > mZoomRect.height())
105
if ( mZoomRect.width() > mZoomRect.height() )
94
if(r.width() == 0)//prevent nan map extent
98
107
sf = extent.width() / r.width();
102
if(r.height() == 0)//prevent nan map extent
106
111
sf = extent.height() / r.height();
111
std::cout << "Extent scaled by " << sf << " to " << r << std::endl;
112
std::cout << "Center of currentExtent after scaling is " << r.center() << std::endl;
115
QgsDebugMsg( QString( "Extent scaled by %1 to %2" ).arg( sf ).arg( r.toString().toLocal8Bit().constData() ) );
116
QgsDebugMsg( QString( "Center of currentExtent after scaling is %1" ).arg( r.center().toString().toLocal8Bit().constData() ) );
117
mCanvas->setExtent(r);
120
mCanvas->setExtent( r );
118
121
mCanvas->refresh();
120
123
else // not dragging
122
125
// change to zoom in/out by the default multiple
123
mCanvas->zoomWithCenter(e->x(), e->y(), !mZoomOut);
126
mCanvas->zoomWithCenter( e->x(), e->y(), !mZoomOut );