[QGIS Commit] r15749 - in trunk/qgis/src: app core core/raster providers/grass

svn_qgis at osgeo.org svn_qgis at osgeo.org
Sun Apr 17 11:13:18 EDT 2011


Author: rblazek
Date: 2011-04-17 08:13:18 -0700 (Sun, 17 Apr 2011)
New Revision: 15749

Modified:
   trunk/qgis/src/app/qgsrasterlayerproperties.cpp
   trunk/qgis/src/app/qgsrasterlayerproperties.h
   trunk/qgis/src/core/qgsdataprovider.h
   trunk/qgis/src/core/qgsrasterdataprovider.h
   trunk/qgis/src/core/raster/qgsrasterlayer.cpp
   trunk/qgis/src/core/raster/qgsrasterlayer.h
   trunk/qgis/src/providers/grass/qgsgrassrasterprovider.cpp
   trunk/qgis/src/providers/grass/qgsgrassrasterprovider.h
Log:
completely reload provider if GRASS source data have changed

Modified: trunk/qgis/src/app/qgsrasterlayerproperties.cpp
===================================================================
--- trunk/qgis/src/app/qgsrasterlayerproperties.cpp	2011-04-17 14:00:45 UTC (rev 15748)
+++ trunk/qgis/src/app/qgsrasterlayerproperties.cpp	2011-04-17 15:13:18 UTC (rev 15749)
@@ -94,8 +94,6 @@
   // enable or disable Build Pyramids button depending on selection in pyramid list
   connect( lbxPyramidResolutions, SIGNAL( itemSelectionChanged() ), this, SLOT( toggleBuildPyramidsButton() ) );
 
-  connect( mRasterLayer, SIGNAL( dataChanged( int ) ), this, SLOT( dataChanged( int ) ) );
-
   // set up the scale based layer visibility stuff....
   chkUseScaleDependentRendering->setChecked( lyr->hasScaleBasedVisibility() );
   leMinimumScale->setText( QString::number( lyr->minimumScale(), 'f' ) );
@@ -3040,11 +3038,6 @@
   }
 }
 
-void QgsRasterLayerProperties::dataChanged( int change )
-{
-  QgsDebugMsg( "entered." );
-}
-
 void QgsRasterLayerProperties::toggleBuildPyramidsButton()
 {
   if ( lbxPyramidResolutions->selectedItems().empty() )

Modified: trunk/qgis/src/app/qgsrasterlayerproperties.h
===================================================================
--- trunk/qgis/src/app/qgsrasterlayerproperties.h	2011-04-17 14:00:45 UTC (rev 15748)
+++ trunk/qgis/src/app/qgsrasterlayerproperties.h	2011-04-17 15:13:18 UTC (rev 15749)
@@ -99,9 +99,6 @@
     /** \brief this slot sets StdDev switch box to 0.00 when user enters min max values */
     void userDefinedMinMax_textEdited( QString );
 
-    /** \brief data changed reciever */
-    void dataChanged( int change );
-
   private slots:
     /** This slow handles necessary interface modifications (i.e. loading min max values) */
     void on_cboBlue_currentIndexChanged( const QString& );

Modified: trunk/qgis/src/core/qgsdataprovider.h
===================================================================
--- trunk/qgis/src/core/qgsdataprovider.h	2011-04-17 14:00:45 UTC (rev 15748)
+++ trunk/qgis/src/core/qgsdataprovider.h	2011-04-17 15:13:18 UTC (rev 15749)
@@ -287,9 +287,6 @@
     /** Current time stamp of data source */
     virtual QDateTime dataTimestamp() const { return QDateTime(); }
 
-    /** test if at least one of specified data/metadata changed since provider was loaded */
-    virtual bool changed( int change ) { return false; }
-
   signals:
 
     /**
@@ -313,6 +310,11 @@
      */
     void dataChanged( int change );
 
+  protected:
+    /**
+    * Timestamp of data in the moment when the data were loaded by provider.
+    */
+    QDateTime mTimestamp;
   private:
 
     /**
@@ -320,11 +322,6 @@
      * This could be a file, database, or server address.
      */
     QString mDataSourceURI;
-
-    /**
-     * Timestamp of data in the moment when the data were loaded by provider.
-     */
-    QDateTime mTimestamp;
 };
 
 

Modified: trunk/qgis/src/core/qgsrasterdataprovider.h
===================================================================
--- trunk/qgis/src/core/qgsrasterdataprovider.h	2011-04-17 14:00:45 UTC (rev 15748)
+++ trunk/qgis/src/core/qgsrasterdataprovider.h	2011-04-17 15:13:18 UTC (rev 15749)
@@ -116,17 +116,6 @@
       ProgressPyramids  = 1
     };
 
