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

svn_qgis at osgeo.org svn_qgis at osgeo.org
Sat Apr 16 15:03:21 EDT 2011


Author: rblazek
Date: 2011-04-16 12:03:21 -0700 (Sat, 16 Apr 2011)
New Revision: 15735

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:
raster layer update - first step

Modified: trunk/qgis/src/app/qgsrasterlayerproperties.cpp
===================================================================
--- trunk/qgis/src/app/qgsrasterlayerproperties.cpp	2011-04-16 18:48:02 UTC (rev 15734)
+++ trunk/qgis/src/app/qgsrasterlayerproperties.cpp	2011-04-16 19:03:21 UTC (rev 15735)
@@ -92,6 +92,8 @@
   connect( leBlueMax, SIGNAL( textEdited( QString ) ), this, SLOT( userDefinedMinMax_textEdited( QString ) ) );
   connect( mColormapTreeWidget, SIGNAL( itemDoubleClicked( QTreeWidgetItem*, int ) ), this, SLOT( handleColormapTreeWidgetDoubleClick( QTreeWidgetItem*, int ) ) );
 
+  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' ) );
@@ -3033,3 +3035,8 @@
     leNoDataValue->clear();
   }
 }
+
+void QgsRasterLayerProperties::dataChanged( int change )
+{
+  QgsDebugMsg( "entered." );
+}
\ No newline at end of file

Modified: trunk/qgis/src/app/qgsrasterlayerproperties.h
===================================================================
--- trunk/qgis/src/app/qgsrasterlayerproperties.h	2011-04-16 18:48:02 UTC (rev 15734)
+++ trunk/qgis/src/app/qgsrasterlayerproperties.h	2011-04-16 19:03:21 UTC (rev 15735)
@@ -99,6 +99,9 @@
     /** \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-16 18:48:02 UTC (rev 15734)
+++ trunk/qgis/src/core/qgsdataprovider.h	2011-04-16 19:03:21 UTC (rev 15735)
@@ -17,7 +17,7 @@
 #ifndef QQGSDATAPROVIDER_H
 #define QQGSDATAPROVIDER_H
 
-
+#include <QDateTime>
 #include <QObject>
 #include <QString>
 #include <QStringList>
@@ -271,6 +271,15 @@
       synchronize with changes in the data source*/
     virtual void reloadData() {}
 
+    /** 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(); }
+
+    /** test if at least one of specified data/metadata changed since provider was loaded */
+    virtual bool changed( int change ) { return false; }
+
   signals:
 
     /**
@@ -287,6 +296,13 @@
      */
     void dataChanged();
 
+    /**
+     *   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 );
+
   private:
 
     /**
@@ -295,6 +311,10 @@
      */
     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-16 18:48:02 UTC (rev 15734)
+++ trunk/qgis/src/core/qgsrasterdataprovider.h	2011-04-16 19:03:21 UTC (rev 15735)
@@ -21,6 +21,8 @@
 #ifndef QGSRASTERDATAPROVIDER_H
 #define QGSRASTERDATAPROVIDER_H
 
+#include <QDateTime>
+
 #include "qgslogger.h"
 #include "qgsrectangle.h"
 #include "qgsdataprovider.h"
@@ -114,6 +116,17 @@
       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 );
@@ -467,11 +480,24 @@
     /** \brief Set null value in char */
     QByteArray noValueBytes( int theBandNo );
 
+    /** 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-16 18:48:02 UTC (rev 15734)
+++ trunk/qgis/src/core/raster/qgsrasterlayer.cpp	2011-04-16 19:03:21 UTC (rev 15735)
@@ -2479,7 +2479,7 @@
     // read standard deviations
     if ( mContrastEnhancementAlgorithm == QgsContrastEnhancement::StretchToMinimumMaximum )
     {
-      setStandardDeviations( myQSettings.value( "/Raster/defaultStandardDeviation", 1.0  ).toInt() );
+      setStandardDeviations( myQSettings.value( "/Raster/defaultStandardDeviation", 1.0 ).toInt() );
     }
   }
   // Debug
@@ -4414,18 +4414,41 @@
 bool QgsRasterLayer::update()
 {
   QgsDebugMsg( "entered." );
-
-  if ( mLastModified < QgsRasterLayer::lastModified( source() ) )
+  // 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 )
   {
-    // TODO: lastModified to provider -> outdated
-    // TODO: check what has to be cleard, rebuild
-    mHasPyramids = false;
-    mPyramidList.clear();
+    QgsDebugMsg( "reload data" );
+    //mHasPyramids = false;
+    //mPyramidList.clear();
 
-    mRasterStatsList.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 );
   }
-  return true;
+  return mValid;
 }
 
 bool QgsRasterLayer::usesProvider()

Modified: trunk/qgis/src/core/raster/qgsrasterlayer.h
===================================================================
--- trunk/qgis/src/core/raster/qgsrasterlayer.h	2011-04-16 18:48:02 UTC (rev 15734)
+++ trunk/qgis/src/core/raster/qgsrasterlayer.h	2011-04-16 19:03:21 UTC (rev 15735)
@@ -681,6 +681,13 @@
     /** \brief Signal for notifying listeners of long running processes */
     void progressUpdate( int theValue );
 
+    /**
+     *   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 );
+
   protected:
 
     /** \brief Read the symbology for the current layer from the Dom node supplied */

Modified: trunk/qgis/src/providers/grass/qgsgrassrasterprovider.cpp
===================================================================
--- trunk/qgis/src/providers/grass/qgsgrassrasterprovider.cpp	2011-04-16 18:48:02 UTC (rev 15734)
+++ trunk/qgis/src/providers/grass/qgsgrassrasterprovider.cpp	2011-04-16 19:03:21 UTC (rev 15735)
@@ -275,6 +275,7 @@
 
 QList<QgsColorRampShader::ColorRampItem> QgsGrassRasterProvider::colorTable( int bandNo )const
 {
+  QgsDebugMsg( "Entered" );
   QList<QgsColorRampShader::ColorRampItem> ct;
 
   // TODO: check if color can be realy discontinuous in GRASS,
@@ -484,6 +485,18 @@
   return PROVIDER_DESCRIPTION;
 }
 
+int QgsGrassRasterProvider::changed()
+{
+  QgsDebugMsg( "Entered" );
+  // TODO
+  return  ValuesChange | ExtentChange | CrsChange | DataTypeChange | ColorTableChange | SizeChange;
+}
+
+bool QgsGrassRasterProvider::reload()
+{
+  QgsDebugMsg( "Entered" );
+  return true;
+}
 //void QgsGrassRasterProvider::buildSupportedRasterFileFilter( QString & theFileFiltersString )
 //{
 //}

Modified: trunk/qgis/src/providers/grass/qgsgrassrasterprovider.h
===================================================================
--- trunk/qgis/src/providers/grass/qgsgrassrasterprovider.h	2011-04-16 18:48:02 UTC (rev 15734)
+++ trunk/qgis/src/providers/grass/qgsgrassrasterprovider.h	2011-04-16 19:03:21 UTC (rev 15735)
@@ -244,7 +244,8 @@
                             bool theThoroughBandScanFlag = false
                           );
 
-
+    int changed( );
+    bool reload( );
   private:
 
     /**



More information about the QGIS-commit mailing list