Skip to content

Commit d34fb39

Browse files
author
wonder
committedNov 4, 2009
categorized and graduated renderers remember their source symbol and color ramp
git-svn-id: http://svn.osgeo.org/qgis/branches/symbology-ng-branch@11918 c8812cc2-4d05-0410-92ff-de0c093fc19c

10 files changed

+290
-56
lines changed
 

‎src/core/symbology-ng/qgscategorizedsymbolrendererv2.cpp

Lines changed: 68 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
#include "qgssymbolv2.h"
55
#include "qgssymbollayerv2utils.h"
6+
#include "qgsvectorcolorrampv2.h"
67

78
#include "qgsfeature.h"
89
#include "qgslogger.h"
@@ -63,7 +64,11 @@ QString QgsRendererCategoryV2::dump()
6364
///////////////////
6465

6566
QgsCategorizedSymbolRendererV2::QgsCategorizedSymbolRendererV2(QString attrName, QgsCategoryList categories)
66-
: QgsFeatureRendererV2(RendererCategorizedSymbol), mAttrName(attrName), mCategories(categories)
67+
: QgsFeatureRendererV2(RendererCategorizedSymbol),
68+
mAttrName(attrName),
69+
mCategories(categories),
70+
mSourceSymbol(NULL),
71+
mSourceColorRamp(NULL)
6772
{
6873
for (int i = 0; i < mCategories.count(); ++i)
6974
{
@@ -80,6 +85,8 @@ QgsCategorizedSymbolRendererV2::QgsCategorizedSymbolRendererV2(QString attrName,
8085
QgsCategorizedSymbolRendererV2::~QgsCategorizedSymbolRendererV2()
8186
{
8287
mCategories.clear(); // this should also call destructors of symbols
88+
delete mSourceSymbol;
89+
delete mSourceColorRamp;
8390
}
8491

8592
void QgsCategorizedSymbolRendererV2::rebuildHash()
@@ -202,6 +209,10 @@ QString QgsCategorizedSymbolRendererV2::dump()
202209
QgsFeatureRendererV2* QgsCategorizedSymbolRendererV2::clone()
203210
{
204211
QgsCategorizedSymbolRendererV2* r = new QgsCategorizedSymbolRendererV2( mAttrName, mCategories );
212+
if (mSourceSymbol)
213+
r->setSourceSymbol(mSourceSymbol->clone());
214+
if (mSourceColorRamp)
215+
r->setSourceColorRamp(mSourceColorRamp->clone());
205216
r->setUsingSymbolLevels( usingSymbolLevels() );
206217
return r;
207218
}
@@ -251,6 +262,25 @@ QgsFeatureRendererV2* QgsCategorizedSymbolRendererV2::create(QDomElement& elemen
251262
// delete symbols if there are any more
252263
QgsSymbolLayerV2Utils::clearSymbolMap(symbolMap);
253264

265+
// try to load source symbol (optional)
266+
QDomElement sourceSymbolElem = element.firstChildElement("source-symbol");
267+
if (!sourceSymbolElem.isNull())
268+
{
269+
QgsSymbolV2Map sourceSymbolMap = QgsSymbolLayerV2Utils::loadSymbols(sourceSymbolElem);
270+
if (sourceSymbolMap.contains("0"))
271+
{
272+
r->setSourceSymbol( sourceSymbolMap.take("0") );
273+
}
274+
QgsSymbolLayerV2Utils::clearSymbolMap(sourceSymbolMap);
275+
}
276+
277+
// try to load color ramp (optional)
278+
QDomElement sourceColorRampElem = element.firstChildElement("colorramp");
279+
if (!sourceColorRampElem.isNull() && sourceColorRampElem.attribute("name") == "[source]")
280+
{
281+
r->setSourceColorRamp( QgsSymbolLayerV2Utils::loadColorRamp(sourceColorRampElem) );
282+
}
283+
254284
// TODO: symbol levels
255285
return r;
256286
}
@@ -283,8 +313,44 @@ QDomElement QgsCategorizedSymbolRendererV2::save(QDomDocument& doc)
283313
rendererElem.appendChild(catsElem);
284314

285315
// save symbols
286-
QDomElement symbolsElem = QgsSymbolLayerV2Utils::saveSymbols(symbols, doc);
316+
QDomElement symbolsElem = QgsSymbolLayerV2Utils::saveSymbols(symbols, "symbols", doc);
287317
rendererElem.appendChild(symbolsElem);
288318

319+
// save source symbol
320+
if (mSourceSymbol)
321+
{
322+
QgsSymbolV2Map sourceSymbols;
323+
sourceSymbols.insert("0", mSourceSymbol);
324+
QDomElement sourceSymbolElem = QgsSymbolLayerV2Utils::saveSymbols(sourceSymbols, "source-symbol", doc);
325+
rendererElem.appendChild(sourceSymbolElem);
326+
}
327+
328+
// save source color ramp
329+
if (mSourceColorRamp)
330+
{
331+
QDomElement colorRampElem = QgsSymbolLayerV2Utils::saveColorRamp("[source]", mSourceColorRamp, doc);
332+
rendererElem.appendChild(colorRampElem);
333+
}
334+
289335
return rendererElem;
290336
}
337+
338+
QgsSymbolV2* QgsCategorizedSymbolRendererV2::sourceSymbol()
339+
{
340+
return mSourceSymbol;
341+
}
342+
void QgsCategorizedSymbolRendererV2::setSourceSymbol(QgsSymbolV2* sym)
343+
{
344+
delete mSourceSymbol;
345+
mSourceSymbol = sym;
346+
}
347+
348+
QgsVectorColorRampV2* QgsCategorizedSymbolRendererV2::sourceColorRamp()
349+
{
350+
return mSourceColorRamp;
351+
}
352+
void QgsCategorizedSymbolRendererV2::setSourceColorRamp(QgsVectorColorRampV2* ramp)
353+
{
354+
delete mSourceColorRamp;
355+
mSourceColorRamp = ramp;
356+
}

‎src/core/symbology-ng/qgscategorizedsymbolrendererv2.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
#include <QHash>
77

8+
class QgsVectorColorRampV2;
89

910
class QgsRendererCategoryV2
1011
{
@@ -78,9 +79,17 @@ class QgsCategorizedSymbolRendererV2 : public QgsFeatureRendererV2
7879
//! store renderer info to XML element
7980
virtual QDomElement save(QDomDocument& doc);
8081

82+
QgsSymbolV2* sourceSymbol();
83+
void setSourceSymbol(QgsSymbolV2* sym);
84+
85+
QgsVectorColorRampV2* sourceColorRamp();
86+
void setSourceColorRamp(QgsVectorColorRampV2* ramp);
87+
8188
protected:
8289
QgsCategoryList mCategories;
8390
QString mAttrName;
91+
QgsSymbolV2* mSourceSymbol;
92+
QgsVectorColorRampV2* mSourceColorRamp;
8493

8594
//! attribute index (derived from attribute name in startRender)
8695
int mAttrNum;

‎src/core/symbology-ng/qgsgraduatedsymbolrendererv2.cpp

Lines changed: 98 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
#include "qgssymbolv2.h"
55
#include "qgssymbollayerv2utils.h"
6+
#include "qgsvectorcolorrampv2.h"
67

78
#include "qgsfeature.h"
89
#include "qgslogger.h"
@@ -68,14 +69,21 @@ QString QgsRendererRangeV2::dump()
6869

6970

7071
QgsGraduatedSymbolRendererV2::QgsGraduatedSymbolRendererV2(QString attrName, QgsRangeList ranges)
71-
: QgsFeatureRendererV2(RendererGraduatedSymbol), mAttrName(attrName), mRanges(ranges), mMode(Custom)
72+
: QgsFeatureRendererV2(RendererGraduatedSymbol),
73+
mAttrName(attrName),
74+
mRanges(ranges),
75+
mMode(Custom),
76+
mSourceSymbol(NULL),
77+
mSourceColorRamp(NULL)
7278
{
7379
// TODO: check ranges for sanity (NULL symbols, invalid ranges)
7480
}
7581

7682
QgsGraduatedSymbolRendererV2::~QgsGraduatedSymbolRendererV2()
7783
{
7884
mRanges.clear(); // should delete all the symbols
85+
delete mSourceSymbol;
86+
delete mSourceColorRamp;
7987
}
8088

8189
QgsSymbolV2* QgsGraduatedSymbolRendererV2::symbolForValue(double value)
@@ -155,6 +163,10 @@ QString QgsGraduatedSymbolRendererV2::dump()
155163
QgsFeatureRendererV2* QgsGraduatedSymbolRendererV2::clone()
156164
{
157165
QgsGraduatedSymbolRendererV2* r = new QgsGraduatedSymbolRendererV2( mAttrName, mRanges );
166+
if (mSourceSymbol)
167+
r->setSourceSymbol(mSourceSymbol->clone());
168+
if (mSourceColorRamp)
169+
r->setSourceColorRamp(mSourceColorRamp->clone());
158170
r->setUsingSymbolLevels( usingSymbolLevels() );
159171
return r;
160172
}
@@ -275,7 +287,11 @@ QgsGraduatedSymbolRendererV2* QgsGraduatedSymbolRendererV2::createRenderer(
275287
ranges.append( QgsRendererRangeV2(lower, upper, newSymbol, label) );
276288
}
277289

278-
return new QgsGraduatedSymbolRendererV2( attrName, ranges );
290+
QgsGraduatedSymbolRendererV2* r = new QgsGraduatedSymbolRendererV2( attrName, ranges );
291+
r->setSourceSymbol( symbol->clone() );
292+
r->setSourceColorRamp( ramp->clone() );
293+
r->setMode(mode);
294+
return r;
279295
}
280296

281297

@@ -318,6 +334,36 @@ QgsFeatureRendererV2* QgsGraduatedSymbolRendererV2::create(QDomElement& element)
318334
// delete symbols if there are any more
319335
QgsSymbolLayerV2Utils::clearSymbolMap(symbolMap);
320336

337+
// try to load source symbol (optional)
338+
QDomElement sourceSymbolElem = element.firstChildElement("source-symbol");
339+
if (!sourceSymbolElem.isNull())
340+
{
341+
QgsSymbolV2Map sourceSymbolMap = QgsSymbolLayerV2Utils::loadSymbols(sourceSymbolElem);
342+
if (sourceSymbolMap.contains("0"))
343+
{
344+
r->setSourceSymbol( sourceSymbolMap.take("0") );
345+
}
346+
QgsSymbolLayerV2Utils::clearSymbolMap(sourceSymbolMap);
347+
}
348+
349+
// try to load color ramp (optional)
350+
QDomElement sourceColorRampElem = element.firstChildElement("colorramp");
351+
if (!sourceColorRampElem.isNull() && sourceColorRampElem.attribute("name") == "[source]")
352+
{
353+
r->setSourceColorRamp( QgsSymbolLayerV2Utils::loadColorRamp(sourceColorRampElem) );
354+
}
355+
356+
// try to load mode
357+
QDomElement modeElem = element.firstChildElement("mode");
358+
if (!modeElem.isNull())
359+
{
360+
QString modeString = modeElem.attribute("name");
361+
if (modeString == "equal")
362+
r->setMode(EqualInterval);
363+
else if (modeString == "quantile")
364+
r->setMode(Quantile);
365+
}
366+
321367
// TODO: symbol levels
322368
return r;
323369
}
@@ -351,8 +397,57 @@ QDomElement QgsGraduatedSymbolRendererV2::save(QDomDocument& doc)
351397
rendererElem.appendChild(rangesElem);
352398

353399
// save symbols
354-
QDomElement symbolsElem = QgsSymbolLayerV2Utils::saveSymbols(symbols, doc);
400+
QDomElement symbolsElem = QgsSymbolLayerV2Utils::saveSymbols(symbols, "symbols", doc);
355401
rendererElem.appendChild(symbolsElem);
356402

403+
// save source symbol
404+
if (mSourceSymbol)
405+
{
406+
QgsSymbolV2Map sourceSymbols;
407+
sourceSymbols.insert("0", mSourceSymbol);
408+
QDomElement sourceSymbolElem = QgsSymbolLayerV2Utils::saveSymbols(sourceSymbols, "source-symbol", doc);
409+
rendererElem.appendChild(sourceSymbolElem);
410+
}
411+
412+
// save source color ramp
413+
if (mSourceColorRamp)
414+
{
415+
QDomElement colorRampElem = QgsSymbolLayerV2Utils::saveColorRamp("[source]", mSourceColorRamp, doc);
416+
rendererElem.appendChild(colorRampElem);
417+
}
418+
419+
// save mode
420+
QString modeString;
421+
if (mMode == EqualInterval)
422+
modeString = "equal";
423+
else if (mMode == Quantile)
424+
modeString = "quantile";
425+
if (!modeString.isEmpty())
426+
{
427+
QDomElement modeElem = doc.createElement("mode");
428+
modeElem.setAttribute("name", modeString);
429+
rendererElem.appendChild(modeElem);
430+
}
431+
357432
return rendererElem;
358433
}
434+
435+
QgsSymbolV2* QgsGraduatedSymbolRendererV2::sourceSymbol()
436+
{
437+
return mSourceSymbol;
438+
}
439+
void QgsGraduatedSymbolRendererV2::setSourceSymbol(QgsSymbolV2* sym)
440+
{
441+
delete mSourceSymbol;
442+
mSourceSymbol = sym;
443+
}
444+
445+
QgsVectorColorRampV2* QgsGraduatedSymbolRendererV2::sourceColorRamp()
446+
{
447+
return mSourceColorRamp;
448+
}
449+
void QgsGraduatedSymbolRendererV2::setSourceColorRamp(QgsVectorColorRampV2* ramp)
450+
{
451+
delete mSourceColorRamp;
452+
mSourceColorRamp = ramp;
453+
}

