Skip to content

Commit 0001856

Browse files
committedJan 19, 2017
Save readOnly state, constraints and default values to style
They should be handled equal to the edit form config. Fix #15931
1 parent 5e479fc commit 0001856

File tree

1 file changed

+107
-110
lines changed

1 file changed

+107
-110
lines changed
 

‎src/core/qgsvectorlayer.cpp

Lines changed: 107 additions & 110 deletions
Original file line numberDiff line numberDiff line change
@@ -1385,10 +1385,6 @@ bool QgsVectorLayer::readXml( const QDomNode& layer_node )
13851385
return false;
13861386
}
13871387

1388-
QDomElement mapLayerNode = layer_node.toElement();
1389-
if ( mapLayerNode.attribute( QStringLiteral( "readOnly" ), QStringLiteral( "0" ) ).toInt() == 1 )
1390-
mReadOnly = true;
1391-
13921388
QDomElement pkeyElem = pkeyNode.toElement();
13931389
if ( !pkeyElem.isNull() )
13941390
{
@@ -1418,79 +1414,11 @@ bool QgsVectorLayer::readXml( const QDomNode& layer_node )
14181414

14191415
readStyleManager( layer_node );
14201416

1421-
// default expressions
1422-
mDefaultExpressionMap.clear();
1423-
QDomNode defaultsNode = layer_node.namedItem( QStringLiteral( "defaults" ) );
1424-
if ( !defaultsNode.isNull() )
1425-
{
1426-
QDomNodeList defaultNodeList = defaultsNode.toElement().elementsByTagName( QStringLiteral( "default" ) );
1427-
for ( int i = 0; i < defaultNodeList.size(); ++i )
1428-
{
1429-
QDomElement defaultElem = defaultNodeList.at( i ).toElement();
1430-
1431-
QString field = defaultElem.attribute( QStringLiteral( "field" ), QString() );
1432-
QString expression = defaultElem.attribute( QStringLiteral( "expression" ), QString() );
1433-
if ( field.isEmpty() || expression.isEmpty() )
1434-
continue;
1435-
1436-
mDefaultExpressionMap.insert( field, expression );
1437-
}
1438-
}
1439-
1440-
// constraints
1441-
mFieldConstraints.clear();
1442-
mFieldConstraintStrength.clear();
1443-
QDomNode constraintsNode = layer_node.namedItem( "constraints" );
1444-
if ( !constraintsNode.isNull() )
1445-
{
1446-
QDomNodeList constraintNodeList = constraintsNode.toElement().elementsByTagName( "constraint" );
1447-
for ( int i = 0; i < constraintNodeList.size(); ++i )
1448-
{
1449-
QDomElement constraintElem = constraintNodeList.at( i ).toElement();
1450-
1451-
QString field = constraintElem.attribute( "field", QString() );
1452-
int constraints = constraintElem.attribute( "constraints", QString( "0" ) ).toInt();
1453-
if ( field.isEmpty() || constraints == 0 )
1454-
continue;
1455-
1456-
mFieldConstraints.insert( field, static_cast< QgsFieldConstraints::Constraints >( constraints ) );
1457-
1458-
int uniqueStrength = constraintElem.attribute( "unique_strength", QString( "1" ) ).toInt();
1459-
int notNullStrength = constraintElem.attribute( "notnull_strength", QString( "1" ) ).toInt();
1460-
int expStrength = constraintElem.attribute( "exp_strength", QString( "1" ) ).toInt();
1461-
1462-
mFieldConstraintStrength.insert( qMakePair( field, QgsFieldConstraints::ConstraintUnique ), static_cast< QgsFieldConstraints::ConstraintStrength >( uniqueStrength ) );
1463-
mFieldConstraintStrength.insert( qMakePair( field, QgsFieldConstraints::ConstraintNotNull ), static_cast< QgsFieldConstraints::ConstraintStrength >( notNullStrength ) );
1464-
mFieldConstraintStrength.insert( qMakePair( field, QgsFieldConstraints::ConstraintExpression ), static_cast< QgsFieldConstraints::ConstraintStrength >( expStrength ) );
1465-
}
1466-
}
1467-
mFieldConstraintExpressions.clear();
1468-
QDomNode constraintExpressionsNode = layer_node.namedItem( "constraintExpressions" );
1469-
if ( !constraintExpressionsNode.isNull() )
1470-
{
1471-
QDomNodeList constraintNodeList = constraintExpressionsNode.toElement().elementsByTagName( "constraint" );
1472-
for ( int i = 0; i < constraintNodeList.size(); ++i )
1473-
{
1474-
QDomElement constraintElem = constraintNodeList.at( i ).toElement();
1475-
1476-
QString field = constraintElem.attribute( "field", QString() );
1477-
QString exp = constraintElem.attribute( "exp", QString() );
1478-
QString desc = constraintElem.attribute( "desc", QString() );
1479-
if ( field.isEmpty() || exp.isEmpty() )
1480-
continue;
1481-
1482-
mFieldConstraintExpressions.insert( field, qMakePair( exp, desc ) );
1483-
}
1484-
}
1485-
1486-
updateFields();
1487-
14881417
QDomNode depsNode = layer_node.namedItem( QStringLiteral( "dataDependencies" ) );
14891418
QDomNodeList depsNodes = depsNode.childNodes();
14901419
QSet<QgsMapLayerDependency> sources;
14911420
for ( int i = 0; i < depsNodes.count(); i++ )
14921421
{
1493-
QDomNode node = depsNodes.at( i );
14941422
QString source = depsNodes.at( i ).toElement().attribute( QStringLiteral( "id" ) );
14951423
sources << QgsMapLayerDependency( source );
14961424
}
@@ -1678,44 +1606,6 @@ bool QgsVectorLayer::writeXml( QDomNode & layer_node,
16781606
}
16791607
layer_node.appendChild( dependenciesElement );
16801608

1681-
//default expressions
1682-
QDomElement defaultsElem = document.createElement( QStringLiteral( "defaults" ) );
1683-
Q_FOREACH ( const QgsField& field, mFields )
1684-
{
1685-
QDomElement defaultElem = document.createElement( QStringLiteral( "default" ) );
1686-
defaultElem.setAttribute( QStringLiteral( "field" ), field.name() );
1687-
defaultElem.setAttribute( QStringLiteral( "expression" ), field.defaultValueExpression() );
1688-
defaultsElem.appendChild( defaultElem );
1689-
}
1690-
layer_node.appendChild( defaultsElem );
1691-
1692-
// constraints
1693-
QDomElement constraintsElem = document.createElement( "constraints" );
1694-
Q_FOREACH ( const QgsField& field, mFields )
1695-
{
1696-
QDomElement constraintElem = document.createElement( "constraint" );
1697-
constraintElem.setAttribute( "field", field.name() );
1698-
constraintElem.setAttribute( "constraints", field.constraints().constraints() );
1699-
constraintElem.setAttribute( "unique_strength", field.constraints().constraintStrength( QgsFieldConstraints::ConstraintUnique ) );
1700-
constraintElem.setAttribute( "notnull_strength", field.constraints().constraintStrength( QgsFieldConstraints::ConstraintNotNull ) );
1701-
constraintElem.setAttribute( "exp_strength", field.constraints().constraintStrength( QgsFieldConstraints::ConstraintExpression ) );
1702-
constraintsElem.appendChild( constraintElem );
1703-
}
1704-
layer_node.appendChild( constraintsElem );
1705-
1706-
// constraint expressions
1707-
QDomElement constraintExpressionsElem = document.createElement( "constraintExpressions" );
1708-
Q_FOREACH ( const QgsField& field, mFields )
1709-
{
1710-
QDomElement constraintExpressionElem = document.createElement( "constraint" );
1711-
constraintExpressionElem.setAttribute( "field", field.name() );
1712-
constraintExpressionElem.setAttribute( "exp", field.constraints().constraintExpression() );
1713-
constraintExpressionElem.setAttribute( "desc", field.constraints().constraintDescription() );
1714-
constraintExpressionsElem.appendChild( constraintExpressionElem );
1715-
}
1716-
layer_node.appendChild( constraintExpressionsElem );
1717-
1718-
17191609
// change dependencies
17201610
QDomElement dataDependenciesElement = document.createElement( QStringLiteral( "dataDependencies" ) );
17211611
Q_FOREACH ( const QgsMapLayerDependency& dep, dependencies() )
@@ -1804,6 +1694,72 @@ bool QgsVectorLayer::readSymbology( const QDomNode& layerNode, QString& errorMes
18041694
mAttributeAliasMap.insert( field, aliasElem.attribute( QStringLiteral( "name" ) ) );
18051695
}
18061696
}
1697+
1698+
// default expressions
1699+
mDefaultExpressionMap.clear();
1700+
QDomNode defaultsNode = layerNode.namedItem( QStringLiteral( "defaults" ) );
1701+
if ( !defaultsNode.isNull() )
1702+
{
1703+
QDomNodeList defaultNodeList = defaultsNode.toElement().elementsByTagName( QStringLiteral( "default" ) );
1704+
for ( int i = 0; i < defaultNodeList.size(); ++i )
1705+
{
1706+
QDomElement defaultElem = defaultNodeList.at( i ).toElement();
1707+
1708+
QString field = defaultElem.attribute( QStringLiteral( "field" ), QString() );
1709+
QString expression = defaultElem.attribute( QStringLiteral( "expression" ), QString() );
1710+
if ( field.isEmpty() || expression.isEmpty() )
1711+
continue;
1712+
1713+
mDefaultExpressionMap.insert( field, expression );
1714+
}
1715+
}
1716+
1717+
// constraints
1718+
mFieldConstraints.clear();
1719+
mFieldConstraintStrength.clear();
1720+
QDomNode constraintsNode = layerNode.namedItem( "constraints" );
1721+
if ( !constraintsNode.isNull() )
1722+
{
1723+
QDomNodeList constraintNodeList = constraintsNode.toElement().elementsByTagName( "constraint" );
1724+
for ( int i = 0; i < constraintNodeList.size(); ++i )
1725+
{
1726+
QDomElement constraintElem = constraintNodeList.at( i ).toElement();
1727+
1728+
QString field = constraintElem.attribute( "field", QString() );
1729+
int constraints = constraintElem.attribute( "constraints", QString( "0" ) ).toInt();
1730+
if ( field.isEmpty() || constraints == 0 )
1731+
continue;
1732+
1733+
mFieldConstraints.insert( field, static_cast< QgsFieldConstraints::Constraints >( constraints ) );
1734+
1735+
int uniqueStrength = constraintElem.attribute( "unique_strength", QString( "1" ) ).toInt();
1736+
int notNullStrength = constraintElem.attribute( "notnull_strength", QString( "1" ) ).toInt();
1737+
int expStrength = constraintElem.attribute( "exp_strength", QString( "1" ) ).toInt();
1738+
1739+
mFieldConstraintStrength.insert( qMakePair( field, QgsFieldConstraints::ConstraintUnique ), static_cast< QgsFieldConstraints::ConstraintStrength >( uniqueStrength ) );
1740+
mFieldConstraintStrength.insert( qMakePair( field, QgsFieldConstraints::ConstraintNotNull ), static_cast< QgsFieldConstraints::ConstraintStrength >( notNullStrength ) );
1741+
mFieldConstraintStrength.insert( qMakePair( field, QgsFieldConstraints::ConstraintExpression ), static_cast< QgsFieldConstraints::ConstraintStrength >( expStrength ) );
1742+
}
1743+
}
1744+
mFieldConstraintExpressions.clear();
1745+
QDomNode constraintExpressionsNode = layerNode.namedItem( "constraintExpressions" );
1746+
if ( !constraintExpressionsNode.isNull() )
1747+
{
1748+
QDomNodeList constraintNodeList = constraintExpressionsNode.toElement().elementsByTagName( "constraint" );
1749+
for ( int i = 0; i < constraintNodeList.size(); ++i )
1750+
{
1751+
QDomElement constraintElem = constraintNodeList.at( i ).toElement();
1752+
1753+
QString field = constraintElem.attribute( "field", QString() );
1754+
QString exp = constraintElem.attribute( "exp", QString() );
1755+
QString desc = constraintElem.attribute( "desc", QString() );
1756+
if ( field.isEmpty() || exp.isEmpty() )
1757+
continue;
1758+
1759+
mFieldConstraintExpressions.insert( field, qMakePair( exp, desc ) );
1760+
}
1761+
}
1762+
18071763
updateFields();
18081764