-    enum Change
-    {
-      NoChange   =  0,
-      ValuesChange      =  1,
-      ExtentChange    = 1 << 1,
-      CrsChange    = 1 << 2,
-      DataTypeChange    = 1 << 3,
-      ColorTableChange  = 1 << 4,
-      SizeChange  = 1 << 5
-    };
-
     QgsRasterDataProvider();
 
     QgsRasterDataProvider( QString const & uri );
@@ -480,24 +469,17 @@
     /** \brief Set null value in char */
     QByteArray noValueBytes( int theBandNo );
 
+    /** Time stamp of data source in the moment when data/metadata were loaded by provider */
+    virtual QDateTime timestamp() const { return mTimestamp; }
+
     /** Current time stamp of data source */
     virtual QDateTime dataTimestamp() const { return QDateTime(); }
 
-    /** Give list of changed data/metadata since provider was loaded */
-    virtual int changed( ) { return NoChange; }
-
   signals:
     /** Emit a signal to notify of the progress event.
       * Emited theProgress is in percents (0.0-100.0) */
     void progress( int theType, double theProgress, QString theMessage );
 
-    /**
-     *   This is emitted whenever data or metadata (e.g. color table, extent) has changed
-     *   @param changed binary combination of changes
-     *   @note added in 1.7
-     */
-    void dataChanged( int change );
-
   protected:
     /**Dots per intch. Extended WMS (e.g. QGIS mapserver) support DPI dependent output and therefore
     are suited for printing. A value of -1 means it has not been set

Modified: trunk/qgis/src/core/raster/qgsrasterlayer.cpp
===================================================================
--- trunk/qgis/src/core/raster/qgsrasterlayer.cpp	2011-04-17 14:00:45 UTC (rev 15748)
+++ trunk/qgis/src/core/raster/qgsrasterlayer.cpp	2011-04-17 15:13:18 UTC (rev 15749)
@@ -127,6 +127,10 @@
     , mInvertColor( false )
     , mModified( false )
     , mProviderKey( providerKey )
+    , mLayers( layers )
+    , mStyles( styles )
+    , mFormat( format )
+    , mCrs( crs )
 {
   QgsDebugMsg( "(8 arguments) starting. with layer list of " +
                layers.join( ", " ) +  " and style list of " + styles.join( ", " ) + " and format of " +
@@ -2531,6 +2535,21 @@
   QgsDebugMsg( "exiting." );
 } // QgsRasterLayer::setDataProvider
 
+void QgsRasterLayer::closeDataProvider()
+{
+  mValid = false;
+  delete mRasterShader;
+  mRasterShader = 0;
+  delete mDataProvider;
+  mDataProvider = 0;
+
+  mRasterStatsList.clear();
+  mContrastEnhancementList.clear();
+
+  mHasPyramids = false;
+  mPyramidList.clear();
+}
+
 void QgsRasterLayer::setColorShadingAlgorithm( ColorShadingAlgorithm theShadingAlgorithm )
 {
   QgsDebugMsg( "called with [" + QString::number( theShadingAlgorithm ) + "]" );
@@ -4436,38 +4455,13 @@
   QgsDebugMsg( "entered." );
 
   // Check if data changed
-  //if ( mLastModified < QgsRasterLayer::lastModified( source() ) )
-  //{
-  // TODO: lastModified to provider -> outdated
-  // TODO: check what has to be cleard, rebuild
-  int change = mDataProvider->changed();
-  if ( change != QgsRasterDataProvider::NoChange )
+  if ( mDataProvider->dataTimestamp() > mDataProvider->timestamp() )
   {
     QgsDebugMsg( "reload data" );
-    //mHasPyramids = false;
-    //mPyramidList.clear();
-
-    //mRasterStatsList.clear();
-    mValid = mDataProvider->reload();
-
-    for ( int i = 1; i <= mBandCount; i++ )
-    {
-      // TODO : refresh all data, move to separate method from constructor
-      // Reload color table
-      if ( i - 1 < mRasterStatsList.size() )
-      {
-        QList<QgsColorRampShader::ColorRampItem> ct;
-        ct = mDataProvider->colorTable( i );
-
-        mRasterStatsList[i-1].colorTable = ct;
-        if ( mRasterType == Palette )
-        {
-          QgsColorRampShader* myColorRampShader = ( QgsColorRampShader* ) mRasterShader->rasterShaderFunction();
-          myColorRampShader->setColorRampItemList( *colorTable( 1 ) );
-        }
-      }
-    }
-    emit dataChanged( change );
+    closeDataProvider();
+    init();
+    setDataProvider( mProviderKey, mLayers, mStyles, mFormat, mCrs );
+    emit dataChanged();
   }
   return mValid;
 }

Modified: trunk/qgis/src/core/raster/qgsrasterlayer.h
===================================================================
--- trunk/qgis/src/core/raster/qgsrasterlayer.h	2011-04-17 14:00:45 UTC (rev 15748)
+++ trunk/qgis/src/core/raster/qgsrasterlayer.h	2011-04-17 15:13:18 UTC (rev 15749)
@@ -685,10 +685,9 @@
 
     /**
      *   This is emitted whenever data or metadata (e.g. color table, extent) has changed
-     *   @param changed binary combination of changes, defined in QgsRasterDataProvider
      *   @note added in 1.7
      */