‎src/core/symbology-ng/qgsgraduatedsymbolrendererv2.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,10 +87,18 @@ class QgsGraduatedSymbolRendererV2 : public QgsFeatureRendererV2
8787
//! store renderer info to XML element
8888
virtual QDomElement save(QDomDocument& doc);
8989

90+
QgsSymbolV2* sourceSymbol();
91+
void setSourceSymbol(QgsSymbolV2* sym);
92+
93+
QgsVectorColorRampV2* sourceColorRamp();
94+
void setSourceColorRamp(QgsVectorColorRampV2* ramp);
95+
9096
protected:
9197
QgsRangeList mRanges;
9298
QString mAttrName;
9399
Mode mMode;
100+
QgsSymbolV2* mSourceSymbol;
101+
QgsVectorColorRampV2* mSourceColorRamp;
94102

95103
//! attribute index (derived from attribute name in startRender)
96104
int mAttrNum;

‎src/core/symbology-ng/qgssinglesymbolrendererv2.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ QDomElement QgsSingleSymbolRendererV2::save(QDomDocument& doc)
9595

9696
QgsSymbolV2Map symbols;
9797
symbols["0"] = mSymbol;
98-
QDomElement symbolsElem = QgsSymbolLayerV2Utils::saveSymbols(symbols, doc);
98+
QDomElement symbolsElem = QgsSymbolLayerV2Utils::saveSymbols(symbols, "symbols", doc);
9999
rendererElem.appendChild(symbolsElem);
100100

