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
+
+