Skip to content

Commit 4487241

Browse files
3nidsnyalldawson
authored andcommitted
implement filtering of categories in reading/writing
1 parent 51e9be0 commit 4487241

File tree

6 files changed

+558
-472
lines changed

6 files changed

+558
-472
lines changed

python/core/auto_generated/qgsmaplayerstyle.sip.in

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ only possible to read or write layer's current style.
3838
Fields,
3939
Forms,
4040
Actions,
41-
Tooltips,
41+
MapTips,
4242
Diagrams,
4343
AttributeTable,
4444
Rendering,

src/core/mesh/qgsmeshlayer.cpp

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -246,10 +246,12 @@ bool QgsMeshLayer::readSymbology( const QDomNode &node, QString &errorMessage,
246246
QgsReadWriteContext &context, QgsMapLayerStyle::StyleCategories categories )
247247
{
248248
Q_UNUSED( errorMessage );
249-
Q_UNUSED( context );
250-
Q_UNUSED( categories );
249+
// TODO: implement categories for raster layer
251250

252251
QDomElement elem = node.toElement();
252+
253+
readCommonStyle( elem, context, categories );
254+
253255
QDomElement elemRendererSettings = elem.firstChildElement( "mesh-renderer-settings" );
254256
if ( !elemRendererSettings.isNull() )
255257
mRendererSettings.readXml( elemRendererSettings );
@@ -261,10 +263,12 @@ bool QgsMeshLayer::writeSymbology( QDomNode &node, QDomDocument &doc, QString &e
261263
const QgsReadWriteContext &context, QgsMapLayerStyle::StyleCategories categories ) const
262264
{
263265
Q_UNUSED( errorMessage );
264-
Q_UNUSED( context );
265-
Q_UNUSED( categories );
266+
// TODO: implement categories for raster layer
266267

267268
QDomElement elem = node.toElement();
269+
270+
writeCommonStyle( elem, doc, context, categories );
271+
268272
QDomElement elemRendererSettings = mRendererSettings.writeXml( doc );
269273
elem.appendChild( elemRendererSettings );
270274

src/core/qgsmaplayer.cpp

Lines changed: 60 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -559,12 +559,15 @@ void QgsMapLayer::writeCommonStyle( QDomElement &layerElement, QDomDocument &doc
559559
layerElement.setAttribute( QStringLiteral( "minScale" ), QString::number( minimumScale() ) );
560560
}
561561

562-
if ( m3DRenderer )
562+
if ( categories.testFlag( QgsMapLayerStyle::Symbology ) )
563563
{
564-
QDomElement renderer3DElem = document.createElement( QStringLiteral( "renderer-3d" ) );
565-
renderer3DElem.setAttribute( QStringLiteral( "type" ), m3DRenderer->type() );
566-
m3DRenderer->writeXml( renderer3DElem, context );
567-
layerElement.appendChild( renderer3DElem );
564+
if ( m3DRenderer )
565+
{
566+
QDomElement renderer3DElem = document.createElement( QStringLiteral( "renderer-3d" ) );
567+
renderer3DElem.setAttribute( QStringLiteral( "type" ), m3DRenderer->type() );
568+
m3DRenderer->writeXml( renderer3DElem, context );
569+
layerElement.appendChild( renderer3DElem );
570+
}
568571
}
569572

570573
if ( categories.testFlag( QgsMapLayerStyle::LayerConfiguration ) )
@@ -1112,7 +1115,7 @@ void QgsMapLayer::exportNamedStyle( QDomDocument &doc, QString &errorMsg, QgsRea
11121115
myRootNode.setAttribute( QStringLiteral( "version" ), Qgis::QGIS_VERSION );
11131116
myDocument.appendChild( myRootNode );
11141117

1115-
if ( !writeSymbology( myRootNode, myDocument, errorMsg, QgsReadWriteContext(), categories ) ) // TODO: support relative paths in QML?
1118+
if ( !writeSymbology( myRootNode, myDocument, errorMsg, context, categories ) ) // TODO: support relative paths in QML?
11161119
{
11171120
errorMsg = QObject::tr( "Could not save symbology because:\n%1" ).arg( errorMsg );
11181121
return;
@@ -1563,6 +1566,7 @@ bool QgsMapLayer::readStyle( const QDomNode &node, QString &errorMessage, QgsRea
15631566
Q_UNUSED( node );
15641567
Q_UNUSED( errorMessage );
15651568
Q_UNUSED( context );
1569+
Q_UNUSED( categories );
15661570
return false;
15671571
}
15681572

@@ -1573,61 +1577,74 @@ bool QgsMapLayer::writeStyle( QDomNode &node, QDomDocument &doc, QString &errorM
15731577
Q_UNUSED( doc );
15741578
Q_UNUSED( errorMessage );
15751579
Q_UNUSED( context );
1580+
Q_UNUSED( categories );
15761581
return false;
15771582
}
15781583

15791584
void QgsMapLayer::readCommonStyle( const QDomElement &layerElement, const QgsReadWriteContext &context,
15801585
QgsMapLayerStyle::StyleCategories categories )
15811586
{
1582-
QgsAbstract3DRenderer *r3D = nullptr;
1583-
QDomElement renderer3DElem = layerElement.firstChildElement( QStringLiteral( "renderer-3d" ) );
1584-
if ( !renderer3DElem.isNull() )
1587+
if ( categories.testFlag( QgsMapLayerStyle::Symbology ) )
15851588
{
1586-
QString type3D = renderer3DElem.attribute( QStringLiteral( "type" ) );
1587-
Qgs3DRendererAbstractMetadata *meta3D = QgsApplication::renderer3DRegistry()->rendererMetadata( type3D );
1588-
if ( meta3D )
1589+
QgsAbstract3DRenderer *r3D = nullptr;
1590+
QDomElement renderer3DElem = layerElement.firstChildElement( QStringLiteral( "renderer-3d" ) );
1591+
if ( !renderer3DElem.isNull() )
15891592
{
1590-
r3D = meta3D->createRenderer( renderer3DElem, context );
1593+
QString type3D = renderer3DElem.attribute( QStringLiteral( "type" ) );
1594+
Qgs3DRendererAbstractMetadata *meta3D = QgsApplication::renderer3DRegistry()->rendererMetadata( type3D );
1595+
if ( meta3D )
1596+
{
1597+
r3D = meta3D->createRenderer( renderer3DElem, context );
1598+
}
15911599
}
1600+
setRenderer3D( r3D );
15921601
}
1593-
setRenderer3D( r3D );
1594-
1595-
// read custom properties before passing reading further to a subclass, so that
1596-
// the subclass can also read custom properties
1597-
readCustomProperties( layerElement );
15981602

1599-
// use scale dependent visibility flag
1600-
setScaleBasedVisibility( layerElement.attribute( QStringLiteral( "hasScaleBasedVisibilityFlag" ) ).toInt() == 1 );
1601-
if ( layerElement.hasAttribute( QStringLiteral( "minimumScale" ) ) )
1603+
if ( categories.testFlag( QgsMapLayerStyle::CustomProperties ) )
16021604
{
1603-
// older element, when scales were reversed
1604-
setMaximumScale( layerElement.attribute( QStringLiteral( "minimumScale" ) ).toDouble() );
1605-
setMinimumScale( layerElement.attribute( QStringLiteral( "maximumScale" ) ).toDouble() );
1605+
// read custom properties before passing reading further to a subclass, so that
1606+
// the subclass can also read custom properties
1607+
readCustomProperties( layerElement );
16061608
}
1607-
else
1609+
1610+
// use scale dependent visibility flag
1611+
if ( categories.testFlag( QgsMapLayerStyle::Rendering ) )
16081612
{
1609-
setMaximumScale( layerElement.attribute( QStringLiteral( "maxScale" ) ).toDouble() );
1610-
setMinimumScale( layerElement.attribute( QStringLiteral( "minScale" ) ).toDouble() );
1613+
setScaleBasedVisibility( layerElement.attribute( QStringLiteral( "hasScaleBasedVisibilityFlag" ) ).toInt() == 1 );
1614+
if ( layerElement.hasAttribute( QStringLiteral( "minimumScale" ) ) )
1615+
{
1616+
// older element, when scales were reversed
1617+
setMaximumScale( layerElement.attribute( QStringLiteral( "minimumScale" ) ).toDouble() );
1618+
setMinimumScale( layerElement.attribute( QStringLiteral( "maximumScale" ) ).toDouble() );
1619+
}
1620+
else
1621+
{
1622+
setMaximumScale( layerElement.attribute( QStringLiteral( "maxScale" ) ).toDouble() );
1623+
setMinimumScale( layerElement.attribute( QStringLiteral( "minScale" ) ).toDouble() );
1624+
}
16111625
}
16121626

1613-
// flags
1614-
QDomElement flagsElem = layerElement.firstChildElement( QStringLiteral( "flags" ) );
1615-
QMetaEnum metaEnum = QMetaEnum::fromType<QgsMapLayer::LayerFlag>();
1616-
LayerFlags flags = mFlags;
1617-
for ( int idx = 0; idx < metaEnum.keyCount(); ++idx )
1627+
if ( categories.testFlag( QgsMapLayerStyle::LayerConfiguration ) )
16181628
{
1619-
const char *enumKey = metaEnum.key( idx );
1620-
QDomNode flagNode = flagsElem.namedItem( QString( enumKey ) );
1621-
if ( flagNode.isNull() )
1622-
continue;
1623-
bool flagValue = flagNode.toElement().text() == "1" ? true : false;
1624-
QgsMapLayer::LayerFlag enumValue = static_cast<QgsMapLayer::LayerFlag>( metaEnum.keyToValue( enumKey ) );
1625-
if ( flags.testFlag( enumValue ) && !flagValue )
1626-
flags &= ~enumValue;
1627-
else if ( !flags.testFlag( enumValue ) && flagValue )
1628-
flags |= enumValue;
1629+
// flags
1630+
QDomElement flagsElem = layerElement.firstChildElement( QStringLiteral( "flags" ) );
1631+
QMetaEnum metaEnum = QMetaEnum::fromType<QgsMapLayer::LayerFlag>();
1632+
LayerFlags flags = mFlags;
1633+
for ( int idx = 0; idx < metaEnum.keyCount(); ++idx )
1634+
{
1635+
const char *enumKey = metaEnum.key( idx );
1636+
QDomNode flagNode = flagsElem.namedItem( QString( enumKey ) );
1637+
if ( flagNode.isNull() )
1638+
continue;
1639+
bool flagValue = flagNode.toElement().text() == "1" ? true : false;
1640+
QgsMapLayer::LayerFlag enumValue = static_cast<QgsMapLayer::LayerFlag>( metaEnum.keyToValue( enumKey ) );
1641+
if ( flags.testFlag( enumValue ) && !flagValue )
1642+
flags &= ~enumValue;
1643+
else if ( !flags.testFlag( enumValue ) && flagValue )
1644+
flags |= enumValue;
1645+
}
1646+
setFlags( flags );
16291647
}
1630-
setFlags( flags );
16311648
}
16321649

16331650
QUndoStack *QgsMapLayer::undoStack()

src/core/qgsmaplayerstyle.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -48,19 +48,19 @@ class CORE_EXPORT QgsMapLayerStyle
4848
*/
4949
enum StyleCategory
5050
{
51-
LayerConfiguration = 1 << 0, //!< Flags,
51+
LayerConfiguration = 1 << 0, //!< Flags, display expression, read-only
5252
Symbology = 1 << 1,
5353
Labels = 1 << 2,
5454
Fields = 1 << 3, //!< Aliases, WMS/WFS, expressions, constraints, virtual fields
5555
Forms = 1 << 4,
5656
Actions = 1 << 5,
57-
Tooltips = 1 << 6,
57+
MapTips = 1 << 6,
5858
Diagrams = 1 << 2,
5959
AttributeTable = 7 << 8,
60-
Rendering = 1 << 9, //!< Scale visibility, simplify method
60+
Rendering = 1 << 9, //!< Scale visibility, simplify method, opacity
6161
CustomProperties = 1 << 10,
6262
All = LayerConfiguration | Symbology | Labels | Fields | Forms | Actions |
63-
Tooltips | Diagrams | AttributeTable | Rendering | CustomProperties,
63+
MapTips | Diagrams | AttributeTable | Rendering | CustomProperties,
6464
};
6565
Q_ENUM( StyleCategory )
6666
Q_DECLARE_FLAGS( StyleCategories, StyleCategory )

0 commit comments

Comments
 (0)