Skip to content

Commit b44a256

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

File tree

7 files changed

+303
-266
lines changed

7 files changed

+303
-266
lines changed
 

‎src/core/CMakeLists.txt

Lines changed: 3 additions & 0 deletions
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

Lines changed: 67 additions & 66 deletions
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

Lines changed: 2 additions & 1 deletion
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
};

‎src/core/qgslegendrenderer.cpp

Lines changed: 77 additions & 100 deletions
Large diffs are not rendered by default.

‎src/core/qgslegendrenderer.h

Lines changed: 4 additions & 99 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
11
#ifndef QGSLEGENDRENDERER_H
22
#define QGSLEGENDRENDERER_H
33

4-
#include <QColor>
54
#include <QPointF>
6-
#include <QSizeF>
75

86
class QRectF;
97
class QStandardItem;
@@ -14,7 +12,7 @@ class QgsComposerGroupItem;
1412
class QgsComposerLayerItem;
1513
class QgsSymbolV2;
1614

17-
#include "qgscomposerlegendstyle.h"
15+
#include "qgslegendsettings.h"
1816

1917
/**
2018
* @brief The QgsLegendRenderer class handles automatic layout and rendering of legend.
@@ -29,7 +27,7 @@ class QgsLegendRenderer
2927
{
3028
public:
3129
/** Construct legend renderer. The ownership of legend model does not change */
32-
explicit QgsLegendRenderer( QgsLegendModel* legendModel );
30+
QgsLegendRenderer( QgsLegendModel* legendModel, const QgsLegendSettings& settings );
3331

3432
/** Run the layout algorithm and determine the size required for legend */
3533
QSizeF minimumSize();
@@ -45,61 +43,6 @@ class QgsLegendRenderer
4543
*/
4644
void drawLegend( QPainter* painter );
4745

48-
// setters and getters
49-
50-
void setTitle( const QString& t ) {mTitle = t;}
51-
QString title() const {return mTitle;}
52-
53-
/** Returns the alignment of the legend title
54-
* @returns Qt::AlignmentFlag for the legend title
55-
* @see setTitleAlignment
56-
*/
57-
Qt::AlignmentFlag titleAlignment() const { return mTitleAlignment; }
58-
/** Sets the alignment of the legend title
59-
* @param alignment Text alignment for drawing the legend title
60-
* @see titleAlignment
61-
*/
62-
void setTitleAlignment( Qt::AlignmentFlag alignment ) { mTitleAlignment = alignment; }
63-
64-
/** Returns reference to modifiable style */
65-
QgsComposerLegendStyle & rstyle( QgsComposerLegendStyle::Style s ) { return mStyleMap[s]; }
66-
/** Returns style */
67-
QgsComposerLegendStyle style( QgsComposerLegendStyle::Style s ) const { return mStyleMap.value( s ); }
68-
void setStyle( QgsComposerLegendStyle::Style s, const QgsComposerLegendStyle style ) { mStyleMap[s] = style; }
69-
70-
double boxSpace() const {return mBoxSpace;}
71-
void setBoxSpace( double s ) {mBoxSpace = s;}
72-
73-
void setWrapChar( const QString& t ) {mWrapChar = t;}
74-
QString wrapChar() const {return mWrapChar;}
75-
76-
double columnSpace() const {return mColumnSpace;}
77-
void setColumnSpace( double s ) { mColumnSpace = s;}
78-
79-
int columnCount() const { return mColumnCount; }
80-
void setColumnCount( int c ) { mColumnCount = c;}
81-
82-
int splitLayer() const { return mSplitLayer; }
83-
void setSplitLayer( bool s ) { mSplitLayer = s;}
84-
85-
int equalColumnWidth() const { return mEqualColumnWidth; }
86-
void setEqualColumnWidth( bool s ) { mEqualColumnWidth = s;}
87-
88-
QColor fontColor() const {return mFontColor;}
89-
void setFontColor( const QColor& c ) {mFontColor = c;}
90-
91-
QSizeF symbolSize() const {return mSymbolSize;}
92-
void setSymbolSize( QSizeF s ) {mSymbolSize = s;}
93-
94-
QSizeF wmsLegendSize() const {return mWmsLegendSize;}
95-
void setWmsLegendSize( QSizeF s ) {mWmsLegendSize = s;}
96-
97-
double mmPerMapUnit() const { return mMmPerMapUnit; }
98-
void setMmPerMapUnit( double mmPerMapUnit ) { mMmPerMapUnit = mmPerMapUnit; }
99-
100-
bool useAdvancedEffects() const { return mUseAdvancedEffects; }
101-
void setUseAdvancedEffects( bool use ) { mUseAdvancedEffects = use; }
102-
10346
private:
10447
/** Nucleon is either group title, layer title or layer child item.
10548
* Nucleon is similar to QgsComposerLegendItem but it does not have
@@ -215,48 +158,10 @@ class QgsLegendRenderer
215158
private:
216159
QgsLegendModel* mLegendModel;
217160

218-
QSizeF mLegendSize;
219-
220-
QString mTitle;
221-
222-
/** Title alignment, one of Qt::AlignLeft, Qt::AlignHCenter, Qt::AlignRight) */
223-
Qt::AlignmentFlag mTitleAlignment;
224-
225-
QString mWrapChar;
226-
227-
QColor mFontColor;
228-
229-
/** Space between item box and contents */
230-
qreal mBoxSpace;
231-
232-
/** Width and height of symbol icon */
233-
QSizeF mSymbolSize;
161+
QgsLegendSettings mSettings;
234162