101101
return rendererElem;

‎src/core/symbology-ng/qgsstylev2.cpp

Lines changed: 3 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -205,7 +205,7 @@ bool QgsStyleV2::load(QString filename)
205205
{
206206
if (e.tagName() == "colorramp")
207207
{
208-
QgsVectorColorRampV2* ramp = loadColorRamp(e);
208+
QgsVectorColorRampV2* ramp = QgsSymbolLayerV2Utils::loadColorRamp(e);
209209
if (ramp != NULL)
210210
addColorRamp(e.attribute("name"), ramp);
211211
}
@@ -220,25 +220,6 @@ bool QgsStyleV2::load(QString filename)
220220
}
221221

222222

223-
QgsVectorColorRampV2* QgsStyleV2::loadColorRamp(QDomElement& element)
224-
{
225-
QString rampType = element.attribute("type");
226-
227-
// parse properties
228-
QgsStringMap props = QgsSymbolLayerV2Utils::parseProperties(element);
229-
230-
if (rampType == "gradient")
231-
return QgsVectorGradientColorRampV2::create(props);
232-
else if (rampType == "random")
233-
return QgsVectorRandomColorRampV2::create(props);
234-
else
235-
{
236-
QgsDebugMsg("unknown colorramp type " + rampType);
237-
return NULL;
238-
}
239-
}
240-
241-
242223

