void QgsComposerView::scrollContentsBy( int dx, int dy ) { QGraphicsView::scrollContentsBy( dx, dy ); updateRulers(); }
void QgsComposerView::mouseMoveEvent( QMouseEvent* e ) { if ( !composition() ) { return; } mMouseCurrentXY = e->pos(); //update cursor position in composer status bar emit cursorPosChanged( mapToScene( e->pos() ) ); updateRulers(); if ( mHorizontalRuler ) { mHorizontalRuler->updateMarker( e->posF() ); } if ( mVerticalRuler ) { mVerticalRuler->updateMarker( e->posF() ); } if ( mPanning ) { //panning, so scroll view horizontalScrollBar()->setValue( horizontalScrollBar()->value() - ( e->x() - mMouseLastXY.x() ) ); verticalScrollBar()->setValue( verticalScrollBar()->value() - ( e->y() - mMouseLastXY.y() ) ); mMouseLastXY = e->pos(); return; } else if ( e->buttons() == Qt::NoButton ) { if ( mCurrentTool == Select ) { QGraphicsView::mouseMoveEvent( e ); } } else { QPointF scenePoint = mapToScene( e->pos() ); if ( mMarqueeSelect || mMarqueeZoom ) { updateRubberBand( scenePoint ); return; } switch ( mCurrentTool ) { case Select: QGraphicsView::mouseMoveEvent( e ); break; case AddArrow: { if ( mRubberBandLineItem ) { mRubberBandLineItem->setLine( mRubberBandStartPos.x(), mRubberBandStartPos.y(), scenePoint.x(), scenePoint.y() ); } break; } case AddMap: case AddRectangle: case AddTriangle: case AddEllipse: case AddHtml: //adjust rubber band item { updateRubberBand( scenePoint ); break; } case MoveItemContent: { //update map preview if composer map QgsComposerMap* composerMap = dynamic_cast<QgsComposerMap *>( mMoveContentItem ); if ( composerMap ) { composerMap->setOffset( scenePoint.x() - mMoveContentStartPos.x(), scenePoint.y() - mMoveContentStartPos.y() ); composerMap->update(); } break; } default: break; } } }
void QgsComposerView::wheelZoom( QWheelEvent * event ) { //get mouse wheel zoom behaviour settings QSettings mySettings; int wheelAction = mySettings.value( "/qgis/wheel_action", 2 ).toInt(); double zoomFactor = mySettings.value( "/qgis/zoom_factor", 2 ).toDouble(); if (( QgsMapCanvas::WheelAction )wheelAction == QgsMapCanvas::WheelNothing ) { return; } if ( event->modifiers() & Qt::ControlModifier ) { //holding ctrl while wheel zooming results in a finer zoom zoomFactor = 1.0 + ( zoomFactor - 1.0 ) / 10.0; } //caculate zoom scale factor bool zoomIn = event->delta() > 0; double scaleFactor = ( zoomIn ? 1 / zoomFactor : zoomFactor ); //get current visible part of scene QRect viewportRect( 0, 0, viewport()->width(), viewport()->height() ); QgsRectangle visibleRect = QgsRectangle( mapToScene( viewportRect ).boundingRect() ); //transform the mouse pos to scene coordinates QPointF scenePoint = mapToScene( event->pos() ); //adjust view center according to wheel action setting switch (( QgsMapCanvas::WheelAction )wheelAction ) { case QgsMapCanvas::WheelZoomAndRecenter: { centerOn( scenePoint.x(), scenePoint.y() ); break; } case QgsMapCanvas::WheelZoomToMouseCursor: { QgsPoint oldCenter( visibleRect.center() ); QgsPoint newCenter( scenePoint.x() + (( oldCenter.x() - scenePoint.x() ) * scaleFactor ), scenePoint.y() + (( oldCenter.y() - scenePoint.y() ) * scaleFactor ) ); centerOn( newCenter.x(), newCenter.y() ); break; } default: break; } //zoom composition if ( zoomIn ) { scale( zoomFactor, zoomFactor ); } else { scale( 1 / zoomFactor, 1 / zoomFactor ); } //update composition for new zoom emit zoomLevelChanged(); updateRulers(); update(); //redraw cached map items QList<QGraphicsItem *> itemList = composition()->items(); QList<QGraphicsItem *>::iterator itemIt = itemList.begin(); for ( ; itemIt != itemList.end(); ++itemIt ) { QgsComposerMap* mypItem = dynamic_cast<QgsComposerMap *>( *itemIt ); if (( mypItem ) && ( mypItem->previewMode() == QgsComposerMap::Render ) ) { mypItem->updateCachedImage(); } } }
void QgsComposerView::resizeEvent( QResizeEvent* event ) { QGraphicsView::resizeEvent( event ); emit zoomLevelChanged(); updateRulers(); }
void QgsComposerView::wheelZoom( QWheelEvent * event ) { //get mouse wheel zoom behaviour settings QSettings mySettings; int wheelAction = mySettings.value( "/qgis/wheel_action", 2 ).toInt(); double zoomFactor = mySettings.value( "/qgis/zoom_factor", 2 ).toDouble(); //caculate zoom scale factor bool zoomIn = event->delta() > 0; double scaleFactor = ( zoomIn ? 1 / zoomFactor : zoomFactor ); //get current visible part of scene QRect viewportRect( 0, 0, viewport()->width(), viewport()->height() ); QgsRectangle visibleRect = QgsRectangle( mapToScene( viewportRect ).boundingRect() ); //transform the mouse pos to scene coordinates QPointF scenePoint = mapToScene( event->pos() ); //zoom composition, respecting wheel action setting switch (( QgsMapCanvas::WheelAction )wheelAction ) { case QgsMapCanvas::WheelZoom: // zoom without changing extent if ( zoomIn ) { scale( zoomFactor, zoomFactor ); } else { scale( 1 / zoomFactor, 1 / zoomFactor ); } break; case QgsMapCanvas::WheelZoomAndRecenter: { visibleRect.scale( scaleFactor, scenePoint.x(), scenePoint.y() ); fitInView( visibleRect.toRectF(), Qt::KeepAspectRatio ); break; } case QgsMapCanvas::WheelZoomToMouseCursor: { QgsPoint oldCenter( visibleRect.center() ); QgsPoint newCenter( scenePoint.x() + (( oldCenter.x() - scenePoint.x() ) * scaleFactor ), scenePoint.y() + (( oldCenter.y() - scenePoint.y() ) * scaleFactor ) ); visibleRect.scale( scaleFactor, newCenter.x(), newCenter.y() ); fitInView( visibleRect.toRectF(), Qt::KeepAspectRatio ); break; } case QgsMapCanvas::WheelNothing: return; } //update composition for new zoom updateRulers(); update(); //redraw cached map items QList<QGraphicsItem *> itemList = composition()->items(); QList<QGraphicsItem *>::iterator itemIt = itemList.begin(); for ( ; itemIt != itemList.end(); ++itemIt ) { QgsComposerMap* mypItem = dynamic_cast<QgsComposerMap *>( *itemIt ); if (( mypItem ) && ( mypItem->previewMode() == QgsComposerMap::Render ) ) { mypItem->updateCachedImage(); } } }
void QgsComposerView::resizeEvent( QResizeEvent* event ) { QGraphicsView::resizeEvent( event ); updateRulers(); }
void QgsComposerView::mouseMoveEvent( QMouseEvent* e ) { if ( !composition() ) { return; } updateRulers(); if ( mHorizontalRuler ) { mHorizontalRuler->updateMarker( e->posF() ); } if ( mVerticalRuler ) { mVerticalRuler->updateMarker( e->posF() ); } if ( e->buttons() == Qt::NoButton ) { if ( mCurrentTool == Select ) { QGraphicsView::mouseMoveEvent( e ); } } else { QPointF scenePoint = mapToScene( e->pos() ); switch ( mCurrentTool ) { case Select: QGraphicsView::mouseMoveEvent( e ); break; case AddArrow: { if ( mRubberBandLineItem ) { mRubberBandLineItem->setLine( mRubberBandStartPos.x(), mRubberBandStartPos.y(), scenePoint.x(), scenePoint.y() ); } break; } case AddMap: case AddRectangle: case AddTriangle: case AddEllipse: case AddHtml: //adjust rubber band item { double x = 0; double y = 0; double width = 0; double height = 0; double dx = scenePoint.x() - mRubberBandStartPos.x(); double dy = scenePoint.y() - mRubberBandStartPos.y(); if ( dx < 0 ) { x = scenePoint.x(); width = -dx; } else { x = mRubberBandStartPos.x(); width = dx; } if ( dy < 0 ) { y = scenePoint.y(); height = -dy; } else { y = mRubberBandStartPos.y(); height = dy; } if ( mRubberBandItem ) { mRubberBandItem->setRect( 0, 0, width, height ); QTransform t; t.translate( x, y ); mRubberBandItem->setTransform( t ); } break; } case MoveItemContent: { //update map preview if composer map QgsComposerMap* composerMap = dynamic_cast<QgsComposerMap *>( mMoveContentItem ); if ( composerMap ) { composerMap->setOffset( scenePoint.x() - mMoveContentStartPos.x(), scenePoint.y() - mMoveContentStartPos.y() ); composerMap->update(); } break; } default: break; } } }
void QgsLayoutView::scrollContentsBy( int dx, int dy ) { QGraphicsView::scrollContentsBy( dx, dy ); updateRulers(); }
void QgsLayoutView::zoomFull() { fitInView( scene()->sceneRect(), Qt::KeepAspectRatio ); updateRulers(); emit zoomLevelChanged(); }
void QgsLayoutView::setVerticalRuler( QgsLayoutRuler *ruler ) { mVerticalRuler = ruler; ruler->setLayoutView( this ); updateRulers(); }
void QgsLayoutView::setHorizontalRuler( QgsLayoutRuler *ruler ) { mHorizontalRuler = ruler; ruler->setLayoutView( this ); updateRulers(); }