[QGIS Commit] r11289 - in branches/symbology-ng-branch: python/core
src/core
svn_qgis at osgeo.org
svn_qgis at osgeo.org
Fri Aug 7 06:45:47 EDT 2009
Author: wonder
Date: 2009-08-07 06:45:46 -0400 (Fri, 07 Aug 2009)
New Revision: 11289
Modified:
branches/symbology-ng-branch/python/core/qgsmaplayer.sip
branches/symbology-ng-branch/src/core/qgsmaplayer.cpp
branches/symbology-ng-branch/src/core/qgsmaplayer.h
Log:
Added support for custom properties in map layer (that are also saved in project). Useful mainly for plugins.
Modified: branches/symbology-ng-branch/python/core/qgsmaplayer.sip
===================================================================
--- branches/symbology-ng-branch/python/core/qgsmaplayer.sip 2009-08-06 18:04:06 UTC (rev 11288)
+++ branches/symbology-ng-branch/python/core/qgsmaplayer.sip 2009-08-07 10:45:46 UTC (rev 11289)
@@ -144,6 +144,16 @@
*/
bool writeXML(QDomNode & layer_node, QDomDocument & document) const;
+ /** Set a custom property for layer. Properties are stored in a map and saved in project file.
+ * @note Added in v1.3 */
+ void setCustomProperty( const QString& key, const QVariant& value );
+ /** Read a custom property from layer. Properties are stored in a map and saved in project file.
+ * @note Added in v1.3 */
+ QVariant customProperty( const QString& value, const QVariant& defaultValue = QVariant() ) const;
+ /** Remove a custom property from layer. Properties are stored in a map and saved in project file.
+ * @note Added in v1.3 */
+ void removeCustomProperty( const QString& key );
+
/** Read the symbology for the current layer from the Dom node supplied.
* @param QDomNode node that will contain the symbology definition for this layer.
* @param errorMessage reference to string that will be updated with any error messages
Modified: branches/symbology-ng-branch/src/core/qgsmaplayer.cpp
===================================================================
--- branches/symbology-ng-branch/src/core/qgsmaplayer.cpp 2009-08-06 18:04:06 UTC (rev 11288)
+++ branches/symbology-ng-branch/src/core/qgsmaplayer.cpp 2009-08-07 10:45:46 UTC (rev 11289)
@@ -239,6 +239,8 @@
setTransparency( myElement.text().toInt() );
}
+ readCustomProperties( layer_node );
+
return true;
} // void QgsMapLayer::readXML
@@ -323,6 +325,8 @@
layer_node.appendChild( maplayer );
+ writeCustomProperties( maplayer, document );
+
return writeXml( maplayer, document );
} // bool QgsMapLayer::writeXML
@@ -723,3 +727,59 @@
{
return &mUndoStack;
}
+
+
+
+void QgsMapLayer::setCustomProperty( const QString& key, const QVariant& value )
+{
+ mCustomProperties[key] = value;
+}
+
+QVariant QgsMapLayer::customProperty( const QString& value, const QVariant& defaultValue ) const
+{
+ return mCustomProperties.value(value, defaultValue);
+}
+
+void QgsMapLayer::removeCustomProperty( const QString& key )
+{
+ mCustomProperties.remove(key);
+}
+
+void QgsMapLayer::readCustomProperties( QDomNode & layerNode )
+{
+ QDomNode propsNode = layerNode.namedItem("customproperties");
+ if ( propsNode.isNull() ) // no properties stored...
+ return;
+
+ mCustomProperties.clear();
+
+ QDomNodeList nodes = propsNode.childNodes();
+
+ for ( int i = 0; i < nodes.size(); i++ )
+ {
+ QDomNode propNode = nodes.at( i );
+ if (propNode.isNull() || propNode.nodeName() != "property")
+ continue;
+ QDomElement propElement = propNode.toElement();
+
+ QString key = propElement.attribute( "key" );
+ QString value = propElement.attribute( "value" );
+ mCustomProperties[key] = QVariant(value);
+ }
+
+}
+
+void QgsMapLayer::writeCustomProperties( QDomNode & layerNode, QDomDocument & doc )
+{
+ QDomElement propsElement = doc.createElement( "customproperties" );
+
+ for ( QMap<QString, QVariant>::const_iterator it = mCustomProperties.begin(); it != mCustomProperties.end(); ++it )
+ {
+ QDomElement propElement = doc.createElement( "property" );
+ propElement.setAttribute( "key", it.key() );
+ propElement.setAttribute( "value", it.value().toString() );
+ propsElement.appendChild(propElement);
+ }
+
+ layerNode.appendChild(propsElement);
+}
Modified: branches/symbology-ng-branch/src/core/qgsmaplayer.h
===================================================================
--- branches/symbology-ng-branch/src/core/qgsmaplayer.h 2009-08-06 18:04:06 UTC (rev 11288)
+++ branches/symbology-ng-branch/src/core/qgsmaplayer.h 2009-08-07 10:45:46 UTC (rev 11289)
@@ -19,11 +19,10 @@
#ifndef QGSMAPLAYER_H
#define QGSMAPLAYER_H
-#include <vector>
-#include <map>
#include <QObject>
#include <QUndoStack>
+#include <QVariant>
#include "qgsrectangle.h"
@@ -155,6 +154,16 @@
*/
bool writeXML( QDomNode & layer_node, QDomDocument & document );
+ /** Set a custom property for layer. Properties are stored in a map and saved in project file.
+ * @note Added in v1.3 */
+ void setCustomProperty( const QString& key, const QVariant& value );
+ /** Read a custom property from layer. Properties are stored in a map and saved in project file.
+ * @note Added in v1.3 */
+ QVariant customProperty( const QString& value, const QVariant& defaultValue = QVariant() ) const;
+ /** Remove a custom property from layer. Properties are stored in a map and saved in project file.
+ * @note Added in v1.3 */
+ void removeCustomProperty( const QString& key );
+
/** Copies the symbology settings from another layer. Returns true in case of success */
virtual bool copySymbologySettings( const QgsMapLayer& other ) = 0;
@@ -315,6 +324,13 @@
*/
virtual bool writeXml( QDomNode & layer_node, QDomDocument & document );
+
+ /** Read custom properties from project file. Added in v1.3 */
+ void readCustomProperties( QDomNode & layerNode );
+
+ /** Write custom properties to project file. Added in v1.3 */
+ void writeCustomProperties( QDomNode & layerNode, QDomDocument & doc );
+
/** debugging member - invoked when a connect() is made to this object */
void connectNotify( const char * signal );
@@ -362,6 +378,7 @@
QUndoStack mUndoStack;
+ QMap<QString, QVariant> mCustomProperties;
};
#endif
More information about the QGIS-commit
mailing list