[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