/
qgssinglesymbolrendererv2widget.cpp
115 lines (92 loc) · 3.58 KB
/
qgssinglesymbolrendererv2widget.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
/***************************************************************************
qgssinglesymbolrendererv2widget.cpp
---------------------
begin : November 2009
copyright : (C) 2009 by Martin Dobias
email : wonder dot sk at gmail dot com
***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************/
#include "qgssinglesymbolrendererv2widget.h"
#include "qgssinglesymbolrendererv2.h"
#include "qgssymbolv2.h"
#include "qgslogger.h"
#include "qgsvectorlayer.h"
#include "qgssymbolv2selectordialog.h"
#include <QMenu>
QgsRendererV2Widget* QgsSingleSymbolRendererV2Widget::create( QgsVectorLayer* layer, QgsStyleV2* style, QgsFeatureRendererV2* renderer )
{
return new QgsSingleSymbolRendererV2Widget( layer, style, renderer );
}
QgsSingleSymbolRendererV2Widget::QgsSingleSymbolRendererV2Widget( QgsVectorLayer* layer, QgsStyleV2* style, QgsFeatureRendererV2* renderer )
: QgsRendererV2Widget( layer, style )
, mRenderer( nullptr )
{
// try to recognize the previous renderer
// (null renderer means "no previous renderer")
if ( renderer )
{
mRenderer = QgsSingleSymbolRendererV2::convertFromRenderer( renderer );
}
if ( !mRenderer )
{
QgsSymbolV2* symbol = QgsSymbolV2::defaultSymbol( mLayer->geometryType() );
mRenderer = new QgsSingleSymbolRendererV2( symbol );
}
// load symbol from it
mSingleSymbol = mRenderer->symbol()->clone();
// setup ui
mSelector = new QgsSymbolV2SelectorDialog( mSingleSymbol, mStyle, mLayer, nullptr, true );
connect( mSelector, SIGNAL( symbolModified() ), this, SLOT( changeSingleSymbol() ) );
QVBoxLayout* layout = new QVBoxLayout( this );
layout->setContentsMargins( 0, 0, 0, 0 );
layout->addWidget( mSelector );
// advanced actions - data defined rendering
QMenu* advMenu = mSelector->advancedMenu();
advMenu->addAction( tr( "Symbol levels..." ), this, SLOT( showSymbolLevels() ) );
}
QgsSingleSymbolRendererV2Widget::~QgsSingleSymbolRendererV2Widget()
{
delete mSingleSymbol;
delete mRenderer;
delete mSelector;
}
QgsFeatureRendererV2* QgsSingleSymbolRendererV2Widget::renderer()
{
return mRenderer;
}
void QgsSingleSymbolRendererV2Widget::setMapCanvas( QgsMapCanvas* canvas )
{
QgsRendererV2Widget::setMapCanvas( canvas );
if ( mSelector )
mSelector->setMapCanvas( canvas );
}
void QgsSingleSymbolRendererV2Widget::changeSingleSymbol()
{
// update symbol from the GUI
mRenderer->setSymbol( mSingleSymbol->clone() );
emit widgetChanged();
}
void QgsSingleSymbolRendererV2Widget::sizeScaleFieldChanged( const QString& fldName )
{
mRenderer->setSizeScaleField( fldName );
}
void QgsSingleSymbolRendererV2Widget::scaleMethodChanged( QgsSymbolV2::ScaleMethod scaleMethod )
{
mRenderer->setScaleMethod( scaleMethod );
// Set also on the symbol clone
QgsMarkerSymbolV2 *markerSymbol = dynamic_cast<QgsMarkerSymbolV2 *>( mSingleSymbol );
if ( markerSymbol )
{
markerSymbol->setScaleMethod( scaleMethod );
}
}
void QgsSingleSymbolRendererV2Widget::showSymbolLevels()
{
showSymbolLevelsDialog( mRenderer );
}