243224
bool QgsStyleV2::save(QString filename)
244225
{
@@ -251,14 +232,14 @@ bool QgsStyleV2::save(QString filename)
251232
root.setAttribute("version", STYLE_CURRENT_VERSION);
252233
doc.appendChild(root);
253234

254-
QDomElement symbolsElem = QgsSymbolLayerV2Utils::saveSymbols(mSymbols, doc);
235+
QDomElement symbolsElem = QgsSymbolLayerV2Utils::saveSymbols(mSymbols, "symbols", doc);
255236

256237
QDomElement rampsElem = doc.createElement("colorramps");
257238

258239
// save color ramps
259240
for (QMap<QString, QgsVectorColorRampV2*>::iterator itr = mColorRamps.begin(); itr != mColorRamps.end(); ++itr)
260241
{
261-
QDomElement rampEl = saveColorRamp(itr.key(), itr.value(), doc);
242+
QDomElement rampEl = QgsSymbolLayerV2Utils::saveColorRamp(itr.key(), itr.value(), doc);
262243
rampsElem.appendChild(rampEl);
263244
}
264245

@@ -278,13 +259,3 @@ bool QgsStyleV2::save(QString filename)
278259

279260
return true;
280261
}
281-
282-
QDomElement QgsStyleV2::saveColorRamp(QString name, QgsVectorColorRampV2* ramp, QDomDocument& doc)
283-
{
284-
QDomElement rampEl = doc.createElement("colorramp");
285-
rampEl.setAttribute("type", ramp->type());
286-
rampEl.setAttribute("name", name);
287-
288-
QgsSymbolLayerV2Utils::saveProperties(ramp->properties(), doc, rampEl);
289-
return rampEl;
290-
}