18091765
//Attributes excluded from WMS and WFS
@@ -1857,6 +1813,10 @@ bool QgsVectorLayer::readSymbology( const QDomNode& layerNode, QString& errorMes
18571813

18581814
readCustomProperties( layerNode, QStringLiteral( "variable" ) );
18591815

1816+
QDomElement mapLayerNode = layerNode.toElement();
1817+
if ( mapLayerNode.attribute( QStringLiteral( "readOnly" ), QStringLiteral( "0" ) ).toInt() == 1 )
1818+
mReadOnly = true;
1819+
18601820
return true;
18611821
}
18621822

@@ -2041,6 +2001,43 @@ bool QgsVectorLayer::writeSymbology( QDomNode& node, QDomDocument& doc, QString&
20412001
}
20422002
node.appendChild( excludeWFSElem );
20432003

2004+
//default expressions
2005+
QDomElement defaultsElem = doc.createElement( QStringLiteral( "defaults" ) );
2006+
Q_FOREACH ( const QgsField& field, mFields )
2007+
{
2008+
QDomElement defaultElem = doc.createElement( QStringLiteral( "default" ) );
2009+
defaultElem.setAttribute( QStringLiteral( "field" ), field.name() );
2010+
defaultElem.setAttribute( QStringLiteral( "expression" ), field.defaultValueExpression() );
2011+
defaultsElem.appendChild( defaultElem );
2012+
}
2013+
node.appendChild( defaultsElem );
2014+
2015+
// constraints
2016+
QDomElement constraintsElem = doc.createElement( "constraints" );
2017+
Q_FOREACH ( const QgsField& field, mFields )
2018+
{
2019+
QDomElement constraintElem = doc.createElement( "constraint" );
2020+
constraintElem.setAttribute( "field", field.name() );
2021+
constraintElem.setAttribute( "constraints", field.constraints().constraints() );
2022+
constraintElem.setAttribute( "unique_strength", field.constraints().constraintStrength( QgsFieldConstraints::ConstraintUnique ) );
2023+
constraintElem.setAttribute( "notnull_strength", field.constraints().constraintStrength( QgsFieldConstraints::ConstraintNotNull ) );
2024+
constraintElem.setAttribute( "exp_strength", field.constraints().constraintStrength( QgsFieldConstraints::ConstraintExpression ) );
2025+
constraintsElem.appendChild( constraintElem );
2026+
}
2027+
node.appendChild( constraintsElem );
2028+
2029+
// constraint expressions
2030+
QDomElement constraintExpressionsElem = doc.createElement( "constraintExpressions" );
2031+
Q_FOREACH ( const QgsField& field, mFields )
2032+
{
2033+
QDomElement constraintExpressionElem = doc.createElement( "constraint" );
2034+
constraintExpressionElem.setAttribute( "field", field.name() );
2035+
constraintExpressionElem.setAttribute( "exp", field.constraints().constraintExpression() );
2036+
constraintExpressionElem.setAttribute( "desc", field.constraints().constraintDescription() );
2037+
constraintExpressionsElem.appendChild( constraintExpressionElem );
2038+
}
2039+
node.appendChild( constraintExpressionsElem );
2040+
20442041
// add attribute actions
20452042
mActions->writeXml( node );
20462043
mAttributeTableConfig.writeXml( node );

0 commit comments

Comments
 (0)
Please sign in to comment.