18#include "moc_qgsmodelviewrubberband.cpp"
21#include <QGraphicsRectItem>
41 const double dx = position.x() -
start.x();
42 const double dy = position.y() -
start.y();
44 if ( constrainSquare )
46 if ( std::fabs( dx ) > std::fabs( dy ) )
48 width = std::fabs( dx );
53 height = std::fabs( dy );
57 x =
start.x() - ( ( dx < 0 ) ? width : 0 );
58 y =
start.y() - ( ( dy < 0 ) ? height : 0 );
88 x =
start.x() - width;
89 y =
start.y() - height;
94 return QRectF( x, y, width, height );
130 if ( mRubberBandItem )
132 view()->scene()->removeItem( mRubberBandItem );
133 delete mRubberBandItem;
140 mRubberBandItem =
new QGraphicsRectItem( 0, 0, 0, 0 );
141 mRubberBandItem->setBrush(
brush() );
142 mRubberBandItem->setPen(
pen() );
143 mRubberBandStartPos = position;
144 t.translate( position.x(), position.y() );
145 mRubberBandItem->setTransform( t );
146 mRubberBandItem->setZValue( QgsModelGraphicsScene::RubberBand );
147 view()->scene()->addItem( mRubberBandItem );
148 view()->scene()->update();
153 if ( !mRubberBandItem )
158 const bool constrainSquare = modifiers & Qt::ShiftModifier;
159 const bool fromCenter = modifiers & Qt::AltModifier;
161 const QRectF newRect =
updateRect( mRubberBandStartPos, position, constrainSquare, fromCenter );
162 mRubberBandItem->setRect( 0, 0, newRect.width(), newRect.height() );
164 t.translate( newRect.x(), newRect.y() );
165 mRubberBandItem->setTransform( t );
170 const bool constrainSquare = modifiers & Qt::ShiftModifier;
171 const bool fromCenter = modifiers & Qt::AltModifier;
173 if ( mRubberBandItem )
175 view()->scene()->removeItem( mRubberBandItem );
176 delete mRubberBandItem;
177 mRubberBandItem =
nullptr;
179 return updateRect( mRubberBandStartPos, position, constrainSquare, fromCenter );
QgsModelViewRectangularRubberBand is rectangular rubber band for use within QgsModelGraphicsView widg...
QgsModelViewRectangularRubberBand(QgsModelGraphicsView *view=nullptr)
Constructor for QgsModelViewRectangularRubberBand.
void update(QPointF position, Qt::KeyboardModifiers modifiers) override
Called when a rubber band should be updated to reflect a temporary ending position (in model coordina...
void start(QPointF position, Qt::KeyboardModifiers modifiers) override
Called when a rubber band should be created at the specified starting position (in model coordinate s...
QgsModelViewRectangularRubberBand * create(QgsModelGraphicsView *view) const override
Creates a new instance of the QgsModelViewRubberBand subclass.
QRectF finish(QPointF position=QPointF(), Qt::KeyboardModifiers modifiers=Qt::KeyboardModifiers()) override
Called when a rubber band use has finished and the rubber band is no longer required.
~QgsModelViewRectangularRubberBand() override
QgsModelViewRubberBand is an abstract base class for temporary rubber band items in various shapes,...
QRectF updateRect(QPointF start, QPointF position, bool constrainSquare, bool fromCenter)
Calculates an updated bounding box rectangle from a original start position and new position.
void setPen(const QPen &pen)
Sets the pen used for drawing the rubber band.
void setBrush(const QBrush &brush)
Sets the brush used for drawing the rubber band.
QgsModelViewRubberBand(QgsModelGraphicsView *view=nullptr)
Constructor for QgsModelViewRubberBand.
QPen pen() const
Returns the pen used for drawing the rubber band.
QgsModelGraphicsView * view() const
Returns the view associated with the rubber band.
virtual void start(QPointF position, Qt::KeyboardModifiers modifiers)=0
Called when a rubber band should be created at the specified starting position (in model coordinate s...
QBrush brush() const
Returns the brush used for drawing the rubber band.