‎src/core/symbology-ng/qgsstylev2.h

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -78,10 +78,6 @@ class QgsStyleV2
7878

7979
protected:
8080

81-
QgsVectorColorRampV2* loadColorRamp(QDomElement& element);
82-
83-
QDomElement saveColorRamp(QString name, QgsVectorColorRampV2* ramp, QDomDocument& doc);
84-
8581
QgsSymbolV2Map mSymbols;
8682
QgsVectorColorRampV2Map mColorRamps;
8783

‎src/core/symbology-ng/qgssymbollayerv2utils.cpp

Lines changed: 32 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -515,9 +515,9 @@ QgsSymbolV2Map QgsSymbolLayerV2Utils::loadSymbols(QDomElement& element)
515515
return symbols;
516516
}
517517

518-
QDomElement QgsSymbolLayerV2Utils::saveSymbols(QgsSymbolV2Map& symbols, QDomDocument& doc)
518+
QDomElement QgsSymbolLayerV2Utils::saveSymbols(QgsSymbolV2Map& symbols, QString tagName, QDomDocument& doc)
519519
{
520-
QDomElement symbolsElem = doc.createElement("symbols");
520+
QDomElement symbolsElem = doc.createElement(tagName);
521521

522522
QMap<QString, QgsSymbolV2*> subSymbols;
523523

@@ -544,3 +544,33 @@ void QgsSymbolLayerV2Utils::clearSymbolMap(QgsSymbolV2Map& symbols)
544544
delete symbols.value(name);
545545
symbols.clear();
546546
}
547+
548+
549+
QgsVectorColorRampV2* QgsSymbolLayerV2Utils::loadColorRamp(QDomElement& element)
550+
{
551+
QString rampType = element.attribute("type");
552+
553+
// parse properties
554+
QgsStringMap props = QgsSymbolLayerV2Utils::parseProperties(element);
555+
556+
if (rampType == "gradient")
557+
return QgsVectorGradientColorRampV2::create(props);
558+
else if (rampType == "random")
559+
return QgsVectorRandomColorRampV2::create(props);
560+
else
561+
{
562+
QgsDebugMsg("unknown colorramp type " + rampType);
563+
return NULL;
564+
}
565+
}
566+
567+
568+
QDomElement QgsSymbolLayerV2Utils::saveColorRamp(QString name, QgsVectorColorRampV2* ramp, QDomDocument& doc)
569+
{
570+
QDomElement rampEl = doc.createElement("colorramp");
571+
rampEl.setAttribute("type", ramp->type());
572+
rampEl.setAttribute("name", name);
573+
574+
QgsSymbolLayerV2Utils::saveProperties(ramp->properties(), doc, rampEl);
575+
return rampEl;
576+
}

