void QgsComposerMouseHandles::paint( QPainter* painter, const QStyleOptionGraphicsItem* itemStyle, QWidget* pWidget ) { Q_UNUSED( itemStyle ); Q_UNUSED( pWidget ); if ( mComposition->plotStyle() != QgsComposition::Preview ) { //don't draw selection handles in composition outputs return; } //draw resize handles around bounds of entire selection double rectHandlerSize = rectHandlerBorderTolerance(); drawHandles( painter, rectHandlerSize ); //draw dotted boxes around selected items drawSelectedItemBounds( painter ); }
void QgsComposerItem::drawSelectionBoxes( QPainter* p ) { if ( !mComposition ) { return; } if ( mComposition->plotStyle() == QgsComposition::Preview ) { //size of symbol boxes depends on zoom level in composer view double rectHandlerSize = rectHandlerBorderTolerance(); double sizeLockSymbol = lockSymbolSize(); if ( mItemPositionLocked ) { //draw lock symbol at upper left edge. Use QImage to be independent of the graphic system QString lockIconPath = QgsApplication::activeThemePath() + "/mIconLock.png"; if ( !QFile::exists( lockIconPath ) ) { lockIconPath = QgsApplication::defaultThemePath() + "/mIconLock.png"; } QImage lockImage( lockIconPath ); if ( !lockImage.isNull() ) { p->drawImage( QRectF( 0, 0, sizeLockSymbol, sizeLockSymbol ), lockImage, QRectF( 0, 0, lockImage.width(), lockImage.height() ) ); } } else //draw blue squares { p->setPen( QColor( 50, 100, 120, 200 ) ); p->setBrush( QColor( 200, 200, 210, 120 ) ); p->drawRect( QRectF( 0, 0, rectHandlerSize, rectHandlerSize ) ); p->drawRect( QRectF( rect().width() - rectHandlerSize, 0, rectHandlerSize, rectHandlerSize ) ); p->drawRect( QRectF( rect().width() - rectHandlerSize, rect().height() - rectHandlerSize, rectHandlerSize, rectHandlerSize ) ); p->drawRect( QRectF( 0, rect().height() - rectHandlerSize, rectHandlerSize, rectHandlerSize ) ); } } }
QgsComposerItem::MouseMoveAction QgsComposerItem::mouseMoveActionForPosition( const QPointF& itemCoordPos ) { //no action at all if item position is locked for mouse if ( mItemPositionLocked ) { return QgsComposerItem::NoAction; } bool nearLeftBorder = false; bool nearRightBorder = false; bool nearLowerBorder = false; bool nearUpperBorder = false; double borderTolerance = rectHandlerBorderTolerance(); if ( itemCoordPos.x() < borderTolerance ) { nearLeftBorder = true; } if ( itemCoordPos.y() < borderTolerance ) { nearUpperBorder = true; } if ( itemCoordPos.x() > ( rect().width() - borderTolerance ) ) { nearRightBorder = true; } if ( itemCoordPos.y() > ( rect().height() - borderTolerance ) ) { nearLowerBorder = true; } if ( nearLeftBorder && nearUpperBorder ) { return QgsComposerItem::ResizeLeftUp; } else if ( nearLeftBorder && nearLowerBorder ) { return QgsComposerItem::ResizeLeftDown; } else if ( nearRightBorder && nearUpperBorder ) { return QgsComposerItem::ResizeRightUp; } else if ( nearRightBorder && nearLowerBorder ) { return QgsComposerItem::ResizeRightDown; } else if ( nearLeftBorder ) { return QgsComposerItem::ResizeLeft; } else if ( nearRightBorder ) { return QgsComposerItem::ResizeRight; } else if ( nearUpperBorder ) { return QgsComposerItem::ResizeUp; } else if ( nearLowerBorder ) { return QgsComposerItem::ResizeDown; } return QgsComposerItem::MoveItem; //default }