Skip to content

Commit 83764a6

Browse files
committed
[Feature] Freeze-thaw labeling tool, with on-the-fly transformation support.
1 parent 298632e commit 83764a6

16 files changed

+755
-10
lines changed

images/images.qrc

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@
7777
<file>themes/default/mActionFileSmall.png</file>
7878
<file>themes/default/mActionFolder.png</file>
7979
<file>themes/default/mActionFormAnnotation.png</file>
80+
<file>themes/default/mActionFreezeLabels.png</file>
8081
<file>themes/default/mActionFromSelectedFeature.png</file>
8182
<file>themes/default/mActionFullHistogramStretch.png</file>
8283
<file>themes/default/mActionGroupItems.png</file>
@@ -143,6 +144,7 @@
143144
<file>themes/default/mActionSelectRectangle.png</file>
144145
<file>themes/default/mActionShowAllLayers.png</file>
145146
<file>themes/default/mActionShowBookmarks.png</file>
147+
<file>themes/default/mActionShowFrozenLabels.png</file>
146148
<file>themes/default/mActionShowPluginManager.png</file>
147149
<file>themes/default/mActionSimplify.png</file>
148150
<file>themes/default/mActionSplitFeatures.png</file>
1.28 KB
Loading
Loading

src/app/CMakeLists.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ SET(QGIS_APP_SRCS
5555
qgsmaptooledit.cpp
5656
qgsmaptoolfeatureaction.cpp
5757
qgsmaptoolformannotation.cpp
58+
qgsmaptoolfreezelabels.cpp
5859
qgsmaptoolidentify.cpp
5960
qgsmaptoollabel.cpp
6061
qgsmaptoolmeasureangle.cpp
@@ -203,6 +204,7 @@ SET (QGIS_APP_MOC_HDRS
203204
qgsmaptooldeletering.h
204205
qgsmaptooldeletevertex.h
205206
qgsmaptoolfeatureaction.h
207+
qgsmaptoolfreezelabels.h
206208
qgsmaptoolidentify.h
207209
qgsmaptoolmeasureangle.h
208210
qgsmaptoolmovefeature.h

src/app/qgisapp.cpp

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -231,6 +231,7 @@
231231
#include "qgsmaptoolzoom.h"
232232
#include "qgsmaptoolsimplify.h"
233233
#include "qgsmeasuretool.h"
234+
#include "qgsmaptoolfreezelabels.h"
234235
#include "qgsmaptoolmovelabel.h"
235236
#include "qgsmaptoolrotatelabel.h"
236237
#include "qgsmaptoolchangelabelproperties.h"
@@ -709,6 +710,7 @@ QgisApp::~QgisApp()
709710
delete mMapTools.mAddPart;
710711
delete mMapTools.mNodeTool;
711712
delete mMapTools.mRotatePointSymbolsTool;
713+
delete mMapTools.mFreezeLabels;
712714
delete mMapTools.mMoveLabel;
713715
delete mMapTools.mRotateLabel;
714716
delete mMapTools.mChangeLabelProperties;
@@ -974,6 +976,8 @@ void QgisApp::createActions()
974976
connect( mActionAbout, SIGNAL( triggered() ), this, SLOT( about() ) );
975977
connect( mActionSponsors, SIGNAL( triggered() ), this, SLOT( sponsors() ) );
976978

979+
connect( mActionShowFrozenLabels, SIGNAL( toggled( bool ) ), this, SLOT( showFrozenLabels( bool ) ) );
980+
connect( mActionFreezeLabels, SIGNAL( triggered() ), this, SLOT( freezeLabels() ) );
977981
connect( mActionMoveLabel, SIGNAL( triggered() ), this, SLOT( moveLabel() ) );
978982
connect( mActionRotateLabel, SIGNAL( triggered() ), this, SLOT( rotateLabel() ) );
979983
connect( mActionChangeLabelProperties, SIGNAL( triggered() ), this, SLOT( changeLabelProperties() ) );
@@ -1083,6 +1087,7 @@ void QgisApp::createActionGroups()
10831087
mMapToolGroup->addAction( mActionMergeFeatureAttributes );
10841088
mMapToolGroup->addAction( mActionNodeTool );
10851089
mMapToolGroup->addAction( mActionRotatePointSymbols );
1090+
mMapToolGroup->addAction( mActionFreezeLabels );
10861091
mMapToolGroup->addAction( mActionMoveLabel );
10871092
mMapToolGroup->addAction( mActionRotateLabel );
10881093
mMapToolGroup->addAction( mActionChangeLabelProperties );
@@ -1612,6 +1617,8 @@ void QgisApp::setTheme( QString theThemeName )
16121617
mActionFormAnnotation->setIcon( QgsApplication::getThemeIcon( "/mActionFormAnnotation.png" ) );
16131618
mActionTextAnnotation->setIcon( QgsApplication::getThemeIcon( "/mActionTextAnnotation.png" ) );
16141619
mActionLabeling->setIcon( QgsApplication::getThemeIcon( "/mActionLabeling.png" ) );
1620+
mActionShowFrozenLabels->setIcon( QgsApplication::getThemeIcon( "/mActionShowFrozenLabels.png" ) );
1621+
mActionFreezeLabels->setIcon( QgsApplication::getThemeIcon( "/mActionFreezeLabels.png" ) );
16151622
mActionMoveLabel->setIcon( QgsApplication::getThemeIcon( "/mActionMoveLabel.png" ) );
16161623
mActionRotateLabel->setIcon( QgsApplication::getThemeIcon( "/mActionRotateLabel.png" ) );
16171624
mActionChangeLabelProperties->setIcon( QgsApplication::getThemeIcon( "/mActionChangeLabelProperties.png" ) );
@@ -1778,6 +1785,8 @@ void QgisApp::createCanvasTools()
17781785
mMapTools.mNodeTool->setAction( mActionNodeTool );
17791786
mMapTools.mRotatePointSymbolsTool = new QgsMapToolRotatePointSymbols( mMapCanvas );
17801787
mMapTools.mRotatePointSymbolsTool->setAction( mActionRotatePointSymbols );
1788+
mMapTools.mFreezeLabels = new QgsMapToolFreezeLabels( mMapCanvas );
1789+
mMapTools.mFreezeLabels->setAction( mActionFreezeLabels );
17811790
mMapTools.mMoveLabel = new QgsMapToolMoveLabel( mMapCanvas );
17821791
mMapTools.mMoveLabel->setAction( mActionMoveLabel );
17831792
mMapTools.mRotateLabel = new QgsMapToolRotateLabel( mMapCanvas );
@@ -4137,6 +4146,17 @@ bool QgisApp::loadAnnotationItemsFromProject( const QDomDocument& doc )
41374146
return true;
41384147
}
41394148

4149+
void QgisApp::showFrozenLabels( bool show )
4150+
{
4151+
qobject_cast<QgsMapToolFreezeLabels*>( mMapTools.mFreezeLabels )->showFrozenLabels( show );
4152+
}
4153+
4154+
void QgisApp::freezeLabels()
4155+
{
4156+
mActionShowFrozenLabels->setChecked( true );
4157+
mMapCanvas->setMapTool( mMapTools.mFreezeLabels );
4158+
}
4159+
41404160
void QgisApp::moveLabel()
41414161
{
41424162
mMapCanvas->setMapTool( mMapTools.mMoveLabel );
@@ -6557,7 +6577,7 @@ void QgisApp::legendLayerSelectionChanged( void )
65576577

65586578
void QgisApp::activateDeactivateLayerRelatedActions( QgsMapLayer* layer )
65596579
{
6560-
bool enableMove = false, enableRotate = false, enableChange = false;
6580+
bool enableMove = false, enableRotate = false, enableFreeze = false, enableChange = false;
65616581

65626582
QMap<QString, QgsMapLayer*> layers = QgsMapLayerRegistry::instance()->mapLayers();
65636583
for ( QMap<QString, QgsMapLayer*>::iterator it = layers.begin(); it != layers.end(); it++ )
@@ -6568,6 +6588,11 @@ void QgisApp::activateDeactivateLayerRelatedActions( QgsMapLayer* layer )
65686588
continue;
65696589

65706590
int colX, colY, colAng;
6591+
enableFreeze =
6592+
enableFreeze ||
6593+
( qobject_cast<QgsMapToolFreezeLabels*>( mMapTools.mFreezeLabels ) &&
6594+
qobject_cast<QgsMapToolFreezeLabels*>( mMapTools.mFreezeLabels )->layerCanFreeze( vlayer, colX, colY ) );
6595+
65716596
enableMove =
65726597
enableMove ||
65736598
( qobject_cast<QgsMapToolMoveLabel*>( mMapTools.mMoveLabel ) &&
@@ -6582,10 +6607,11 @@ void QgisApp::activateDeactivateLayerRelatedActions( QgsMapLayer* layer )
65826607

65836608
enableChange = true;
65846609

6585-
if ( enableMove && enableRotate && enableChange )
6610+
if ( enableFreeze && enableMove && enableRotate && enableChange )
65866611
break;
65876612
}
65886613

6614+
mActionFreezeLabels->setEnabled( enableFreeze );
65896615
mActionMoveLabel->setEnabled( enableMove );
65906616
mActionRotateLabel->setEnabled( enableRotate );
65916617
mActionChangeLabelProperties->setEnabled( enableChange );
@@ -6632,6 +6658,7 @@ void QgisApp::activateDeactivateLayerRelatedActions( QgsMapLayer* layer )
66326658
mActionMergeFeatureAttributes->setEnabled( false );
66336659
mActionRotatePointSymbols->setEnabled( false );
66346660

6661+
mActionFreezeLabels->setEnabled( false );
66356662
mActionMoveLabel->setEnabled( false );
66366663
mActionRotateLabel->setEnabled( false );
66376664
mActionChangeLabelProperties->setEnabled( false );

src/app/qgisapp.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -309,6 +309,8 @@ class QgisApp : public QMainWindow, private Ui::MainWindow
309309
QAction *actionAbout() { return mActionAbout; }
310310
QAction *actionSponsors() { return mActionSponsors; }
311311

312+
QAction *actionShowFrozenLabels() { return mActionShowFrozenLabels; }
313+
312314
//! Menus
313315
QMenu *fileMenu() { return mFileMenu; }
314316
QMenu *editMenu() { return mEditMenu; }
@@ -852,6 +854,10 @@ class QgisApp : public QMainWindow, private Ui::MainWindow
852854

853855
bool loadAnnotationItemsFromProject( const QDomDocument& doc );
854856

857+
//! Toggles whether to show frozen labels
858+
void showFrozenLabels( bool show );
859+
//! Activates freeze labels tool
860+
void freezeLabels();
855861
//! Activates the move label tool
856862
void moveLabel();
857863
//! Activates rotate label tool
@@ -1056,6 +1062,7 @@ class QgisApp : public QMainWindow, private Ui::MainWindow
10561062
QgsMapTool* mAnnotation;
10571063
QgsMapTool* mFormAnnotation;
10581064
QgsMapTool* mTextAnnotation;
1065+
QgsMapTool* mFreezeLabels;
10591066
QgsMapTool* mMoveLabel;
10601067
QgsMapTool* mRotateLabel;
10611068
QgsMapTool* mChangeLabelProperties;

0 commit comments

Comments
 (0)