-    void dataChanged( int change );
+    void dataChanged();
 
   protected:
 
@@ -767,8 +766,8 @@
                                     const QgsMapToPixel* theQgsMapToPixel,
                                     int theBandNoInt );
 
-    /** \brief Close data set and release related data */
-    void closeDataset();
+    /** \brief Close data provider and clear related members */
+    void closeDataProvider();
 
     /** \brief helper function to create zero padded band names */
     QString  generateBandName( int );
@@ -913,6 +912,13 @@
 
     /** \brief Flag indicating if the nodatavalue is valid*/
     bool mValidNoDataValue;
+
+    /** WMS parameters */
+    /* TODO: put everything to URI */
+    QStringList mLayers;
+    QStringList mStyles;
+    QString mFormat;
+    QString mCrs;
 };
 
 /*#include <QColor>

Modified: trunk/qgis/src/providers/grass/qgsgrassrasterprovider.cpp
===================================================================
--- trunk/qgis/src/providers/grass/qgsgrassrasterprovider.cpp	2011-04-17 14:00:45 UTC (rev 15748)
+++ trunk/qgis/src/providers/grass/qgsgrassrasterprovider.cpp	2011-04-17 15:13:18 UTC (rev 15749)
@@ -74,6 +74,8 @@
   QgsDebugMsg( QString( "mapset: %1" ).arg( mMapset ) );
   QgsDebugMsg( QString( "mapName: %1" ).arg( mMapName ) );
 
+  mTimestamp = dataTimestamp();
+
   mRasterValue.start( mGisdbase, mLocation, mMapset, mMapName );
   mValidNoDataValue = true;
 
@@ -485,22 +487,25 @@
   return PROVIDER_DESCRIPTION;
 }
 
-int QgsGrassRasterProvider::changed()
+QDateTime QgsGrassRasterProvider::dataTimestamp() const
 {
-  QgsDebugMsg( "Entered" );
-  // TODO
-  return  ValuesChange | ExtentChange | CrsChange | DataTypeChange | ColorTableChange | SizeChange;
+  QDateTime time;
+  QString mapset = mGisdbase + "/" + mLocation + "/" + mMapset;
+  QStringList dirs;
+  dirs << "cell" << "colr";
+  foreach( QString dir, dirs )
+  {
+    QString path = mapset + "/" + dir + "/" + mMapName;
+    QFileInfo fi( path );
+    if ( fi.exists() && fi.lastModified() > time )
+    {
+      time = fi.lastModified();
+    }
+  }
+  QgsDebugMsg( "timestamp = " + time.toString() );
+  return time;
 }
 
-bool QgsGrassRasterProvider::reload()
-{
-  QgsDebugMsg( "Entered" );
-  return true;
-}
-//void QgsGrassRasterProvider::buildSupportedRasterFileFilter( QString & theFileFiltersString )
-//{
-//}
-
 /**
  * Class factory to return a pointer to a newly created
  * QgsGrassRasterProvider object
@@ -552,7 +557,14 @@
 }
 QgsGrassRasterValue::~QgsGrassRasterValue()
 {
-  if ( mProcess ) delete mProcess;
+  if ( mProcess )
+  {
+    QgsDebugMsg( "closing process" );
+    mProcess->closeWriteChannel();
+    mProcess->waitForFinished();
+    QgsDebugMsg( "process finished" );
+    delete mProcess;
+  }
 }
 
 QString QgsGrassRasterValue::value( double x, double y )

Modified: trunk/qgis/src/providers/grass/qgsgrassrasterprovider.h
===================================================================
--- trunk/qgis/src/providers/grass/qgsgrassrasterprovider.h	2011-04-17 14:00:45 UTC (rev 15748)
+++ trunk/qgis/src/providers/grass/qgsgrassrasterprovider.h	2011-04-17 15:13:18 UTC (rev 15749)
@@ -244,8 +244,7 @@
                             bool theThoroughBandScanFlag = false
                           );
 
-    int changed( );
-    bool reload( );
+    virtual QDateTime dataTimestamp() const;
   private:
 
     /**



More information about the QGIS-commit mailing list