235-
/** Width and height of WMS legendGraphic pixmap */
236-
QSizeF mWmsLegendSize;
237-
238-
/** Spacing between lines when wrapped */
239-
double mLineSpacing;
240-
241-
/** Space between columns */
242-
double mColumnSpace;
243-
244-
/** Number of legend columns */
245-
int mColumnCount;
246-
247-
/** Allow splitting layers into multiple columns */
248-
bool mSplitLayer;
249-
250-
/** Use the same width (maximum) for all columns */
251-
bool mEqualColumnWidth;
252-
253-
QMap<QgsComposerLegendStyle::Style, QgsComposerLegendStyle> mStyleMap;
254-
255-
/** Conversion ratio between millimeters and map units - for symbols with size given in map units */
256-
double mMmPerMapUnit;
163+
QSizeF mLegendSize;
257164

258-
/** Whether to use advanced effects like transparency for symbols - may require their rasterization */
259-
bool mUseAdvancedEffects;
260165
};
261166

262167
#endif // QGSLEGENDRENDERER_H

‎src/core/qgslegendsettings.cpp

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
#include "qgslegendsettings.h"
2+
3+
QgsLegendSettings::QgsLegendSettings()
4+
: mTitle( QObject::tr( "Legend" ) )
5+
, mTitleAlignment( Qt::AlignLeft )
6+
, mWrapChar( "" )
7+
, mFontColor( QColor( 0, 0, 0 ) )
8+
, mBoxSpace( 2 )
9+
, mSymbolSize( 7, 4 )
10+
, mWmsLegendSize( 50, 25 )
11+
, mLineSpacing( 1.5 )
12+
, mColumnSpace( 2 )
13+
, mColumnCount( 1 )
14+
, mSplitLayer( false )
15+
, mEqualColumnWidth( false )
16+
, mMmPerMapUnit( 1 )
17+
, mUseAdvancedEffects( true )
18+
{
19+
rstyle( QgsComposerLegendStyle::Title ).setMargin( QgsComposerLegendStyle::Bottom, 2 );
20+
rstyle( QgsComposerLegendStyle::Group ).setMargin( QgsComposerLegendStyle::Top, 2 );
21+
rstyle( QgsComposerLegendStyle::Subgroup ).setMargin( QgsComposerLegendStyle::Top, 2 );
22+
rstyle( QgsComposerLegendStyle::Symbol ).setMargin( QgsComposerLegendStyle::Top, 2 );
23+
rstyle( QgsComposerLegendStyle::SymbolLabel ).setMargin( QgsComposerLegendStyle::Top, 2 );
24+
rstyle( QgsComposerLegendStyle::SymbolLabel ).setMargin( QgsComposerLegendStyle::Left, 2 );
25+
rstyle( QgsComposerLegendStyle::Title ).rfont().setPointSizeF( 16.0 );
26+
rstyle( QgsComposerLegendStyle::Group ).rfont().setPointSizeF( 14.0 );
27+
rstyle( QgsComposerLegendStyle::Subgroup ).rfont().setPointSizeF( 12.0 );
28+
rstyle( QgsComposerLegendStyle::SymbolLabel ).rfont().setPointSizeF( 12.0 );
29+
}

‎src/core/qgslegendsettings.h

