saving and loading of symbology

git-svn-id: http://svn.osgeo.org/qgis/trunk@597 c8812cc2-4d05-0410-92ff-de0c093fc19c
This commit is contained in:
mhugent 2004-01-26 17:25:22 +00:00
parent 75460eb95b
commit 57e1623fd9
11 changed files with 439 additions and 62 deletions

View File

@ -22,7 +22,7 @@
-- General Map Layer Properties
-- (apply to both vector and raster)
-->
<!ELEMENT maplayer (layername, datasource, zorder, symbol) >
<!ELEMENT maplayer (layername, datasource, zorder, (singlesymbol|graduatedsymbol|continuoussymbol|rasterproperties) >
<!ELEMENT layername (#PCDATA) >
<!ELEMENT datasource (#PCDATA) >
<!ELEMENT zorder (#PCDATA) >
@ -31,25 +31,57 @@
type (vector|raster|database) "vector"
visible (1|0) "0"
>
<!--
-- Vector Layer Properties
-- Element symbol contains the settings for a qpainter
--
-->
<!ELEMENT symbol (linewidth, outlinecolor, fillcolor) >
<!ELEMENT linewidth (#PCDATA) >
<!ELEMENT fillcolor EMPTY>
<!ELEMENT outlinecolor EMPTY>
<!-- Attribute Lists -->
<!ATTLIST fillcolor
red CDATA #IMPLIED
green CDATA #IMPLIED
blue CDATA #IMPLIED
>
<!ELEMENT symbol (outlinecolor,outlinestyle,outlinewidth,fillcolor,fillpattern) >
<!ELEMENT outlinecolor EMPTY >
<!ELEMENT outlinestyle (#PCDATA) >
<!ELEMENT outlinewidth (#PCDATA) >
<!ELEMENT fillcolor EMPTY >
<!ELEMENT fillpattern (#PCDATA) >
<!ATTLIST outlinecolor
red CDATA #IMPLIED
green CDATA #IMPLIED
blue CDATA #IMPLIED
red CDATA #REQUIRED
green CDATA #REQUIRED
blue CDATA #REQUIRED
>
<!ATTLIST outlinecolor
red CDATA #REQUIRED
green CDATA #REQUIRED
blue CDATA #REQUIRED
>
<!--
-- renderitem and rangerenderitem
--
-->
<!ELEMENT renderitem (value,symbol,label) >
<!ELEMENT value (#PCDATA) >
<!ELEMENT label (#PCDATA) >
<!ELEMENT rangerenderitem (lowervalue,uppervalue,symbol,label) >
<!ELEMENT lowervalue (#PCDATA) >
<!ELEMENT uppervalue (#PCDATA) >
<!--
-- elements to store the settings of the different symbology types
--
-->
<!ELEMENT singlesymbol (renderitem) >
<!ELEMENT graduatedsymbol (classificationfield,rangerenderitem+) >
<!ELEMENT classificationfield (#PCDATA) >
<!ELEMENT continuoussymbol (classificationfield,lowestitem,highestitem) >
<!ELEMENT lowestitem (renderitem) >
<!ELEMENT highestitem (renderitem) >
<!--
-- Raster Layer Properties
--

View File

@ -192,7 +192,10 @@ void QgsContColDialog::apply()
p.drawText(leftspace+gradientwidth+wordspace,rangeoffset+gradientheight,QString::number(maximum,'f',2));
m_vectorlayer->triggerRepaint();
m_vectorlayer->legendItem()->setPixmap(0,(*pix));
if(m_vectorlayer->legendItem())
{
m_vectorlayer->legendItem()->setPixmap(0,(*pix));
}
}
void QgsContColDialog::selectMinimumColor()

View File

@ -12,9 +12,9 @@ class QgsContColDialog: public QgsContColDialogBase
public:
QgsContColDialog(QgsVectorLayer* layer);
~QgsContColDialog();
public slots:
void apply();
protected slots:
void apply();
void selectMinimumColor();
void selectMaximumColor();
protected:

View File

@ -38,6 +38,8 @@ class QgsContinuousColRenderer: public QgsRenderer
void initializeSymbology(QgsVectorLayer* layer);
/**Renders the feature using the minimum and maximum value of the classification field*/
void renderFeature(QPainter* p, QgsFeature* f, QgsCoordinateTransform* t);
/**Returns the number of the classification field*/
int classificationField() const;
/**Sets the id of the classification field*/
void setClassificationField(int id);
/**Sets the item for the minimum value. The item has to be created using the new operator and is automatically deleted when inserting a new item or when the instance is destroyed*/
@ -64,6 +66,11 @@ inline QgsContinuousColRenderer::QgsContinuousColRenderer(): m_minimumItem(0), m
}
inline int QgsContinuousColRenderer::classificationField() const
{
return m_classificationField;
}
inline void QgsContinuousColRenderer::setClassificationField(int id)
{
m_classificationField=id;

View File

@ -37,7 +37,7 @@ class QgsGraduatedSymRenderer: public QgsRenderer
/**Adds a new item
\param ri a pointer to the QgsRangeRenderItem to be inserted. It has to be created using the new operator and is automatically destroyed when 'removeItems' is called or when the instance is destroyed*/
void addItem(QgsRangeRenderItem* ri);
/**Returns the name of the classification field*/
/**Returns the number of the classification field*/
int classificationField() const;
/**Removes all items*/
void removeItems();

View File

@ -86,7 +86,6 @@ QgsGraSyDialog::QgsGraSyDialog(QgsVectorLayer* layer): QgsGraSyDialogBase(), ext
int number=0;
for(std::list<QgsRangeRenderItem*>::iterator it=list.begin();it!=list.end();++it)
{
qWarning("inside loop");
((QLineEdit*)(ext->getWidget(0,number)))->setText((*it)->value());
((QLineEdit*)ext->getWidget(1,number))->setText((*it)->upper_value());
((QLineEdit*)ext->getWidget(2,number))->setText((*it)->label());
@ -307,7 +306,6 @@ void QgsGraSyDialog::apply() const
if(lbcontainsletter==false&&ubcontainsletter==false&&lower_bound.length()>0&&upper_bound.length()>0)//only add the item if the value bounds do not contain letters and are not null strings
{
qWarning("adde ein renderitem");
QgsRangeRenderItem* item = new QgsRangeRenderItem(sy, lower_bound, upper_bound, ((QLineEdit*)(ext->getWidget(2,i)))->text());
renderer->addItem(item);
@ -337,7 +335,10 @@ void QgsGraSyDialog::apply() const
renderer->setClassificationField(ext->classfield());
m_vectorlayer->triggerRepaint();
m_vectorlayer->legendItem()->setPixmap(0,(*pix));
if(m_vectorlayer->legendItem())
{
m_vectorlayer->legendItem()->setPixmap(0,(*pix));
}
}
else//number of classes is 0

View File

@ -33,10 +33,11 @@ class QgsGraSyDialog: public QgsGraSyDialogBase
enum mode{EMPTY, EQUAL_INTERVAL, QUANTILES};
QgsGraSyDialog(QgsVectorLayer* layer);
~QgsGraSyDialog();
public slots:
void apply() const;
protected slots:
/**Creates a new extension widget*/
void adjustNumberOfClasses();
void apply() const;
protected:
/**Pointer to the curret extension widget*/
QgsGraSyExtensionWidget* ext;

View File

@ -12,21 +12,28 @@
* (at your option) any later version. *
* *
***************************************************************************/
/* qgsprojectio.cpp,v 1.17 2004/01/25 07:37:00 gsherman Exp */
#include <iostream>
#include <fstream>
#include <qfiledialog.h>
#include <qfileinfo.h>
#include <qdom.h>
#include <qmessagebox.h>
#include <qcolor.h>
#include "qgsmaplayer.h"
#include "qvariant.h"
#include "qgsvectorlayer.h"
/* qgsprojectio.cpp,v 1.18 2004/01/26 17:25:22 mhugent Exp */
#include <iostream>
#include <fstream>
#include <qfiledialog.h>
#include <qfileinfo.h>
#include <qdom.h>
#include <qmessagebox.h>
#include <qcolor.h>
#include "qgsmaplayer.h"
#include "qvariant.h"
#include "qgsvectorlayer.h"
#include "qgsrasterlayer.h"
#include "qgsmapcanvas.h"
#include "qgsrect.h"
#include "qgsprojectio.h"
#include "qgssinglesymrenderer.h"
#include "qgsgraduatedsymrenderer.h"
#include "qgscontinuouscolrenderer.h"
#include "qgssymbologyutils.h"
#include "qgssisydialog.h"
#include "qgsgrasydialog.h"
#include "qgscontcoldialog.h"
QgsProjectIo::QgsProjectIo(QgsMapCanvas *_map, int _action) : map(_map), action(_action)
@ -67,12 +74,16 @@ bool QgsProjectIo::read(){
doc = new QDomDocument( "qgisdocument" );
QFile file( path );
if ( !file.open( IO_ReadOnly ) )
return false;
if ( !doc->setContent( &file ) ) {
file.close();
return false;
{
return false;
}
if ( !doc->setContent( &file) )
{
file.close();
return false;
}
file.close();
qWarning("opened document");
// clear the map canvas
map->removeAll();
// get the extent
@ -126,8 +137,11 @@ bool QgsProjectIo::read(){
mne = mnl.toElement();
//QMessageBox::information(0,"Zorder", mne.text());
//process symbology
QgsSymbol *sym = new QgsSymbol();
//process symbology
/*QgsSymbol *sym = new QgsSymbol();
if ( type != "raster" ) {
mnl = node.namedItem("symbol");
QDomNode snode = mnl.namedItem("linewidth");
@ -151,26 +165,253 @@ bool QgsProjectIo::read(){
sym->setColor(QColor(olRed, olGreen, olBlue));
sym->setLineWidth(lineWidth);
// get the linewidth information
}
}*/
//QMessageBox::information(0,"Zorder", mne.text());
// add the layer to the maplayer
if(type == "vector"){
QString provider;
// determine type of vector layer
if((dataSource.find("host=") > -1) && (dataSource.find("dbname=") > -1)){
provider = "postgres";
}else{
provider = "ogr";
}
QgsVectorLayer *dbl = new QgsVectorLayer(dataSource, layerName, provider);
map->addLayer(dbl);
dbl->setSymbol(sym);
dbl->setVisible(visible == "1");
} else if ( type == "raster" ) {
if(type == "vector")
{
QString provider;
// determine type of vector layer
if((dataSource.find("host=") > -1) && (dataSource.find("dbname=") > -1))
{
provider = "postgres";
}
else
{
provider = "ogr";
}
QgsVectorLayer *dbl = new QgsVectorLayer(dataSource, layerName, provider);
//map->addLayer(dbl);
QDomNode singlenode=node.namedItem("singlesymbol");
QDomNode graduatednode=node.namedItem("graduatedsymbol");
QDomNode continuousnode=node.namedItem("continuoussymbol");
if(!singlenode.isNull())//read configuration for single symbol
{
QgsSymbol sy;
QPen pen;
QBrush brush;
QDomNode rinode=singlenode.namedItem("renderitem");
QDomNode vnode=rinode.namedItem("value");
QDomElement velement =vnode.toElement();
QString value=velement.text();
QDomNode synode=rinode.namedItem("symbol");
QDomNode outlcnode=synode.namedItem("outlinecolor");
QDomElement oulcelement=outlcnode.toElement();
int red = oulcelement.attribute("red").toInt();
int green = oulcelement.attribute("green").toInt();
int blue = oulcelement.attribute("blue").toInt();
pen.setColor(QColor(red,green,blue));
QDomNode outlstnode=synode.namedItem("outlinestyle");
QDomElement outlstelement=outlstnode.toElement();
pen.setStyle(QgsSymbologyUtils::qString2PenStyle(outlstelement.text()));
QDomNode outlwnode=synode.namedItem("outlinewidth");
QDomElement outlwelement=outlwnode.toElement();
pen.setWidth(outlwelement.text().toInt());
QDomNode fillcnode=synode.namedItem("fillcolor");
QDomElement fillcelement=fillcnode.toElement();
red=fillcelement.attribute("red").toInt();
green = fillcelement.attribute("green").toInt();
blue = fillcelement.attribute("blue").toInt();
brush.setColor(QColor(red,green,blue));
QDomNode fillpnode=synode.namedItem("fillpattern");
QDomElement fillpelement=fillpnode.toElement();
brush.setStyle(QgsSymbologyUtils::qString2BrushStyle(fillpelement.text()));
QDomNode lnode=rinode.namedItem("label");
QDomElement lnodee=lnode.toElement();
QString label=lnodee.text();
//create a renderer and add it to the vector layer
sy.setBrush(brush);
sy.setPen(pen);
QgsRenderItem ri(sy,value,label);
QgsSingleSymRenderer* srenderer=new QgsSingleSymRenderer();
srenderer->addItem(ri);
dbl->setRenderer(srenderer);
QgsSiSyDialog* sdialog=new QgsSiSyDialog(dbl);
dbl->setRendererDialog(sdialog);
sdialog->apply();
}
else if(!graduatednode.isNull())//read configuration for graduated symbol
{
QgsGraduatedSymRenderer* grenderer=new QgsGraduatedSymRenderer();
QDomNode classnode=graduatednode.namedItem("classificationfield");
int classificationfield=classnode.toElement().text().toInt();
grenderer->setClassificationField(classificationfield);
QDomNode rangerendernode=graduatednode.namedItem("rangerenderitem");
while(!rangerendernode.isNull())
{
QgsSymbol sy;
QPen pen;
QBrush brush;
QDomNode lvnode=rangerendernode.namedItem("lowervalue");
QString lowervalue=lvnode.toElement().text();
QDomNode uvnode=rangerendernode.namedItem("uppervalue");
QString uppervalue=uvnode.toElement().text();
QDomNode synode=rangerendernode.namedItem("symbol");
QDomElement oulcelement=synode.namedItem("outlinecolor").toElement();
int red = oulcelement.attribute("red").toInt();
int green = oulcelement.attribute("green").toInt();
int blue = oulcelement.attribute("blue").toInt();
pen.setColor(QColor(red,green,blue));
QDomElement oustelement=synode.namedItem("outlinestyle").toElement();
pen.setStyle(QgsSymbologyUtils::qString2PenStyle(oustelement.text()));
QDomElement oulwelement=synode.namedItem("outlinewidth").toElement();
pen.setWidth(oulwelement.text().toInt());
QDomElement fillcelement=synode.namedItem("fillcolor").toElement();
red = fillcelement.attribute("red").toInt();
green = fillcelement.attribute("green").toInt();
blue = fillcelement.attribute("blue").toInt();
brush.setColor(QColor(red,green,blue));
QDomElement fillpelement=synode.namedItem("fillpattern").toElement();
brush.setStyle(QgsSymbologyUtils::qString2BrushStyle(fillpelement.text()));
QDomElement labelelement=rangerendernode.namedItem("label").toElement();
QString label=labelelement.text();
//create a renderitem and add it to the renderer
sy.setBrush(brush);
sy.setPen(pen);
QgsRangeRenderItem* ri=new QgsRangeRenderItem(sy,lowervalue,uppervalue,label);
grenderer->addItem(ri);
rangerendernode=rangerendernode.nextSibling();
}
dbl->setRenderer(grenderer);
QgsGraSyDialog* gdialog=new QgsGraSyDialog(dbl);
dbl->setRendererDialog(gdialog);
gdialog->apply();
}
else if(!continuousnode.isNull())//read configuration for continuous symbol
{
qWarning("continuous node");
QgsSymbol lsy,usy;
QPen lpen, upen;
QBrush lbrush, ubrush;
QgsContinuousColRenderer* crenderer=new QgsContinuousColRenderer();
QDomNode classnode=continuousnode.namedItem("classificationfield");
int classificationfield=classnode.toElement().text().toInt();
//read the settings for the renderitem of the minimum value
QDomNode lowernode=continuousnode.namedItem("lowestitem");
QDomNode litemnode=lowernode.namedItem("renderitem");
QString lvalue=litemnode.namedItem("value").toElement().text();
QDomNode lsymbol=litemnode.namedItem("symbol");
QDomElement loulcelement=lsymbol.namedItem("outlinecolor").toElement();
int red = loulcelement.attribute("red").toInt();
int green = loulcelement.attribute("green").toInt();
int blue = loulcelement.attribute("blue").toInt();
lpen.setColor(QColor(red,green,blue));
QDomElement loustelement=lsymbol.namedItem("outlinestyle").toElement();
lpen.setStyle(QgsSymbologyUtils::qString2PenStyle(loustelement.text()));
QDomElement loulwelement=lsymbol.namedItem("outlinewidth").toElement();
lpen.setWidth(loulwelement.text().toInt());
QDomElement lfillcelement=lsymbol.namedItem("fillcolor").toElement();
red = lfillcelement.attribute("red").toInt();
green = lfillcelement.attribute("green").toInt();
blue = lfillcelement.attribute("blue").toInt();
lbrush.setColor(QColor(red,green,blue));
QDomElement lfillpelement=lsymbol.namedItem("fillpattern").toElement();
lbrush.setStyle(QgsSymbologyUtils::qString2BrushStyle(lfillpelement.text()));
QString llabel=litemnode.namedItem("label").toElement().text();
//read the settings tor the renderitem of the maximum value
QDomNode uppernode=continuousnode.namedItem("highestitem");
QDomNode uitemnode=uppernode.namedItem("renderitem");
QString uvalue=uitemnode.namedItem("value").toElement().text();
QDomNode usymbol=uitemnode.namedItem("symbol");
QDomElement uoulcelement=usymbol.namedItem("outlinecolor").toElement();
red = uoulcelement.attribute("red").toInt();
green = uoulcelement.attribute("green").toInt();
blue = uoulcelement.attribute("blue").toInt();
upen.setColor(QColor(red,green,blue));
QDomElement uoustelement=usymbol.namedItem("outlinestyle").toElement();
upen.setStyle(QgsSymbologyUtils::qString2PenStyle(uoustelement.text()));
QDomElement uoulwelement=usymbol.namedItem("outlinewidth").toElement();
upen.setWidth(uoulwelement.text().toInt());
QDomElement ufillcelement=usymbol.namedItem("fillcolor").toElement();
red = ufillcelement.attribute("red").toInt();
qWarning("red: " + QString::number(red));
green = ufillcelement.attribute("green").toInt();
qWarning("green: " + QString::number(green));
blue = ufillcelement.attribute("blue").toInt();
qWarning("blue: " + QString::number(blue));
ubrush.setColor(QColor(red,green,blue));
QDomElement ufillpelement=usymbol.namedItem("fillpattern").toElement();
ubrush.setStyle(QgsSymbologyUtils::qString2BrushStyle(ufillpelement.text()));
QString ulabel=uitemnode.namedItem("label").toElement().text();
//add all together
lsy.setPen(lpen);
lsy.setBrush(lbrush);
usy.setPen(upen);
usy.setBrush(ubrush);
QgsRenderItem* litem=new QgsRenderItem(lsy,lvalue,llabel);
QgsRenderItem* uitem=new QgsRenderItem(usy,uvalue,ulabel);
crenderer->setMinimumItem(litem);
crenderer->setMaximumItem(uitem);
dbl->setRenderer(crenderer);
QgsContColDialog* cdialog=new QgsContColDialog(dbl);
dbl->setRendererDialog(cdialog);
cdialog->apply();
}
//dbl->setSymbol(sym);
dbl->setVisible(visible == "1");
qWarning("adde den Layer");
map->addLayer(dbl);
}
else if ( type == "raster" )
{
QgsRasterLayer *myRasterLayer = new QgsRasterLayer(dataSource, layerName);
map->addLayer(myRasterLayer);
@ -304,8 +545,96 @@ void QgsProjectIo::writeXML(){
}
xml << "\t\t<datasource>" + lyr->source() + "</datasource>\n";
xml << "\t\t<zorder>" << i << "</zorder>\n";
if ( lyr->type() != QgsMapLayer::RASTER ) {
xml << "\t\t<symbol>\n";
if ( lyr->type() != QgsMapLayer::RASTER )
{
QgsVectorLayer* layer=dynamic_cast<QgsVectorLayer*>(lyr);
if(!layer)
{
qWarning("Warning, cast failed in QgsProjectIo, line 309");
}
QgsSingleSymRenderer* srenderer=dynamic_cast<QgsSingleSymRenderer*>(layer->renderer());
QgsGraduatedSymRenderer* grenderer=dynamic_cast<QgsGraduatedSymRenderer*>(layer->renderer());
QgsContinuousColRenderer* crenderer=dynamic_cast<QgsContinuousColRenderer*>(layer->renderer());
if(srenderer)
{
xml << "\t\t<singlesymbol>\n";
xml << "\t\t\t<renderitem>\n";
xml << "\t\t\t\t<value>"+srenderer->item()->value()+"</value>\n";
QgsSymbol* symbol=srenderer->item()->getSymbol();
xml << "\t\t\t\t<symbol>\n";
xml << "\t\t\t\t\t<outlinecolor red=\""+QString::number(symbol->pen().color().red())+"\" green=\""+QString::number(symbol->pen().color().green())+"\" blue=\""+QString::number(symbol->pen().color().blue())+"\" />\n";
xml << "\t\t\t\t\t<outlinestyle>"+QgsSymbologyUtils::penStyle2QString(symbol->pen().style())+"</outlinestyle>\n";
xml << "\t\t\t\t\t<outlinewidth>"+QString::number(symbol->pen().width())+"</outlinewidth>\n";
xml << "\t\t\t\t\t<fillcolor red=\""+QString::number(symbol->brush().color().red())+"\" green=\""+QString::number(symbol->brush().color().green())+"\" blue=\""+QString::number(symbol->brush().color().blue())+"\" />\n";
xml << "\t\t\t\t\t<fillpattern>"+QgsSymbologyUtils::brushStyle2QString(symbol->brush().style())+"</fillpattern>\n";
xml << "\t\t\t\t</symbol>\n";
xml << "\t\t\t\t<label>"+srenderer->item()->label()+"</label>\n";
xml << "\t\t\t</renderitem>\n";
xml << "\t\t</singlesymbol>\n";
}
else if(grenderer)
{
xml << "\t\t<graduatedsymbol>\n";
xml << "\t\t\t<classificationfield>"+QString::number(grenderer->classificationField())+"</classificationfield>\n";
for(std::list<QgsRangeRenderItem*>::iterator it=grenderer->items().begin();it!=grenderer->items().end();++it)
{
xml << "\t\t\t<rangerenderitem>\n";
xml << "\t\t\t\t<lowervalue>"+(*it)->value()+"</lowervalue>\n";
xml << "\t\t\t\t<uppervalue>"+(*it)->upper_value()+"</uppervalue>\n";
xml << "\t\t\t\t<symbol>\n";
QgsSymbol* symbol=(*it)->getSymbol();
xml << "\t\t\t\t\t<outlinecolor red=\""+QString::number(symbol->pen().color().red())+"\" green=\""+QString::number(symbol->pen().color().green())+"\" blue=\""+QString::number(symbol->pen().color().blue())+"\" />\n";
xml << "\t\t\t\t\t<outlinestyle>"+QgsSymbologyUtils::penStyle2QString(symbol->pen().style())+"</outlinestyle>\n";
xml << "\t\t\t\t\t<outlinewidth>"+QString::number(symbol->pen().width())+"</outlinewidth>\n";
xml << "\t\t\t\t\t<fillcolor red=\""+QString::number(symbol->brush().color().red())+"\" green=\""+QString::number(symbol->brush().color().green())+"\" blue=\""+QString::number(symbol->brush().color().blue())+"\" />\n";
xml << "\t\t\t\t\t<fillpattern>"+QgsSymbologyUtils::brushStyle2QString(symbol->brush().style())+"</fillpattern>\n";
xml << "\t\t\t\t</symbol>\n";
xml << "\t\t\t\t<label>"+(*it)->label()+"</label>\n";
xml << "\t\t\t</rangerenderitem>\n";
}
xml << "\t\t</graduatedsymbol>\n";
}
else if(crenderer)
{
xml << "\t\t<continuoussymbol>\n";
xml << "\t\t\t<classificationfield>"+QString::number(crenderer->classificationField())+"</classificationfield>\n";
QgsRenderItem* lowestitem=crenderer->minimumItem();
QgsSymbol* lsymbol=lowestitem->getSymbol();
xml << "\t\t\t<lowestitem>\n";
xml << "\t\t\t\t<renderitem>\n";
xml << "\t\t\t\t<value>"+lowestitem->value()+"</value>\n";
xml << "\t\t\t\t\t<symbol>\n";
xml << "\t\t\t\t\t\t<outlinecolor red=\""+QString::number(lsymbol->pen().color().red())+"\" green=\""+QString::number(lsymbol->pen().color().green())+"\" blue=\""+QString::number(lsymbol->pen().color().blue())+"\" />\n";
xml << "\t\t\t\t\t\t<outlinestyle>"+QgsSymbologyUtils::penStyle2QString(lsymbol->pen().style())+"</outlinestyle>\n";
xml << "\t\t\t\t\t\t<outlinewidth>"+QString::number(lsymbol->pen().width())+"</outlinewidth>\n";
xml << "\t\t\t\t\t\t<fillcolor red=\""+QString::number(lsymbol->brush().color().red())+"\" green=\""+QString::number(lsymbol->brush().color().green())+"\" blue=\""+QString::number(lsymbol->brush().color().blue())+"\" />\n";
xml << "\t\t\t\t\t\t<fillpattern>"+QgsSymbologyUtils::brushStyle2QString(lsymbol->brush().style())+"</fillpattern>\n";
xml << "\t\t\t\t\t</symbol>\n";
xml << "\t\t\t\t\t<label>"+lowestitem->label()+"</label>\n";
xml << "\t\t\t\t</renderitem>\n";
xml << "\t\t\t</lowestitem>\n";
QgsRenderItem* highestitem=crenderer->maximumItem();
QgsSymbol* hsymbol=highestitem->getSymbol();
xml << "\t\t\t<highestitem>\n";
xml << "\t\t\t\t<renderitem>\n";
xml << "\t\t\t\t<value>"+highestitem->value()+"</value>\n";
xml << "\t\t\t\t\t<symbol>\n";
xml << "\t\t\t\t\t\t<outlinecolor red=\""+QString::number(hsymbol->pen().color().red())+"\" green=\""+QString::number(hsymbol->pen().color().green())+"\" blue=\""+QString::number(hsymbol->pen().color().blue())+"\" />\n";
xml << "\t\t\t\t\t\t<outlinestyle>"+QgsSymbologyUtils::penStyle2QString(hsymbol->pen().style())+"</outlinestyle>\n";
xml << "\t\t\t\t\t\t<outlinewidth>"+QString::number(hsymbol->pen().width())+"</outlinewidth>\n";
xml << "\t\t\t\t\t\t<fillcolor red=\""+QString::number(hsymbol->brush().color().red())+"\" green=\""+QString::number(hsymbol->brush().color().green())+"\" blue=\""+QString::number(hsymbol->brush().color().blue())+"\" />\n";
xml << "\t\t\t\t\t\t<fillpattern>"+QgsSymbologyUtils::brushStyle2QString(hsymbol->brush().style())+"</fillpattern>\n";
xml << "\t\t\t\t\t</symbol>\n";
xml << "\t\t\t\t\t<label>"+highestitem->label()+"</label>\n";
xml << "\t\t\t\t</renderitem>\n";
xml << "\t\t\t</highestitem>\n";
xml << "\t\t</continuoussymbol>\n";
}
/*xml << "\t\t<symbol>\n";
QgsSymbol *sym = lyr->symbol();
xml << "\t\t\t<linewidth>" << sym->lineWidth() << "</linewidth>\n";
QColor outlineColor = sym->color();
@ -315,7 +644,7 @@ void QgsProjectIo::writeXML(){
xml << "\t\t\t<fillcolor red=\"" << fillColor.red() << "\" green=\""
<< fillColor.green() << "\" blue=\"" << fillColor.blue() << "\" />\n";
xml << "\t\t</symbol>\n";
xml << "\t\t</symbol>\n";*/
}
else //raster layer properties
{

View File

@ -43,15 +43,15 @@ QgsSiSyDialog::QgsSiSyDialog(QgsVectorLayer* layer): QgsSiSyDialogBase(), m_vect
{
//Set the initial display name
displaynamefield->setText(m_vectorlayer->name());
outlinecolorbutton->setPaletteBackgroundColor(((QgsSingleSymRenderer*)(layer->renderer()))->item()->getSymbol()->pen().color());
stylebutton->setText(tr("SolidLine"));
QgsSingleSymRenderer* renderer=dynamic_cast<QgsSingleSymRenderer*>(layer->renderer());
if(renderer)
{
outlinewidthspinbox->setValue(renderer->item()->getSymbol()->pen().width());
fillcolorbutton->setPaletteBackgroundColor(renderer->item()->getSymbol()->brush().color());
patternbutton->setText(QgsSymbologyUtils::brushStyle2QString(renderer->item()->getSymbol()->brush().style()));
stylebutton->setText(QgsSymbologyUtils::penStyle2QString((renderer->item()->getSymbol()->pen().style())));
outlinecolorbutton->setPaletteBackgroundColor(renderer->item()->getSymbol()->pen().color());
}
patternbutton->setText(tr("SolidPattern"));
if(m_vectorlayer&&m_vectorlayer->vectorType()==QGis::Line)
{
@ -172,7 +172,10 @@ void QgsSiSyDialog::apply()
p.setPen( Qt::black );
p.setFont( f );
p.drawText(35,pix->height()-10,displaynamefield->text());
m_vectorlayer->legendItem()->setPixmap(0,(*pix));
if(m_vectorlayer->legendItem())
{
m_vectorlayer->legendItem()->setPixmap(0,(*pix));
}
//repaint the map canvas
m_vectorlayer->triggerRepaint();

View File

@ -31,9 +31,10 @@ class QgsSiSyDialog: public QgsSiSyDialogBase
~QgsSiSyDialog();
protected:
QgsVectorLayer* m_vectorlayer;
protected slots:
public slots:
/**applies the changes to the vector layer*/
void apply();
protected slots:
void selectOutlineColor();
void selectOutlineStyle();
void selectFillColor();

Binary file not shown.

Before

Width:  |  Height:  |  Size: 927 B

After

Width:  |  Height:  |  Size: 934 B