Skip to content

Commit 8d5d60b

Browse files
committed
Merge branch 'master' of github.com:qgis/Quantum-GIS
2 parents d4a26cb + 23ba58d commit 8d5d60b

File tree

4 files changed

+65
-13
lines changed

4 files changed

+65
-13
lines changed

doc/CONTRIBUTORS

+3-2
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,10 @@ Giuseppe Sucameli
2929
Horst Duester
3030
Hyao (IRC nickname)
3131
Ivan Lucena
32-
Jean-Denis Giguere
32+
Jean-Denis Giguere
3333
Jeremy Palmer
3434
Jerrit Collord
35+
Larry Shaffer
3536
Luiz Motta
3637
Magnus Homann
3738
Marco Pasetti
@@ -53,5 +54,5 @@ Tamas Szekeres
5354
Tom Russo
5455
Tyler Mitchell
5556
Vita Cizek
56-
Yann Chemin
57+
Yann Chemin
5758
Includes Map icons CC-0 from SJJB Management

src/app/qgsmaptoolfreezelabels.cpp

+56-4
Original file line numberDiff line numberDiff line change
@@ -258,6 +258,7 @@ void QgsMapToolFreezeLabels::freezeThawLabels( const QgsRectangle& ext, QMouseEv
258258

259259
bool doThaw = e->modifiers() & Qt::ShiftModifier ? true : false;
260260
bool toggleThawOrFreeze = e->modifiers() & Qt::AltModifier ? true : false;
261+
bool doHide = e->modifiers() & Qt::ControlModifier ? true : false;
261262

262263
// get list of all drawn labels from all layers within, or touching, chosen extent
263264
bool labelChanged = false;
@@ -314,9 +315,8 @@ void QgsMapToolFreezeLabels::freezeThawLabels( const QgsRectangle& ext, QMouseEv
314315
QString labelStringID = QString("%0|%1").arg(mCurrentLabelPos.layerID, QString::number( mCurrentLabelPos.featureId ) );
315316

316317
// thaw label
317-
if ( mCurrentLabelPos.isFrozen && ( doThaw || toggleThawOrFreeze ) )
318+
if ( mCurrentLabelPos.isFrozen && !doHide && ( doThaw || toggleThawOrFreeze ) )
318319
{
319-
320320
// thaw previously frozen label (set attribute table fields to NULL)
321321
if ( freezeThawLabel( vlayer, mCurrentLabelPos, false ) )
322322
{
@@ -329,9 +329,8 @@ void QgsMapToolFreezeLabels::freezeThawLabels( const QgsRectangle& ext, QMouseEv
329329
}
330330

331331
// freeze label
332-
if ( !mCurrentLabelPos.isFrozen && ( !doThaw || toggleThawOrFreeze ) )
332+
if ( !mCurrentLabelPos.isFrozen && !doHide && ( !doThaw || toggleThawOrFreeze ) )
333333
{
334-
335334
// freeze label's location, and optionally rotation, to attribute table
336335
if ( freezeThawLabel( vlayer, mCurrentLabelPos, true ) )
337336
{
@@ -342,6 +341,20 @@ void QgsMapToolFreezeLabels::freezeThawLabels( const QgsRectangle& ext, QMouseEv
342341
QgsDebugMsg( QString( "Freeze failed for layer, label: %0, %1" ).arg( labellyr, labeltxt ) );
343342
}
344343
}
344+
345+
// hide label
346+
if ( doHide )
347+
{
348+
// write 0 font size to attribute table
349+
if ( hideLabel( vlayer, mCurrentLabelPos ) )
350+
{
351+
labelChanged = true;
352+
}
353+
else
354+
{
355+
QgsDebugMsg( QString( "Hide failed for layer, label: %0, %1" ).arg( labellyr, labeltxt ) );
356+
}
357+
}
345358
}
346359

347360
if ( labelChanged )
@@ -479,3 +492,42 @@ bool QgsMapToolFreezeLabels::freezeThawLabel( QgsVectorLayer* vlayer,
479492
}
480493
return true;
481494
}
495+
496+
bool QgsMapToolFreezeLabels::hideLabel( QgsVectorLayer* vlayer,
497+
const QgsLabelPosition& labelpos )
498+
{
499+
// skip diagrams
500+
if ( labelpos.isDiagram )
501+
{
502+
QgsDebugMsg( QString( "Label is diagram, skipping" ) );
503+
return false;
504+
}
505+
// verify attribute table has proper fields setup
506+
bool sizeColOk;
507+
int sizeCol;
508+
509+
QVariant sizeColumn = vlayer->customProperty( "labeling/dataDefinedProperty0" );
510+
if ( !sizeColumn.isValid() )
511+
{
512+
QgsDebugMsg( QString( "Size column not set" ) );
513+
return false;
514+
}
515+
sizeCol = sizeColumn.toInt( &sizeColOk );
516+
if ( !sizeColOk )
517+
{
518+
QgsDebugMsg( QString( "Size column not convertible to integer" ) );
519+
return false;
520+
}
521+
522+
// edit attribute table
523+
int fid = labelpos.featureId;
524+
525+
vlayer->beginEditCommand( tr( "Label hidden" ) );
526+
if ( !vlayer->changeAttributeValue( fid, sizeCol, 0, false ) )
527+
{
528+
QgsDebugMsg( QString( "Failed write to attribute table" ) );
529+
return false;
530+
}
531+
vlayer->endEditCommand();
532+
return true;
533+
}

src/app/qgsmaptoolfreezelabels.h

+3
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,9 @@ class QgsMapToolFreezeLabels: public QgsMapToolLabel
9595
bool freezeThawLabel( QgsVectorLayer* vlayer,
9696
const QgsLabelPosition& labelpos,
9797
bool freeze );
98+
99+
//! Hide chosen label by setting font size to 0
100+
bool hideLabel( QgsVectorLayer* vlayer, const QgsLabelPosition& labelpos );
98101
};
99102

100103
#endif // QGSMAPTOOLFREEZELABELS_H

src/ui/qgisapp.ui

+3-7
Original file line numberDiff line numberDiff line change
@@ -1716,13 +1716,9 @@
17161716
<property name="text">
17171717
<string>Freeze or Thaw Labels</string>
17181718
</property>
1719-
<property name="whatsThis">
1720-
<string>Freeze (write label location and optionally rotation) to attribute table.
1721-
1722-
Click on individual labels, or draw a marquee (labels touching will be included). Actions on in-memory attribute table fields are immediate.
1723-
1724-
Hold Shift key down to Thaw (write NULLs to attribute table), reverting label to dynamic.
1725-
Hold Alt key down to toggle selected labels between Frozen and Thawed states.</string>
1719+
<property name="toolTip">
1720+
<string>Freeze or Thaw Labels
1721+
Shift thaws, Alt toggles, Ctl (Cmd) hides</string>
17261722
</property>
17271723
</action>
17281724
<action name="mActionShowFrozenLabels">

0 commit comments

Comments
 (0)