QgsRendererCategory QgsCategorizedSymbolRendererModel::category( const QModelIndex &index ) { if ( !mRenderer ) { return QgsRendererCategory(); } const QgsCategoryList &catList = mRenderer->categories(); int row = index.row(); if ( row >= catList.size() ) { return QgsRendererCategory(); } return catList.at( row ); }
static QgsFeatureRenderer* readOldUniqueValueRenderer( const QDomNode& rnode, QgsWkbTypes::GeometryType geomType ) { QDomNode classnode = rnode.namedItem( "classificationfield" ); QString classificationField = classnode.toElement().text(); // read categories and symbols QgsCategoryList cats; QDomNode symbolnode = rnode.namedItem( "symbol" ); while ( !symbolnode.isNull() ) { QgsSymbol* symbol = readOldSymbol( symbolnode, geomType ); if ( symbol ) { QgsOldSymbolMeta meta = readSymbolMeta( symbolnode ); QVariant value = QVariant( meta.lowerValue ); QString label = meta.label; if ( label.isEmpty() ) label = value.toString(); cats.append( QgsRendererCategory( value, symbol, label, true ) ); } symbolnode = symbolnode.nextSibling(); } QgsCategorizedSymbolRenderer* r = new QgsCategorizedSymbolRenderer( classificationField, cats ); // source symbol and color ramp are not set (unknown) return r; }
QgsGrassEditRenderer::QgsGrassEditRenderer() : QgsFeatureRenderer( QStringLiteral( "grassEdit" ) ) { QHash<int, QColor> colors; //colors.insert( QgsGrassVectorMap::TopoUndefined, QColor( 125, 125, 125 ) ); colors.insert( QgsGrassVectorMap::TopoLine, QColor( Qt::black ) ); colors.insert( QgsGrassVectorMap::TopoBoundaryError, QColor( Qt::red ) ); colors.insert( QgsGrassVectorMap::TopoBoundaryErrorLeft, QColor( 255, 125, 0 ) ); colors.insert( QgsGrassVectorMap::TopoBoundaryErrorRight, QColor( 255, 125, 0 ) ); colors.insert( QgsGrassVectorMap::TopoBoundaryOk, QColor( Qt::green ) ); QHash<int, QString> labels; //labels.insert( QgsGrassVectorMap::TopoUndefined, "Unknown type" ); labels.insert( QgsGrassVectorMap::TopoLine, QStringLiteral( "Line" ) ); labels.insert( QgsGrassVectorMap::TopoBoundaryError, QStringLiteral( "Boundary (topological error on both sides)" ) ); labels.insert( QgsGrassVectorMap::TopoBoundaryErrorLeft, QStringLiteral( "Boundary (topological error on the left side)" ) ); labels.insert( QgsGrassVectorMap::TopoBoundaryErrorRight, QStringLiteral( "Boundary (topological error on the right side)" ) ); labels.insert( QgsGrassVectorMap::TopoBoundaryOk, QStringLiteral( "Boundary (correct)" ) ); QgsCategoryList categoryList; // first/last vertex marker to distinguish vertices from nodes QgsMarkerLineSymbolLayer *firstVertexMarkerLine = new QgsMarkerLineSymbolLayer( false ); QgsSimpleMarkerSymbolLayer *markerSymbolLayer = new QgsSimpleMarkerSymbolLayer( QgsSimpleMarkerSymbolLayerBase::Cross2, 2 ); markerSymbolLayer->setColor( QColor( 255, 0, 0 ) ); markerSymbolLayer->setStrokeColor( QColor( 255, 0, 0 ) ); markerSymbolLayer->setStrokeWidth( 0.5 ); QgsSymbolLayerList markerLayers; markerLayers << markerSymbolLayer; QgsMarkerSymbol *markerSymbol = new QgsMarkerSymbol( markerLayers ); firstVertexMarkerLine->setSubSymbol( markerSymbol ); firstVertexMarkerLine->setPlacement( QgsTemplatedLineSymbolLayerBase::FirstVertex ); QgsMarkerLineSymbolLayer *lastVertexMarkerLine = static_cast<QgsMarkerLineSymbolLayer *>( firstVertexMarkerLine->clone() ); lastVertexMarkerLine->setPlacement( QgsTemplatedLineSymbolLayerBase::LastVertex ); Q_FOREACH ( int value, colors.keys() ) { QgsSymbol *symbol = QgsSymbol::defaultSymbol( QgsWkbTypes::LineGeometry ); symbol->setColor( colors.value( value ) ); symbol->appendSymbolLayer( firstVertexMarkerLine->clone() ); symbol->appendSymbolLayer( lastVertexMarkerLine->clone() ); categoryList << QgsRendererCategory( QVariant( value ), symbol, labels.value( value ) ); } delete firstVertexMarkerLine; delete lastVertexMarkerLine; mLineRenderer = new QgsCategorizedSymbolRenderer( QStringLiteral( "topo_symbol" ), categoryList ); colors.clear(); labels.clear(); colors.insert( QgsGrassVectorMap::TopoPoint, QColor( 0, 255, 255 ) ); colors.insert( QgsGrassVectorMap::TopoCentroidIn, QColor( 0, 255, 0 ) ); colors.insert( QgsGrassVectorMap::TopoCentroidOut, QColor( 255, 0, 0 ) ); colors.insert( QgsGrassVectorMap::TopoCentroidDupl, QColor( 255, 0, 255 ) ); labels.insert( QgsGrassVectorMap::TopoPoint, QStringLiteral( "Point" ) ); labels.insert( QgsGrassVectorMap::TopoCentroidIn, QStringLiteral( "Centroid in area" ) ); labels.insert( QgsGrassVectorMap::TopoCentroidOut, QStringLiteral( "Centroid outside area" ) ); labels.insert( QgsGrassVectorMap::TopoCentroidDupl, QStringLiteral( "Duplicate centroid" ) ); categoryList.clear(); Q_FOREACH ( int value, colors.keys() ) { QgsSymbol *symbol = QgsSymbol::defaultSymbol( QgsWkbTypes::PointGeometry ); symbol->setColor( colors.value( value ) ); categoryList << QgsRendererCategory( QVariant( value ), symbol, labels.value( value ) ); } mMarkerRenderer = new QgsCategorizedSymbolRenderer( QStringLiteral( "topo_symbol" ), categoryList ); }