diff --git a/python/core/composer/qgscomposition.sip b/python/core/composer/qgscomposition.sip index 4aa1e95d61d..cfbd8a156d2 100644 --- a/python/core/composer/qgscomposition.sip +++ b/python/core/composer/qgscomposition.sip @@ -222,6 +222,20 @@ class QgsComposition : QGraphicsScene * @note Added in QGIS 2.5 */ int snapTolerance() const; + + /**Sets whether selection bounding boxes should be shown in the composition + * @param boundsVisible set to true to show selection bounding box + * @see boundingBoxesVisible + * @note added in QGIS 2.7 + */ + void setBoundingBoxesVisible( const bool boundsVisible ); + + /**Returns whether selection bounding boxes should be shown in the composition + * @returns true if selection bounding boxes should be shown + * @see setBoundingBoxesVisible + * @note added in QGIS 2.7 + */ + bool boundingBoxesVisible() const; /**Returns pointer to undo/redo command storage*/ QUndoStack* undoStack(); diff --git a/src/app/composer/qgscomposer.cpp b/src/app/composer/qgscomposer.cpp index 3bbf4e88294..fca3d53ced5 100644 --- a/src/app/composer/qgscomposer.cpp +++ b/src/app/composer/qgscomposer.cpp @@ -190,6 +190,7 @@ QgsComposer::QgsComposer( QgisApp *qgis, const QString& title ) mActionSnapGuides->setCheckable( true ); mActionSmartGuides->setCheckable( true ); mActionShowRulers->setCheckable( true ); + mActionShowBoxes->setCheckable( true ); mActionAtlasPreview->setCheckable( true ); @@ -332,6 +333,7 @@ QgsComposer::QgsComposer( QgisApp *qgis, const QString& title ) viewMenu->addAction( mActionSmartGuides ); viewMenu->addAction( mActionClearGuides ); viewMenu->addSeparator(); + viewMenu->addAction( mActionShowBoxes ); viewMenu->addAction( mActionShowRulers ); // Panel and toolbar submenus @@ -1192,6 +1194,15 @@ void QgsComposer::on_mActionSmartGuides_triggered( bool checked ) } } +void QgsComposer::on_mActionShowBoxes_triggered( bool checked ) +{ + //show or hide bounding boxes + if ( mComposition ) + { + mComposition->setBoundingBoxesVisible( checked ); + } +} + void QgsComposer::on_mActionClearGuides_triggered() { //clear guide lines @@ -3155,6 +3166,8 @@ void QgsComposer::restoreGridSettings() mActionShowGuides->setChecked( mComposition->snapLinesVisible() ); mActionSnapGuides->setChecked( mComposition->alignmentSnap() ); mActionSmartGuides->setChecked( mComposition->smartGuidesEnabled() ); + //general view settings + mActionShowBoxes->setChecked( mComposition->boundingBoxesVisible() ); } void QgsComposer::deleteItemWidgets() diff --git a/src/app/composer/qgscomposer.h b/src/app/composer/qgscomposer.h old mode 100644 new mode 100755 index 45362185b54..baacb82db43 --- a/src/app/composer/qgscomposer.h +++ b/src/app/composer/qgscomposer.h @@ -317,6 +317,9 @@ class QgsComposer: public QMainWindow, private Ui::QgsComposerBase //!Enable or disable smart guides void on_mActionSmartGuides_triggered( bool checked ); + //!Show/hide bounding boxes + void on_mActionShowBoxes_triggered( bool checked ); + //!Show/hide rulers void toggleRulers( bool checked ); diff --git a/src/core/composer/qgscomposermousehandles.cpp b/src/core/composer/qgscomposermousehandles.cpp index 8bf9f01a448..a8b3da6e5be 100755 --- a/src/core/composer/qgscomposermousehandles.cpp +++ b/src/core/composer/qgscomposermousehandles.cpp @@ -89,12 +89,18 @@ void QgsComposerMouseHandles::paint( QPainter* painter, const QStyleOptionGraphi return; } - //draw resize handles around bounds of entire selection - double rectHandlerSize = rectHandlerBorderTolerance(); - drawHandles( painter, rectHandlerSize ); + if ( mComposition->boundingBoxesVisible() ) + { + //draw resize handles around bounds of entire selection + double rectHandlerSize = rectHandlerBorderTolerance(); + drawHandles( painter, rectHandlerSize ); + } - //draw dotted boxes around selected items - drawSelectedItemBounds( painter ); + if ( mIsResizing || mIsDragging || mComposition->boundingBoxesVisible() ) + { + //draw dotted boxes around selected items + drawSelectedItemBounds( painter ); + } } void QgsComposerMouseHandles::drawHandles( QPainter* painter, double rectHandlerSize ) @@ -589,6 +595,7 @@ void QgsComposerMouseHandles::mouseReleaseEvent( QGraphicsSceneMouseEvent* event { mIsDragging = false; mIsResizing = false; + update(); return; } diff --git a/src/core/composer/qgscomposition.cpp b/src/core/composer/qgscomposition.cpp index 016a0d00430..bb23c6096c5 100644 --- a/src/core/composer/qgscomposition.cpp +++ b/src/core/composer/qgscomposition.cpp @@ -96,6 +96,7 @@ void QgsComposition::init() mGuidesVisible = true; mSmartGuides = true; mSnapTolerance = 0; + mBoundingBoxesVisible = true; mSelectionHandles = 0; mActiveItemCommand = 0; mActiveMultiFrameCommand = 0; @@ -215,6 +216,7 @@ void QgsComposition::loadDefaults() mSnapGridOffsetX = settings.value( "/Composer/defaultSnapGridOffsetX", 0 ).toDouble(); mSnapGridOffsetY = settings.value( "/Composer/defaultSnapGridOffsetY", 0 ).toDouble(); mSnapTolerance = settings.value( "/Composer/defaultSnapTolerancePixels", 5 ).toInt(); + mBoundingBoxesVisible = settings.value( "/Composer/showBoundingBoxes", true ).toBool(); } void QgsComposition::updateBounds() @@ -2142,6 +2144,20 @@ void QgsComposition::setGridStyle( const GridStyle s ) updatePaperItems(); } +void QgsComposition::setBoundingBoxesVisible( const bool boundsVisible ) +{ + mBoundingBoxesVisible = boundsVisible; + + //save to settings + QSettings settings; + settings.setValue( "/Composer/showBoundingBoxes", mBoundingBoxesVisible ); + + if ( mSelectionHandles ) + { + mSelectionHandles->update(); + } +} + void QgsComposition::updateSettings() { //load new composer setting values diff --git a/src/core/composer/qgscomposition.h b/src/core/composer/qgscomposition.h old mode 100644 new mode 100755 index e7b031ad639..a5c2dd8a26e --- a/src/core/composer/qgscomposition.h +++ b/src/core/composer/qgscomposition.h @@ -284,6 +284,20 @@ class CORE_EXPORT QgsComposition : public QGraphicsScene */ int snapTolerance() const { return mSnapTolerance; } + /**Sets whether selection bounding boxes should be shown in the composition + * @param boundsVisible set to true to show selection bounding box + * @see boundingBoxesVisible + * @note added in QGIS 2.7 + */ + void setBoundingBoxesVisible( const bool boundsVisible ); + + /**Returns whether selection bounding boxes should be shown in the composition + * @returns true if selection bounding boxes should be shown + * @see setBoundingBoxesVisible + * @note added in QGIS 2.7 + */ + bool boundingBoxesVisible() const { return mBoundingBoxesVisible; } + /**Returns pointer to undo/redo command storage*/ QUndoStack* undoStack() { return mUndoStack; } @@ -742,6 +756,7 @@ class CORE_EXPORT QgsComposition : public QGraphicsScene /**Arbitraty snap lines (horizontal and vertical)*/ QList< QGraphicsLineItem* > mSnapLines; + bool mBoundingBoxesVisible; QgsComposerMouseHandles* mSelectionHandles; QUndoStack* mUndoStack; diff --git a/src/ui/qgscomposerbase.ui b/src/ui/qgscomposerbase.ui index 74041ded76e..534a97cc854 100755 --- a/src/ui/qgscomposerbase.ui +++ b/src/ui/qgscomposerbase.ui @@ -1012,6 +1012,17 @@ Atlas &Settings + + + Show Bounding Boxes + + + Show bounding boxes + + + Ctrl+Shift+B + +