82
82
#include " qgssimplifymethod.h"
83
83
#include " qgsexpressioncontext.h"
84
84
#include " qgsfeedback.h"
85
+ #include " qgsconfigurationmap.h"
85
86
86
87
#include " diagram/qgsdiagram.h"
87
88
@@ -1742,20 +1743,20 @@ bool QgsVectorLayer::writeXml( QDomNode & layer_node,
1742
1743
} // bool QgsVectorLayer::writeXml
1743
1744
1744
1745
1745
- bool QgsVectorLayer::readSymbology ( const QDomNode& node , QString& errorMessage )
1746
+ bool QgsVectorLayer::readSymbology ( const QDomNode& layerNode , QString& errorMessage )
1746
1747
{
1747
1748
if ( !mExpressionFieldBuffer )
1748
1749
mExpressionFieldBuffer = new QgsExpressionFieldBuffer ();
1749
- mExpressionFieldBuffer ->readXml ( node );
1750
+ mExpressionFieldBuffer ->readXml ( layerNode );
1750
1751
1751
1752
updateFields ();
1752
1753
1753
- readStyle ( node , errorMessage );
1754
+ readStyle ( layerNode , errorMessage );
1754
1755
1755
- mDisplayExpression = node .namedItem ( QStringLiteral ( " previewExpression" ) ).toElement ().text ();
1756
- mMapTipTemplate = node .namedItem ( QStringLiteral ( " mapTip" ) ).toElement ().text ();
1756
+ mDisplayExpression = layerNode .namedItem ( QStringLiteral ( " previewExpression" ) ).toElement ().text ();
1757
+ mMapTipTemplate = layerNode .namedItem ( QStringLiteral ( " mapTip" ) ).toElement ().text ();
1757
1758
1758
- QString displayField = node .namedItem ( QStringLiteral ( " displayfield" ) ).toElement ().text ();
1759
+ QString displayField = layerNode .namedItem ( QStringLiteral ( " displayfield" ) ).toElement ().text ();
1759
1760
1760
1761
// Try to migrate pre QGIS 3.0 display field property
1761
1762
if ( mFields .lookupField ( displayField ) < 0 )
@@ -1771,17 +1772,17 @@ bool QgsVectorLayer::readSymbology( const QDomNode& node, QString& errorMessage
1771
1772
}
1772
1773
1773
1774
// process the attribute actions
1774
- mActions ->readXml ( node );
1775
+ mActions ->readXml ( layerNode );
1775
1776
1776
- QDomNode annotationFormNode = node .namedItem ( QStringLiteral ( " annotationform" ) );
1777
+ QDomNode annotationFormNode = layerNode .namedItem ( QStringLiteral ( " annotationform" ) );
1777
1778
if ( !annotationFormNode.isNull () )
1778
1779
{
1779
1780
QDomElement e = annotationFormNode.toElement ();
1780
1781
mAnnotationForm = QgsProject::instance ()->readPath ( e.text () );
1781
1782
}
1782
1783
1783
1784
mAttributeAliasMap .clear ();
1784
- QDomNode aliasesNode = node .namedItem ( QStringLiteral ( " aliases" ) );
1785
+ QDomNode aliasesNode = layerNode .namedItem ( QStringLiteral ( " aliases" ) );
1785
1786
if ( !aliasesNode.isNull () )
1786
1787
{
1787
1788
QDomElement aliasElem;
@@ -1811,7 +1812,7 @@ bool QgsVectorLayer::readSymbology( const QDomNode& node, QString& errorMessage
1811
1812
1812
1813
// Attributes excluded from WMS and WFS
1813
1814
mExcludeAttributesWMS .clear ();
1814
- QDomNode excludeWMSNode = node .namedItem ( QStringLiteral ( " excludeAttributesWMS" ) );
1815
+ QDomNode excludeWMSNode = layerNode .namedItem ( QStringLiteral ( " excludeAttributesWMS" ) );
1815
1816
if ( !excludeWMSNode.isNull () )
1816
1817
{
1817
1818
QDomNodeList attributeNodeList = excludeWMSNode.toElement ().elementsByTagName ( QStringLiteral ( " attribute" ) );
@@ -1822,7 +1823,7 @@ bool QgsVectorLayer::readSymbology( const QDomNode& node, QString& errorMessage
1822
1823
}
1823
1824
1824
1825
mExcludeAttributesWFS .clear ();
1825
- QDomNode excludeWFSNode = node .namedItem ( QStringLiteral ( " excludeAttributesWFS" ) );
1826
+ QDomNode excludeWFSNode = layerNode .namedItem ( QStringLiteral ( " excludeAttributesWFS" ) );
1826
1827
if ( !excludeWFSNode.isNull () )
1827
1828
{
1828
1829
QDomNodeList attributeNodeList = excludeWFSNode.toElement ().elementsByTagName ( QStringLiteral ( " attribute" ) );
@@ -1832,13 +1833,33 @@ bool QgsVectorLayer::readSymbology( const QDomNode& node, QString& errorMessage
1832
1833
}
1833
1834
}
1834
1835
1835
- mEditFormConfig .readXml ( node );
1836
+ // Load editor widget configuration
1837
+ QDomElement widgetsElem = layerNode.namedItem ( QStringLiteral ( " fieldConfiguration" ) ).toElement ();
1836
1838
1837
- mAttributeTableConfig . readXml ( node );
1839
+ QDomNodeList fieldConfigurationElementList = widgetsElem. elementsByTagName ( QStringLiteral ( " field " ) );
1838
1840
1839
- mConditionalStyles ->readXml ( node );
1841
+ for ( int i = 0 ; i < fieldConfigurationElementList.size (); ++i )
1842
+ {
1843
+ const QDomElement fieldConfigElement = fieldConfigurationElementList.at ( i ).toElement ();
1844
+ const QDomElement fieldWidgetElement = fieldConfigElement.elementsByTagName ( QStringLiteral ( " editWidget" ) ).at ( 0 ).toElement ();
1845
+
1846
+ QString fieldName = fieldConfigElement.attribute ( QStringLiteral ( " name" ) );
1847
+
1848
+ const QString widgetType = fieldWidgetElement.attribute ( QStringLiteral ( " type" ) );
1849
+ const QDomElement cfgElem = fieldConfigElement.elementsByTagName ( QStringLiteral ( " config" ) ).at ( 0 ).toElement ();
1850
+ QgsConfigurationMap editWidgetConfiguration;
1851
+ editWidgetConfiguration.fromXml ( cfgElem );
1852
+ QgsEditorWidgetSetup setup = QgsEditorWidgetSetup ( widgetType, editWidgetConfiguration.get () );
1853
+ mFieldWidgetSetups [fieldName] = setup;
1854
+ }
1840
1855
1841
- readCustomProperties ( node, QStringLiteral ( " variable" ) );
1856
+ mEditFormConfig .readXml ( layerNode );
1857
+
1858
+ mAttributeTableConfig .readXml ( layerNode );
1859
+
1860
+ mConditionalStyles ->readXml ( layerNode );
1861
+
1862
+ readCustomProperties ( layerNode, QStringLiteral ( " variable" ) );
1842
1863
1843
1864
return true ;
1844
1865
}
@@ -1956,19 +1977,14 @@ bool QgsVectorLayer::writeSymbology( QDomNode& node, QDomDocument& doc, QString&
1956
1977
{
1957
1978
( void )writeStyle ( node, doc, errorMessage );
1958
1979
1959
- <<<<<<< HEAD
1960
- // FIXME
1961
- // edittypes are written to the layerNode
1962
- // by slot QgsEditorWidgetRegistry::writeMapLayer()
1963
- // triggered by signal QgsProject::writeMapLayer()
1964
- // still other editing settings are written here,
1965
- // although they are not part of symbology either
1966
- =======
1980
+ QgsFields dataProviderFields = mDataProvider ->fields ();
1981
+
1967
1982
QDomElement fieldConfigurationElement = doc.createElement ( QStringLiteral ( " fieldConfiguration" ) );
1968
1983
1969
1984
int index = 0 ;
1970
1985
Q_FOREACH ( const QgsField& field, mFields )
1971
1986
{
1987
+
1972
1988
QDomElement fieldElement = doc.createElement ( QStringLiteral ( " field" ) );
1973
1989
fieldElement.setAttribute ( QStringLiteral ( " name" ), field.name () );
1974
1990
@@ -1980,7 +1996,6 @@ bool QgsVectorLayer::writeSymbology( QDomNode& node, QDomDocument& doc, QString&
1980
1996
QDomElement editWidgetElement = doc.createElement ( QStringLiteral ( " editWidget" ) );
1981
1997
fieldElement.appendChild ( editWidgetElement );
1982
1998
editWidgetElement.setAttribute ( " type" , field.editorWidgetSetup ().type () );
1983
-
1984
1999
QDomElement editWidgetConfigElement = doc.createElement ( QStringLiteral ( " config" ) );
1985
2000
1986
2001
QgsConfigurationMap ( widgetSetup.config () ).toXml ( editWidgetConfigElement );
@@ -1989,7 +2004,6 @@ bool QgsVectorLayer::writeSymbology( QDomNode& node, QDomDocument& doc, QString&
1989
2004
1990
2005
++index ;
1991
2006
}
1992
- >>>>>>> dc0c72f... Fixup
1993
2007
1994
2008
QDomElement afField = doc.createElement ( QStringLiteral ( " annotationform" ) );
1995
2009
QDomText afText = doc.createTextNode ( QgsProject::instance ()->writePath ( mAnnotationForm ) );
@@ -3056,6 +3070,16 @@ void QgsVectorLayer::updateFields()
3056
3070
mFields [ index ].setConstraints ( constraints );
3057
3071
}
3058
3072
3073
+ auto fieldWidgetIterator = mFieldWidgetSetups .constBegin ();
3074
+ for ( ; fieldWidgetIterator != mFieldWidgetSetups .constEnd (); ++ fieldWidgetIterator )
3075
+ {
3076
+ int index = mFields .indexOf ( fieldWidgetIterator.key () );
3077
+ if ( index < 0 )
3078
+ continue ;
3079
+
3080
+ mFields [index ].setEditorWidgetSetup ( fieldWidgetIterator.value () );
3081
+ }
3082
+
3059
3083
if ( oldFields != mFields )
3060
3084
{
3061
3085
emit updatedFields ();
0 commit comments