‎src/core/symbology-ng/qgssymbollayerv2utils.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,9 +57,12 @@ class QgsSymbolLayerV2Utils
5757
static void saveProperties(QgsStringMap props, QDomDocument& doc, QDomElement& element);
5858

5959
static QgsSymbolV2Map loadSymbols(QDomElement& element);
60-
static QDomElement saveSymbols(QgsSymbolV2Map& symbols, QDomDocument& doc);
60+
static QDomElement saveSymbols(QgsSymbolV2Map& symbols, QString tagName, QDomDocument& doc);
6161

6262
static void clearSymbolMap(QgsSymbolV2Map& symbols);
63+
64+
static QgsVectorColorRampV2* loadColorRamp(QDomElement& element);
65+
static QDomElement saveColorRamp(QString name, QgsVectorColorRampV2* ramp, QDomDocument& doc);
6366
};
6467

6568
class QPolygonF;

‎src/gui/symbology-ng/qgsrendererv2propertiesdialog.cpp

Lines changed: 67 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -181,15 +181,39 @@ void QgsRendererV2PropertiesDialog::updateUiFromRenderer()
181181

182182
stackedWidget->setCurrentWidget(pageCategorized);
183183
updateCategorizedSymbolIcon();
184+
populateCategories();
184185

185-
disconnect(cboCategorizedColumn, SIGNAL(currentIndexChanged(int)), this, SLOT(categoryColumnChanged()));
186186
{
187-
QString attrName = rendererCategorized()->classAttribute();
187+
QgsCategorizedSymbolRendererV2* r = rendererCategorized();
188+
189+
// set column
190+
disconnect(cboCategorizedColumn, SIGNAL(currentIndexChanged(int)), this, SLOT(categoryColumnChanged()));
191+
QString attrName = r->classAttribute();
188192
int idx = cboCategorizedColumn->findText(attrName, Qt::MatchExactly);
189193
cboCategorizedColumn->setCurrentIndex(idx >= 0 ? idx : 0);
194+
connect(cboCategorizedColumn, SIGNAL(currentIndexChanged(int)), this, SLOT(categoryColumnChanged()));
195+
196+
// set source symbol
197+
if (r->sourceSymbol())
198+
{
199+
delete mCategorizedSymbol;
200+
mCategorizedSymbol = r->sourceSymbol()->clone();
201+
updateCategorizedSymbolIcon();
202+
}
203+
204+
// set source color ramp
205+
if (r->sourceColorRamp())
206+
{
207+
QSize rampIconSize(50,16);
208+
QIcon icon = QgsSymbolLayerV2Utils::colorRampPreviewIcon(r->sourceColorRamp(), rampIconSize);
209+
if (cboCategorizedColorRamp->itemText(0) == "[source]")
210+
cboCategorizedColorRamp->setItemIcon(0, icon);
211+
else
212+
cboCategorizedColorRamp->insertItem(0, icon, "[source]");
213+
cboCategorizedColorRamp->setCurrentIndex(0);
214+
}
190215
}
191-
connect(cboCategorizedColumn, SIGNAL(currentIndexChanged(int)), this, SLOT(categoryColumnChanged()));
192-
populateCategories();
216+
193217
break;
194218

