[QGIS Commit] r15752 - in trunk/qgis/src/core: . raster

svn_qgis at osgeo.org svn_qgis at osgeo.org
Sun Apr 17 13:30:08 EDT 2011


Author: rblazek
Date: 2011-04-17 10:30:08 -0700 (Sun, 17 Apr 2011)
New Revision: 15752

Modified:
   trunk/qgis/src/core/qgsmaplayer.cpp
   trunk/qgis/src/core/qgsmaplayer.h
   trunk/qgis/src/core/raster/qgsrasterlayer.cpp
   trunk/qgis/src/core/raster/qgsrasterlayer.h
Log:
save timestamp in project file

Modified: trunk/qgis/src/core/qgsmaplayer.cpp
===================================================================
--- trunk/qgis/src/core/qgsmaplayer.cpp	2011-04-17 17:26:44 UTC (rev 15751)
+++ trunk/qgis/src/core/qgsmaplayer.cpp	2011-04-17 17:30:08 UTC (rev 15752)
@@ -340,6 +340,17 @@
 
   maplayer.appendChild( layerName );
 
+  // timestamp if supported
+  if ( timestamp() > QDateTime() )
+  {
+    QDomElement stamp = document.createElement( "timestamp" );
+    QDomText stampText = document.createTextNode( timestamp().toString( Qt::ISODate ) );
+    stamp.appendChild( stampText );
+    maplayer.appendChild( stamp );
+  }
+
+  maplayer.appendChild( layerName );
+
   // zorder
   // This is no longer stored in the project file. It is superfluous since the layers
   // are written and read in the proper order.

Modified: trunk/qgis/src/core/qgsmaplayer.h
===================================================================
--- trunk/qgis/src/core/qgsmaplayer.h	2011-04-17 17:26:44 UTC (rev 15751)
+++ trunk/qgis/src/core/qgsmaplayer.h	2011-04-17 17:30:08 UTC (rev 15752)
@@ -19,7 +19,7 @@
 #ifndef QGSMAPLAYER_H
 #define QGSMAPLAYER_H
 
-
+#include <QDateTime>
 #include <QObject>
 #include <QUndoStack>
 #include <QVariant>
@@ -95,7 +95,7 @@
     /** This is the method that does the actual work of
      * drawing the layer onto a paint device.
      * @param rendererContext describes the extents,
-     * resolution etc. that should be used when rendering the
+     * resolumon etc. that should be used when rendering the
      * layer.
      */
     virtual bool draw( QgsRenderContext& rendererContext );
@@ -332,6 +332,9 @@
      * added in 1.5 */
     void clearCacheImage();
 
+    /** Time stamp of data source in the moment when data/metadata were loaded by provider */
+    virtual QDateTime timestamp() const { return QDateTime() ; }
+
   signals:
 
     /** Emit a signal to notify of a progress event */

Modified: trunk/qgis/src/core/raster/qgsrasterlayer.cpp
===================================================================
--- trunk/qgis/src/core/raster/qgsrasterlayer.cpp	2011-04-17 17:26:44 UTC (rev 15751)
+++ trunk/qgis/src/core/raster/qgsrasterlayer.cpp	2011-04-17 17:30:08 UTC (rev 15752)
@@ -3257,9 +3257,8 @@
   QDomNode rpNode = layer_node.namedItem( "rasterproperties" );
 
   // Collect sublayer names and styles
-  QStringList layers;
-  QStringList styles;
-  QString format;
+  mLayers.clear();
+  mStyles.clear();
 
   if ( mProviderKey == "wms" )
   {
@@ -3269,20 +3268,21 @@
       // TODO: sublayer visibility - post-0.8 release timeframe
 
       // collect name for the sublayer
-      layers += layerElement.namedItem( "name" ).toElement().text();
+      mLayers += layerElement.namedItem( "name" ).toElement().text();
 
       // collect style for the sublayer
-      styles += layerElement.namedItem( "style" ).toElement().text();
+      mStyles += layerElement.namedItem( "style" ).toElement().text();
 
       layerElement = layerElement.nextSiblingElement( "wmsSublayer" );
     }
 
     // Collect format
-    format = rpNode.namedItem( "wmsFormat" ).toElement().text();
+    mFormat = rpNode.namedItem( "wmsFormat" ).toElement().text();
   }
 
+  mCrs = crs().authid();
   // Collect CRS
-  setDataProvider( mProviderKey, layers, styles, format, crs().authid() );
+  setDataProvider( mProviderKey, mLayers, mStyles, mFormat, mCrs );
 
   QString theError;
   bool res = readSymbology( layer_node, theError );
@@ -3299,6 +3299,21 @@
     mGrayBandName = bandName( 1 );
   }
 
+  // Check timestamp
+  QDomNode stampNode = layer_node.namedItem( "timestamp" );
+  if ( !stampNode.isNull() )
+  {
+    QDateTime stamp = QDateTime::fromString( stampNode.toElement().text(), Qt::ISODate );
+    // TODO: very bad, we have to load twice!!! Make QgsDataProvider::timestamp() static?
+    if ( stamp < mDataProvider->dataTimestamp() )
+    {
+      QgsDebugMsg( "data changed, reload provider" );
+      closeDataProvider();
+      init();
+      setDataProvider( mProviderKey, mLayers, mStyles, mFormat, mCrs );
+    }
+  }
+
   return res;
 } // QgsRasterLayer::readXml( QDomNode & layer_node )
 

Modified: trunk/qgis/src/core/raster/qgsrasterlayer.h
===================================================================
--- trunk/qgis/src/core/raster/qgsrasterlayer.h	2011-04-17 17:26:44 UTC (rev 15751)
+++ trunk/qgis/src/core/raster/qgsrasterlayer.h	2011-04-17 17:30:08 UTC (rev 15752)
@@ -658,6 +658,9 @@
      */
     virtual void setSubLayerVisibility( const QString & name, bool vis );
 
+    /** Time stamp of data source in the moment when data/metadata were loaded by provider */
+    virtual QDateTime timestamp() const { return mDataProvider->timestamp() ; }
+
   public slots:
     /** \brief Create GDAL pyramid overviews */
     QString buildPyramids( const RasterPyramidList &,



More information about the QGIS-commit mailing list