Skip to content

Commit b44a256

Browse files
committed
QgsLegendSettings: new class to keep settings for QgsLegendRenderer
1 parent c0ac0ac commit b44a256

7 files changed

+303
-266
lines changed

src/core/CMakeLists.txt

+3
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@ SET(QGIS_CORE_SRCS
9393
qgslabelsearchtree.cpp
9494
qgslegacyhelpers.cpp
9595
qgslegendrenderer.cpp
96+
qgslegendsettings.cpp
9697
qgslogger.cpp
9798
qgsmaplayer.cpp
9899
qgsmaplayerregistry.cpp
@@ -460,6 +461,8 @@ SET(QGIS_CORE_HDRS
460461
qgslabelattributes.h
461462
qgslabelsearchtree.h
462463
qgslegacyhelpers.h
464+
qgslegendrenderer.h
465+
qgslegendsettings.h
463466
qgslogger.h
464467
qgsmaplayer.h
465468
qgsmaplayerregistry.h

src/core/composer/qgscomposerlegend.cpp

+67-66
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@ QgsComposerLegend::QgsComposerLegend( QgsComposition* composition )
3131
: QgsComposerItem( composition )
3232
, mComposerMap( 0 )
3333
{
34-
mLegendRenderer = new QgsLegendRenderer( &mLegendModel );
3534

3635
adjustBoxSize();
3736

@@ -45,20 +44,18 @@ QgsComposerLegend::QgsComposerLegend(): QgsComposerItem( 0 ), mComposerMap( 0 )
4544

4645
QgsComposerLegend::~QgsComposerLegend()
4746
{
48-
delete mLegendRenderer;
4947
}
5048

5149
void QgsComposerLegend::paint( QPainter* painter, const QStyleOptionGraphicsItem* itemStyle, QWidget* pWidget )
5250
{
5351
Q_UNUSED( itemStyle );
5452
Q_UNUSED( pWidget );
5553

54+
5655
if ( mComposition )
57-
mLegendRenderer->setUseAdvancedEffects( mComposition->useAdvancedEffects() );
56+
mSettings.setUseAdvancedEffects( mComposition->useAdvancedEffects() );
5857
if ( mComposerMap )
59-
mLegendRenderer->setMmPerMapUnit( mComposerMap->mapUnitsToMM() );
60-
61-
mLegendRenderer->setLegendSize( rect().size() );
58+
mSettings.setMmPerMapUnit( mComposerMap->mapUnitsToMM() );
6259

6360
if ( !painter )
6461
return;
@@ -69,7 +66,9 @@ void QgsComposerLegend::paint( QPainter* painter, const QStyleOptionGraphicsItem
6966
painter->setRenderHint( QPainter::Antialiasing, true );
7067
painter->setPen( QPen( QColor( 0, 0, 0 ) ) );
7168

72-
mLegendRenderer->drawLegend( painter );
69+
QgsLegendRenderer legendRenderer( &mLegendModel, mSettings );
70+
legendRenderer.setLegendSize( rect().size() );
71+
legendRenderer.drawLegend( painter );
7372

7473
painter->restore();
7574

@@ -83,71 +82,73 @@ void QgsComposerLegend::paint( QPainter* painter, const QStyleOptionGraphicsItem
8382

8483
QSizeF QgsComposerLegend::paintAndDetermineSize( QPainter* painter )
8584
{
86-
QSizeF size = mLegendRenderer->minimumSize();
85+
QgsLegendRenderer legendRenderer( &mLegendModel, mSettings );
86+
QSizeF size = legendRenderer.minimumSize();
8787
if ( !painter )
88-
mLegendRenderer->drawLegend( painter );
88+
legendRenderer.drawLegend( painter );
8989
return size;
9090
}
9191

9292

9393
void QgsComposerLegend::adjustBoxSize()
9494
{
95-
QSizeF size = mLegendRenderer->minimumSize();
95+
QgsLegendRenderer legendRenderer( &mLegendModel, mSettings );
96+
QSizeF size = legendRenderer.minimumSize();
9697
QgsDebugMsg( QString( "width = %1 height = %2" ).arg( size.width() ).arg( size.height() ) );
9798
if ( size.isValid() )
9899
{
99100
setSceneRect( QRectF( pos().x(), pos().y(), size.width(), size.height() ) );
100101
}
101102
}
102103

103-
void QgsComposerLegend::setTitle( const QString& t ) { mLegendRenderer->setTitle( t ); }
104-
QString QgsComposerLegend::title() const { return mLegendRenderer->title(); }
104+
void QgsComposerLegend::setTitle( const QString& t ) { mSettings.setTitle( t ); }
105+
QString QgsComposerLegend::title() const { return mSettings.title(); }
105106

106-
Qt::AlignmentFlag QgsComposerLegend::titleAlignment() const { return mLegendRenderer->titleAlignment(); }
107-
void QgsComposerLegend::setTitleAlignment( Qt::AlignmentFlag alignment ) { mLegendRenderer->setTitleAlignment( alignment ); }
107+
Qt::AlignmentFlag QgsComposerLegend::titleAlignment() const { return mSettings.titleAlignment(); }
108+
void QgsComposerLegend::setTitleAlignment( Qt::AlignmentFlag alignment ) { mSettings.setTitleAlignment( alignment ); }
108109

109-
QgsComposerLegendStyle& QgsComposerLegend::rstyle( QgsComposerLegendStyle::Style s ) { return mLegendRenderer->rstyle( s ); }
110-
QgsComposerLegendStyle QgsComposerLegend::style( QgsComposerLegendStyle::Style s ) const { return mLegendRenderer->style( s ); }
111-
void QgsComposerLegend::setStyle( QgsComposerLegendStyle::Style s, const QgsComposerLegendStyle style ) { mLegendRenderer->setStyle( s, style ); }
110+
QgsComposerLegendStyle& QgsComposerLegend::rstyle( QgsComposerLegendStyle::Style s ) { return mSettings.rstyle( s ); }
111+
QgsComposerLegendStyle QgsComposerLegend::style( QgsComposerLegendStyle::Style s ) const { return mSettings.style( s ); }
112+
void QgsComposerLegend::setStyle( QgsComposerLegendStyle::Style s, const QgsComposerLegendStyle style ) { mSettings.setStyle( s, style ); }
112113

113-
QFont QgsComposerLegend::styleFont( QgsComposerLegendStyle::Style s ) const { return mLegendRenderer->style( s ).font(); }
114+
QFont QgsComposerLegend::styleFont( QgsComposerLegendStyle::Style s ) const { return mSettings.style( s ).font(); }
114115
void QgsComposerLegend::setStyleFont( QgsComposerLegendStyle::Style s, const QFont& f ) { rstyle( s ).setFont( f ); }
115116

116117
void QgsComposerLegend::setStyleMargin( QgsComposerLegendStyle::Style s, double margin ) { rstyle( s ).setMargin( margin ); }
117118
void QgsComposerLegend::setStyleMargin( QgsComposerLegendStyle::Style s, QgsComposerLegendStyle::Side side, double margin ) { rstyle( s ).setMargin( side, margin ); }
118119

119-
double QgsComposerLegend::boxSpace() const { return mLegendRenderer->boxSpace(); }
120-
void QgsComposerLegend::setBoxSpace( double s ) { mLegendRenderer->setBoxSpace( s ); }
120+
double QgsComposerLegend::boxSpace() const { return mSettings.boxSpace(); }
121+
void QgsComposerLegend::setBoxSpace( double s ) { mSettings.setBoxSpace( s ); }
121122

122-
double QgsComposerLegend::columnSpace() const { return mLegendRenderer->columnSpace(); }
123-
void QgsComposerLegend::setColumnSpace( double s ) { mLegendRenderer->setColumnSpace( s ); }
123+
double QgsComposerLegend::columnSpace() const { return mSettings.columnSpace(); }
124+
void QgsComposerLegend::setColumnSpace( double s ) { mSettings.setColumnSpace( s ); }
124125

125-
QColor QgsComposerLegend::fontColor() const { return mLegendRenderer->fontColor(); }
126-
void QgsComposerLegend::setFontColor( const QColor& c ) { mLegendRenderer->setFontColor( c ); }
126+
QColor QgsComposerLegend::fontColor() const { return mSettings.fontColor(); }
127+
void QgsComposerLegend::setFontColor( const QColor& c ) { mSettings.setFontColor( c ); }
127128

128-
double QgsComposerLegend::symbolWidth() const { return mLegendRenderer->symbolSize().width(); }
129-
void QgsComposerLegend::setSymbolWidth( double w ) { mLegendRenderer->setSymbolSize( QSizeF( w, mLegendRenderer->symbolSize().height() ) ); }
129+
double QgsComposerLegend::symbolWidth() const { return mSettings.symbolSize().width(); }
130+
void QgsComposerLegend::setSymbolWidth( double w ) { mSettings.setSymbolSize( QSizeF( w, mSettings.symbolSize().height() ) ); }
130131

131-
double QgsComposerLegend::symbolHeight() const { return mLegendRenderer->symbolSize().height(); }
132-
void QgsComposerLegend::setSymbolHeight( double h ) { mLegendRenderer->setSymbolSize( QSizeF( mLegendRenderer->symbolSize().width(), h ) ); }
132+
double QgsComposerLegend::symbolHeight() const { return mSettings.symbolSize().height(); }
133+
void QgsComposerLegend::setSymbolHeight( double h ) { mSettings.setSymbolSize( QSizeF( mSettings.symbolSize().width(), h ) ); }
133134

134-
double QgsComposerLegend::wmsLegendWidth() const { return mLegendRenderer->wmsLegendSize().width(); }
135-
void QgsComposerLegend::setWmsLegendWidth( double w ) { mLegendRenderer->setWmsLegendSize( QSizeF( w, mLegendRenderer->wmsLegendSize().height() ) ); }
135+
double QgsComposerLegend::wmsLegendWidth() const { return mSettings.wmsLegendSize().width(); }
136+
void QgsComposerLegend::setWmsLegendWidth( double w ) { mSettings.setWmsLegendSize( QSizeF( w, mSettings.wmsLegendSize().height() ) ); }
136137

137-
double QgsComposerLegend::wmsLegendHeight() const {return mLegendRenderer->wmsLegendSize().height(); }
138-
void QgsComposerLegend::setWmsLegendHeight( double h ) { mLegendRenderer->setWmsLegendSize( QSizeF( mLegendRenderer->wmsLegendSize().width(), h ) ); }
138+
double QgsComposerLegend::wmsLegendHeight() const {return mSettings.wmsLegendSize().height(); }
139+
void QgsComposerLegend::setWmsLegendHeight( double h ) { mSettings.setWmsLegendSize( QSizeF( mSettings.wmsLegendSize().width(), h ) ); }
139140

140-
void QgsComposerLegend::setWrapChar( const QString& t ) { mLegendRenderer->setWrapChar( t ); }
141-
QString QgsComposerLegend::wrapChar() const {return mLegendRenderer->wrapChar(); }
141+
void QgsComposerLegend::setWrapChar( const QString& t ) { mSettings.setWrapChar( t ); }
142+
QString QgsComposerLegend::wrapChar() const {return mSettings.wrapChar(); }
142143

143-
int QgsComposerLegend::columnCount() const { return mLegendRenderer->columnCount(); }
144-
void QgsComposerLegend::setColumnCount( int c ) { mLegendRenderer->setColumnCount( c ); }
144+
int QgsComposerLegend::columnCount() const { return mSettings.columnCount(); }
145+
void QgsComposerLegend::setColumnCount( int c ) { mSettings.setColumnCount( c ); }
145146

146-
int QgsComposerLegend::splitLayer() const { return mLegendRenderer->splitLayer(); }
147-
void QgsComposerLegend::setSplitLayer( bool s ) { mLegendRenderer->setSplitLayer( s ); }
147+
int QgsComposerLegend::splitLayer() const { return mSettings.splitLayer(); }
148+
void QgsComposerLegend::setSplitLayer( bool s ) { mSettings.setSplitLayer( s ); }
148149

149-
int QgsComposerLegend::equalColumnWidth() const { return mLegendRenderer->equalColumnWidth(); }
150-
void QgsComposerLegend::setEqualColumnWidth( bool s ) { mLegendRenderer->setEqualColumnWidth( s ); }
150+
int QgsComposerLegend::equalColumnWidth() const { return mSettings.equalColumnWidth(); }
151+
void QgsComposerLegend::setEqualColumnWidth( bool s ) { mSettings.setEqualColumnWidth( s ); }
151152

152153

153154
void QgsComposerLegend::synchronizeWithModel()
@@ -176,21 +177,21 @@ bool QgsComposerLegend::writeXML( QDomElement& elem, QDomDocument & doc ) const
176177
elem.appendChild( composerLegendElem );
177178

178179
//write general properties
179-
composerLegendElem.setAttribute( "title", mLegendRenderer->title() );
180-
composerLegendElem.setAttribute( "titleAlignment", QString::number(( int ) mLegendRenderer->titleAlignment() ) );
181-
composerLegendElem.setAttribute( "columnCount", QString::number( mLegendRenderer->columnCount() ) );
182-
composerLegendElem.setAttribute( "splitLayer", QString::number( mLegendRenderer->splitLayer() ) );
183-
composerLegendElem.setAttribute( "equalColumnWidth", QString::number( mLegendRenderer->equalColumnWidth() ) );
184-
185-
composerLegendElem.setAttribute( "boxSpace", QString::number( mLegendRenderer->boxSpace() ) );
186-
composerLegendElem.setAttribute( "columnSpace", QString::number( mLegendRenderer->columnSpace() ) );
187-
188-
composerLegendElem.setAttribute( "symbolWidth", QString::number( mLegendRenderer->symbolSize().width() ) );
189-
composerLegendElem.setAttribute( "symbolHeight", QString::number( mLegendRenderer->symbolSize().height() ) );
190-
composerLegendElem.setAttribute( "wmsLegendWidth", QString::number( mLegendRenderer->wmsLegendSize().width() ) );
191-
composerLegendElem.setAttribute( "wmsLegendHeight", QString::number( mLegendRenderer->wmsLegendSize().height() ) );
192-
composerLegendElem.setAttribute( "wrapChar", mLegendRenderer->wrapChar() );
193-
composerLegendElem.setAttribute( "fontColor", mLegendRenderer->fontColor().name() );
180+
composerLegendElem.setAttribute( "title", mSettings.title() );
181+
composerLegendElem.setAttribute( "titleAlignment", QString::number(( int ) mSettings.titleAlignment() ) );
182+
composerLegendElem.setAttribute( "columnCount", QString::number( mSettings.columnCount() ) );
183+
composerLegendElem.setAttribute( "splitLayer", QString::number( mSettings.splitLayer() ) );
184+
composerLegendElem.setAttribute( "equalColumnWidth", QString::number( mSettings.equalColumnWidth() ) );
185+
186+
composerLegendElem.setAttribute( "boxSpace", QString::number( mSettings.boxSpace() ) );
187+
composerLegendElem.setAttribute( "columnSpace", QString::number( mSettings.columnSpace() ) );
188+
189+
composerLegendElem.setAttribute( "symbolWidth", QString::number( mSettings.symbolSize().width() ) );
190+
composerLegendElem.setAttribute( "symbolHeight", QString::number( mSettings.symbolSize().height() ) );
191+
composerLegendElem.setAttribute( "wmsLegendWidth", QString::number( mSettings.wmsLegendSize().width() ) );
192+
composerLegendElem.setAttribute( "wmsLegendHeight", QString::number( mSettings.wmsLegendSize().height() ) );
193+
composerLegendElem.setAttribute( "wrapChar", mSettings.wrapChar() );
194+
composerLegendElem.setAttribute( "fontColor", mSettings.fontColor().name() );
194195

195196
if ( mComposerMap )
196197
{
@@ -220,16 +221,16 @@ bool QgsComposerLegend::readXML( const QDomElement& itemElem, const QDomDocument
220221
}
221222

222223
//read general properties
223-
mLegendRenderer->setTitle( itemElem.attribute( "title" ) );
224+
mSettings.setTitle( itemElem.attribute( "title" ) );
224225
if ( !itemElem.attribute( "titleAlignment" ).isEmpty() )
225226
{
226-
mLegendRenderer->setTitleAlignment(( Qt::AlignmentFlag )itemElem.attribute( "titleAlignment" ).toInt() );
227+
mSettings.setTitleAlignment(( Qt::AlignmentFlag )itemElem.attribute( "titleAlignment" ).toInt() );
227228
}
228229
int colCount = itemElem.attribute( "columnCount", "1" ).toInt();
229230
if ( colCount < 1 ) colCount = 1;
230-
mLegendRenderer->setColumnCount( colCount );
231-
mLegendRenderer->setSplitLayer( itemElem.attribute( "splitLayer", "0" ).toInt() == 1 );
232-
mLegendRenderer->setEqualColumnWidth( itemElem.attribute( "equalColumnWidth", "0" ).toInt() == 1 );
231+
mSettings.setColumnCount( colCount );
232+
mSettings.setSplitLayer( itemElem.attribute( "splitLayer", "0" ).toInt() == 1 );
233+
mSettings.setEqualColumnWidth( itemElem.attribute( "equalColumnWidth", "0" ).toInt() == 1 );
233234

234235
QDomNodeList stylesNodeList = itemElem.elementsByTagName( "styles" );
235236
if ( stylesNodeList.size() > 0 )
@@ -255,16 +256,16 @@ bool QgsComposerLegend::readXML( const QDomElement& itemElem, const QDomDocument
255256
//font color
256257
QColor fontClr;
257258
fontClr.setNamedColor( itemElem.attribute( "fontColor", "#000000" ) );
258-
mLegendRenderer->setFontColor( fontClr );
259+
mSettings.setFontColor( fontClr );
259260

260261
//spaces
261-
mLegendRenderer->setBoxSpace( itemElem.attribute( "boxSpace", "2.0" ).toDouble() );
262-
mLegendRenderer->setColumnSpace( itemElem.attribute( "columnSpace", "2.0" ).toDouble() );
262+
mSettings.setBoxSpace( itemElem.attribute( "boxSpace", "2.0" ).toDouble() );
263+
mSettings.setColumnSpace( itemElem.attribute( "columnSpace", "2.0" ).toDouble() );
263264

264-
mLegendRenderer->setSymbolSize( QSizeF( itemElem.attribute( "symbolWidth", "7.0" ).toDouble(), itemElem.attribute( "symbolHeight", "14.0" ).toDouble() ) );
265-
mLegendRenderer->setWmsLegendSize( QSizeF( itemElem.attribute( "wmsLegendWidth", "50" ).toDouble(), itemElem.attribute( "wmsLegendHeight", "25" ).toDouble() ) );
265+
mSettings.setSymbolSize( QSizeF( itemElem.attribute( "symbolWidth", "7.0" ).toDouble(), itemElem.attribute( "symbolHeight", "14.0" ).toDouble() ) );
266+
mSettings.setWmsLegendSize( QSizeF( itemElem.attribute( "wmsLegendWidth", "50" ).toDouble(), itemElem.attribute( "wmsLegendHeight", "25" ).toDouble() ) );
266267

267-
mLegendRenderer->setWrapChar( itemElem.attribute( "wrapChar" ) );
268+
mSettings.setWrapChar( itemElem.attribute( "wrapChar" ) );
268269

269270
//composer map
270271
if ( !itemElem.attribute( "map" ).isEmpty() )

src/core/composer/qgscomposerlegend.h

+2-1
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
#include "qgscomposeritem.h"
2323
#include "qgscomposerlegenditem.h"
2424
#include "qgslegendmodel.h"
25+
#include "qgslegendsettings.h"
2526

2627
class QgsSymbolV2;
2728
class QgsComposerGroupItem;
@@ -149,7 +150,7 @@ class CORE_EXPORT QgsComposerLegend : public QgsComposerItem
149150

150151
QgsLegendModel mLegendModel;
151152

152-
QgsLegendRenderer* mLegendRenderer;
153+
QgsLegendSettings mSettings;
153154

154155
const QgsComposerMap* mComposerMap;
155156
};

0 commit comments

Comments
 (0)