1
/***************************************************************************
2
qgsuniquevalrenderer.cpp - description
5
copyright : (C) 2004 by Marco Hugentobler
6
email : marco.hugentobler@autoform.ch
7
***************************************************************************/
9
/***************************************************************************
11
* This program is free software; you can redistribute it and/or modify *
12
* it under the terms of the GNU General Public License as published by *
13
* the Free Software Foundation; either version 2 of the License, or *
14
* (at your option) any later version. *
16
***************************************************************************/
17
/* $Id: qgsuniquevalrenderer.cpp,v 1.11 2004/11/27 19:19:17 gsherman Exp $ */
18
#include "qgsdlgvectorlayerproperties.h"
19
#include "qgsuniquevalrenderer.h"
20
#include "qgsuvaldialog.h"
21
#include "qgsrenderitem.h"
22
#include "qgsfeatureattribute.h"
23
#include "qgsfeature.h"
24
#include "qgsvectorlayer.h"
25
#include "qgssymbologyutils.h"
26
#include "qgsuvaldialog.h"
31
QgsUniqueValRenderer::QgsUniqueValRenderer(): mClassificationField(0),mSelectionColor(QColor(255,255,0))
36
QgsUniqueValRenderer::~QgsUniqueValRenderer()
38
for(std::map<QString,QgsRenderItem*>::iterator it=mEntries.begin();it!=mEntries.end();++it)
44
void QgsUniqueValRenderer::initializeSymbology(QgsVectorLayer* layer, QgsDlgVectorLayerProperties* pr)
46
QgsUValDialog *dialog = new QgsUValDialog(layer);
50
pr->setBufferDialog(dialog);
54
layer->setRendererDialog(dialog);
58
void QgsUniqueValRenderer::renderFeature(QPainter* p, QgsFeature* f,QPicture* pic, double* scalefactor, bool selected)
60
std::vector < QgsFeatureAttribute > vec = f->attributeMap();
61
QString value = vec[0].fieldValue();
62
std::map<QString,QgsRenderItem*>::iterator it=mEntries.find(value);
63
if(it!=mEntries.end())
65
QgsRenderItem* ritem=it->second;
66
p->setPen(ritem->getSymbol()->pen());
67
p->setBrush(ritem->getSymbol()->brush());
71
QPen pen=ritem->getSymbol()->pen();
72
pen.setColor(mSelectionColor);
73
QBrush brush=ritem->getSymbol()->brush();
74
brush.setColor(mSelectionColor);
82
qWarning("Warning, no render item found in QgsUniqueValRenderer::renderFeature");
88
void QgsUniqueValRenderer::readXML(const QDomNode& rnode, QgsVectorLayer& vl)
90
QDomNode classnode = rnode.namedItem("classificationfield");
91
int classificationfield = classnode.toElement().text().toInt();
92
this->setClassificationField(classificationfield);
94
QDomNode renderitemnode = rnode.namedItem("renderitem");
95
while (!renderitemnode.isNull())
97
QDomNode valuenode = renderitemnode.namedItem("value");
98
QString value = valuenode.toElement().text();
100
qWarning("readXML, value is "+value);
102
QgsSymbol* msy = new QgsSymbol();
105
QDomNode synode = renderitemnode.namedItem("symbol");
106
QDomElement oulcelement = synode.namedItem("outlinecolor").toElement();
107
int red = oulcelement.attribute("red").toInt();
108
int green = oulcelement.attribute("green").toInt();
109
int blue = oulcelement.attribute("blue").toInt();
110
pen.setColor(QColor(red, green, blue));
112
QDomElement oustelement = synode.namedItem("outlinestyle").toElement();
113
pen.setStyle(QgsSymbologyUtils::qString2PenStyle(oustelement.text()));
115
QDomElement oulwelement = synode.namedItem("outlinewidth").toElement();
116
pen.setWidth(oulwelement.text().toInt());
118
QDomElement fillcelement = synode.namedItem("fillcolor").toElement();
119
red = fillcelement.attribute("red").toInt();
120
green = fillcelement.attribute("green").toInt();
121
blue = fillcelement.attribute("blue").toInt();
122
brush.setColor(QColor(red, green, blue));
124
QDomElement fillpelement = synode.namedItem("fillpattern").toElement();
125
brush.setStyle(QgsSymbologyUtils::qString2BrushStyle(fillpelement.text()));
127
QDomElement labelelement = renderitemnode.namedItem("label").toElement();
128
QString label = labelelement.text();
130
//create a renderitem and add it to the renderer
131
msy->setBrush(brush);
134
QgsRenderItem *ri = new QgsRenderItem(msy, value, label);
135
this->insertValue(value,ri);
137
renderitemnode = renderitemnode.nextSibling();
140
vl.setRenderer(this);
141
QgsUValDialog *uvaldialog = new QgsUValDialog(&vl);
142
vl.setRendererDialog(uvaldialog);
144
QgsDlgVectorLayerProperties *properties = new QgsDlgVectorLayerProperties(&vl);
145
vl.setLayerProperties(properties);
146
properties->setLegendType("Unique Value");
151
void QgsUniqueValRenderer::writeXML(std::ostream& xml)
154
qWarning("in QgsUniqueValRenderer::writeXML");
156
xml << "\t\t<uniquevalue>\n";
157
xml << "\t\t\t<classificationfield>" << QString::number(this->classificationField()) << "</classificationfield>\n";
158
for(std::map<QString,QgsRenderItem*>::iterator it=mEntries.begin();it!=mEntries.end();++it)
160
xml << "\t\t\t<renderitem>\n";
161
xml << "\t\t\t\t<value>" << QString(it->first) << "</value>\n";
162
xml << "\t\t\t\t<symbol>\n";
163
QgsSymbol *symbol = (it->second)->getSymbol();
164
xml << "\t\t\t\t\t<outlinecolor red=\"" << QString::number(symbol->pen().color().red()) << "\" green=\"" <<
165
QString::number(symbol->pen().color().green()) << "\" blue=\"" << QString::number(symbol->pen().color().blue()) <<
167
xml << "\t\t\t\t\t<outlinestyle>" << QgsSymbologyUtils::penStyle2QString(symbol->pen().style()) <<
169
xml << "\t\t\t\t\t<outlinewidth>" << QString::number(symbol->pen().width()) << "</outlinewidth>\n";
170
xml << "\t\t\t\t\t<fillcolor red=\"" << QString::number(symbol->brush().color().red()) << "\" green=\"" <<
171
QString::number(symbol->brush().color().green()) << "\" blue=\"" <<
172
QString::number(symbol->brush().color().blue()) << "\" />\n";
173
xml << "\t\t\t\t\t<fillpattern>" << QgsSymbologyUtils::brushStyle2QString(symbol->brush().style()) <<
175
xml << "\t\t\t\t</symbol>\n";
176
xml << "\t\t\t\t<label>" << (it->second)->label() << "</label>\n";
178
qWarning((it->second)->label());
180
xml << "\t\t\t</renderitem>\n";
182
xml << "\t\t</uniquevalue>\n";
185
void QgsUniqueValRenderer::clearValues()
187
for(std::map<QString,QgsRenderItem*>::iterator it=mEntries.begin();it!=mEntries.end();++it)
194
QString QgsUniqueValRenderer::name()
196
return "Unique Value";
199
std::list<int> QgsUniqueValRenderer::classificationAttributes()
202
list.push_back(mClassificationField);
206
std::map<QString,QgsRenderItem*>& QgsUniqueValRenderer::items()