195219
case QgsFeatureRendererV2::RendererGraduatedSymbol:
@@ -213,6 +237,26 @@ void QgsRendererV2PropertiesDialog::updateUiFromRenderer()
213237
int idx = cboGraduatedColumn->findText(attrName, Qt::MatchExactly);
214238
cboGraduatedColumn->setCurrentIndex(idx >= 0 ? idx : 0);
215239
//connect(cboGraduatedColumn, SIGNAL(currentIndexChanged(int)), this, SLOT(graduatedColumnChanged()));
240+
241+
// set source symbol
242+
if (r->sourceSymbol())
243+
{
244+
delete mGraduatedSymbol;
245+
mGraduatedSymbol = r->sourceSymbol()->clone();
246+
updateGraduatedSymbolIcon();
247+
}
248+
249+
// set source color ramp
250+
if (r->sourceColorRamp())
251+
{
252+
QSize rampIconSize(50,16);
253+
QIcon icon = QgsSymbolLayerV2Utils::colorRampPreviewIcon(r->sourceColorRamp(), rampIconSize);
254+
if (cboGraduatedColorRamp->itemText(0) == "[source]")
255+
cboGraduatedColorRamp->setItemIcon(0, icon);
256+
else
257+
cboGraduatedColorRamp->insertItem(0, icon, "[source]");
258+
cboGraduatedColorRamp->setCurrentIndex(0);
259+
}
216260
}
217261
break;
218262

@@ -346,8 +390,13 @@ void QgsRendererV2PropertiesDialog::addCategories()
346390
//DlgAddCategories dlg(mStyle, createDefaultSymbol(), unique_vals, this);
347391
//if (!dlg.exec())
348392
// return;
349-
350-
QgsVectorColorRampV2* ramp = mStyle->colorRamp( cboCategorizedColorRamp->currentText() );
393+
394+
QgsVectorColorRampV2* ramp = NULL;
395+
QString rampName = cboCategorizedColorRamp->currentText();
396+
if (rampName == "[source]" && rendererCategorized())
397+
ramp = rendererCategorized()->sourceColorRamp()->clone();
398+
else
399+
ramp = mStyle->colorRamp( rampName );
351400

352401
QgsCategoryList cats;
353402
::createCategories(cats, unique_vals, mCategorizedSymbol, ramp );
@@ -368,8 +417,11 @@ void QgsRendererV2PropertiesDialog::addCategories()
368417

369418
// recreate renderer
370419
delete mRenderer;
371-
mRenderer = new QgsCategorizedSymbolRendererV2(attrName, cats);
372-
420+
QgsCategorizedSymbolRendererV2* r = new QgsCategorizedSymbolRendererV2(attrName, cats);
421+
r->setSourceSymbol(mCategorizedSymbol->clone());
422+
r->setSourceColorRamp(ramp->clone());
423+
mRenderer = r;
424+
373425
populateCategories();
374426
}
375427

@@ -444,8 +496,13 @@ void QgsRendererV2PropertiesDialog::classifyGraduated()
444496

445497
int classes = spinGraduatedClasses->value();
446498

447-
QgsVectorColorRampV2* ramp = mStyle->colorRamp( cboGraduatedColorRamp->currentText() );
448-
499+
QgsVectorColorRampV2* ramp = NULL;
500+
QString rampName = cboGraduatedColorRamp->currentText();
501+
if (rampName == "[source]" && rendererGraduated())
502+
ramp = rendererGraduated()->sourceColorRamp()->clone();
503+
else
504+
ramp = mStyle->colorRamp( rampName );
505+
449506
QgsGraduatedSymbolRendererV2::Mode mode;
450507
if (cboGraduatedMode->currentIndex() == 0)
451508
mode = QgsGraduatedSymbolRendererV2::EqualInterval;
@@ -455,7 +512,6 @@ void QgsRendererV2PropertiesDialog::classifyGraduated()
455512
// create and set new renderer
456513
QgsGraduatedSymbolRendererV2* r = QgsGraduatedSymbolRendererV2::createRenderer(
457514
mLayer, attrName, classes, mode, mGraduatedSymbol, ramp);
458-
r->setMode(mode);
459515

460516
delete mRenderer;
461517
mRenderer = r;

0 commit comments

Comments
 (0)
Please sign in to comment.