Lines changed: 121 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,121 @@
1+
#ifndef QGSLEGENDSETTINGS_H
2+
#define QGSLEGENDSETTINGS_H
3+
4+
#include <QColor>
5+
#include <QSizeF>
6+
7+
#include "qgscomposerlegendstyle.h"
8+
9+
/**
10+
* @brief The QgsLegendSettings class stores the appearance and layout settings
11+
* for legend drawing with QgsLegendRenderer. The content of the legend is given
12+
* in QgsLegendModel class.
13+
*
14+
* @note added in 2.6
15+
*/
16+
class QgsLegendSettings
17+
{
18+
public:
19+
QgsLegendSettings();
20+
21+
void setTitle( const QString& t ) { mTitle = t; }
22+
QString title() const { return mTitle; }
23+
24+
/** Returns the alignment of the legend title
25+
* @returns Qt::AlignmentFlag for the legend title
26+
* @see setTitleAlignment
27+
*/
28+
Qt::AlignmentFlag titleAlignment() const { return mTitleAlignment; }
29+
/** Sets the alignment of the legend title
30+
* @param alignment Text alignment for drawing the legend title
31+
* @see titleAlignment
32+
*/
33+
void setTitleAlignment( Qt::AlignmentFlag alignment ) { mTitleAlignment = alignment; }
34+
35+
/** Returns reference to modifiable style */
36+
QgsComposerLegendStyle & rstyle( QgsComposerLegendStyle::Style s ) { return mStyleMap[s]; }
37+
/** Returns style */
38+
QgsComposerLegendStyle style( QgsComposerLegendStyle::Style s ) const { return mStyleMap.value( s ); }
39+
void setStyle( QgsComposerLegendStyle::Style s, const QgsComposerLegendStyle style ) { mStyleMap[s] = style; }
40+
41+
double boxSpace() const {return mBoxSpace;}
42+
void setBoxSpace( double s ) {mBoxSpace = s;}
43+
44+
void setWrapChar( const QString& t ) {mWrapChar = t;}
45+
QString wrapChar() const {return mWrapChar;}
46+
47+
double columnSpace() const {return mColumnSpace;}
48+
void setColumnSpace( double s ) { mColumnSpace = s;}
49+
50+
int columnCount() const { return mColumnCount; }
51+
void setColumnCount( int c ) { mColumnCount = c;}
52+
53+
int splitLayer() const { return mSplitLayer; }
54+
void setSplitLayer( bool s ) { mSplitLayer = s;}
55+
56+
int equalColumnWidth() const { return mEqualColumnWidth; }
57+
void setEqualColumnWidth( bool s ) { mEqualColumnWidth = s;}
58+
59+
QColor fontColor() const {return mFontColor;}
60+
void setFontColor( const QColor& c ) {mFontColor = c;}
61+
62+
QSizeF symbolSize() const {return mSymbolSize;}
63+
void setSymbolSize( QSizeF s ) {mSymbolSize = s;}
64+
65+
QSizeF wmsLegendSize() const {return mWmsLegendSize;}
66+
void setWmsLegendSize( QSizeF s ) {mWmsLegendSize = s;}
67+
68+
double lineSpacing() const { return mLineSpacing; }
69+
void setLineSpacing( double s ) { mLineSpacing = s; }
70+
71+
double mmPerMapUnit() const { return mMmPerMapUnit; }
72+
void setMmPerMapUnit( double mmPerMapUnit ) { mMmPerMapUnit = mmPerMapUnit; }
73+
74+
bool useAdvancedEffects() const { return mUseAdvancedEffects; }
75+
void setUseAdvancedEffects( bool use ) { mUseAdvancedEffects = use; }
76+
77+
private:
78+
79+
QString mTitle;
80+
81+
/** Title alignment, one of Qt::AlignLeft, Qt::AlignHCenter, Qt::AlignRight) */
82+
Qt::AlignmentFlag mTitleAlignment;
83+
84+
QString mWrapChar;
85+
86+
QColor mFontColor;
87+
88+
/** Space between item box and contents */
89+
qreal mBoxSpace;
90+
91+
/** Width and height of symbol icon */
92+
QSizeF mSymbolSize;
93+
94+
/** Width and height of WMS legendGraphic pixmap */
95+
QSizeF mWmsLegendSize;
96+
97+
/** Spacing between lines when wrapped */
98+
double mLineSpacing;
99+
100+
/** Space between columns */
101+
double mColumnSpace;
102+
103+
/** Number of legend columns */
104+
int mColumnCount;
105+
106+
/** Allow splitting layers into multiple columns */
107+
bool mSplitLayer;
108+
109+
/** Use the same width (maximum) for all columns */
110+
bool mEqualColumnWidth;
111+
112+
QMap<QgsComposerLegendStyle::Style, QgsComposerLegendStyle> mStyleMap;
113+
114+
/** Conversion ratio between millimeters and map units - for symbols with size given in map units */
115+
double mMmPerMapUnit;
116+
117+
/** Whether to use advanced effects like transparency for symbols - may require their rasterization */
118+
bool mUseAdvancedEffects;
119+
};
120+
121+
#endif // QGSLEGENDSETTINGS_H

0 commit comments

Comments
 (0)
Please sign in to comment.