diff --git a/python/core/qgsrasterlayer.sip b/python/core/qgsrasterlayer.sip index 6fda4bcef218..82a17b0570e4 100644 --- a/python/core/qgsrasterlayer.sip +++ b/python/core/qgsrasterlayer.sip @@ -207,14 +207,6 @@ public: /** \brief Mutator for transparent band name mapping. */ void setTransparentBandName(const QString & theBandNameQString); - // - // Accessor and mutator for transparent band name - // - /** \brief Accessor for transparent band name mapping. */ - QString getTransparentLayerName(); - - /** \brief Mutator for transparent band name mapping. */ - void setTransparentLayerName(const QString & theLayerNameQString); // // Accessor and mutator for gray band name @@ -450,13 +442,13 @@ public: /** \brief Mutator for mUserDefinedRGBMinMaxFlag */ void setUserDefinedRGBMinMax(bool theBool); - /** \brief Accessor for userDefinedMinMax. */ + /** \brief Accessor for mUserDefinedRGBMinMaxFlag. */ bool getUserDefinedRGBMinMax(); - /** \brief Mutator for mUserDefinedRGBMinMaxFlag */ + /** \brief Mutator for mUserDefinedGrayMinMaxFlag */ void setUserDefinedGrayMinMax(bool theBool); - /** \brief Accessor for userDefinedMinMax. */ + /** \brief Accessor for mUserDefinedGrayMinMaxFlag. */ bool getUserDefinedGrayMinMax(); public slots: diff --git a/src/app/qgsrasterlayerproperties.cpp b/src/app/qgsrasterlayerproperties.cpp index 88caebbe5a0f..33c76e1c5ce7 100644 --- a/src/app/qgsrasterlayerproperties.cpp +++ b/src/app/qgsrasterlayerproperties.cpp @@ -56,7 +56,9 @@ QgsRasterLayerProperties::QgsRasterLayerProperties(QgsMapLayer *lyr, QWidget *pa TRSTRING_NOT_SET( tr("Not Set")) { ignoreSpinBoxEvent = false; //Short circuit signal loop between min max field and stdDev spin box - + mGrayActualMinimumMaximum = false; + mRGBActualMinimumMaximum = false; + if (mRasterLayer->getDataProvider() == 0) { // This is a GDAL-based layer @@ -277,16 +279,6 @@ QgsRasterLayerProperties::QgsRasterLayerProperties(QgsMapLayer *lyr, QWidget *pa } cboxTransparencyBand->addItem(TRSTRING_NOT_SET); - cboxTransparencyLayer->addItem(TRSTRING_NOT_SET); - QMap myLayers = QgsMapLayerRegistry::instance()->mapLayers(); - QMap::iterator it; - for(it = myLayers.begin(); it != myLayers.end(); it++) - { - if(QgsMapLayer::RASTER == it.value()->type()) - { - cboxTransparencyLayer->addItem(it.value()->name()); - } - } QString myThemePath = QgsApplication::themePath(); QPixmap myPyramidPixmap(myThemePath + "/mIconPyramid.png"); @@ -438,6 +430,29 @@ void QgsRasterLayerProperties::populateTransparencyTable() tableTransparency->resizeRowsToContents(); } +/** Set the message indicating if any min max values are estimates */ +void QgsRasterLayerProperties::setMinimumMaximumEstimateWarning() +{ + bool myActualComputedValues = false; + if(rbtnThreeBand->isChecked()) + { + myActualComputedValues = mRGBActualMinimumMaximum; + } + else + { + myActualComputedValues = mGrayActualMinimumMaximum; + } + + if(myActualComputedValues) + { + lblMinMaxEstimateWarning->setText("Note: Minimum Maximum values are actual values computed from the band(s)"); + } + else + { + lblMinMaxEstimateWarning->setText("Note: Minimum Maximum values are estimates or user defined"); + } +} + /** @note moved from ctor @@ -584,24 +599,24 @@ void QgsRasterLayerProperties::sync() { if(mRasterLayer->getColorShadingAlgorithm()==QgsRasterLayer::PSEUDO_COLOR) { - cboxColorMap->setCurrentText(tr("Pseudocolor")); + cboxColorMap->setCurrentIndex(cboxColorMap->findText(tr("Pseudocolor"))); } else if(mRasterLayer->getColorShadingAlgorithm()==QgsRasterLayer::FREAK_OUT) { - cboxColorMap->setCurrentText(tr("Freak Out")); + cboxColorMap->setCurrentIndex(cboxColorMap->findText(tr("Freak Out"))); } else if(mRasterLayer->getColorShadingAlgorithm()==QgsRasterLayer::COLOR_RAMP) { - cboxColorMap->setCurrentText(tr("Custom Colormap")); + cboxColorMap->setCurrentIndex(cboxColorMap->findText(tr("Custom Colormap"))); } else if(mRasterLayer->getColorShadingAlgorithm()==QgsRasterLayer::USER_DEFINED) { - cboxColorMap->setCurrentText(tr("User Defined")); + cboxColorMap->setCurrentIndex(cboxColorMap->findText(tr("User Defined"))); } } else { - cboxColorMap->setCurrentText(tr("Grayscale")); + cboxColorMap->setCurrentIndex(cboxColorMap->findText(tr("Grayscale"))); } //set whether the layer histogram should be inverted @@ -615,14 +630,15 @@ void QgsRasterLayerProperties::sync() } //set the combos to the correct values - cboRed->setCurrentText(mRasterLayer->getRedBandName()); - cboGreen->setCurrentText(mRasterLayer->getGreenBandName()); - cboBlue->setCurrentText(mRasterLayer->getBlueBandName()); - cboGray->setCurrentText(mRasterLayer->getGrayBandName()); + cboRed->setCurrentIndex(cboRed->findText(mRasterLayer->getRedBandName())); + cboGreen->setCurrentIndex(cboGreen->findText(mRasterLayer->getGreenBandName())); + cboBlue->setCurrentIndex(cboBlue->findText(mRasterLayer->getBlueBandName())); + cboGray->setCurrentIndex(cboGray->findText(mRasterLayer->getGrayBandName())); //set the stdDevs and min max values if(mRasterLayerIsGdal && rbtnThreeBand->isChecked()) { + mRGBActualMinimumMaximum = mRasterLayer->getActualRGBMinMaxFlag(); if(mRasterLayer->getUserDefinedRGBMinMax()) { sboxThreeBandStdDev->setValue(0.0); @@ -656,10 +672,12 @@ void QgsRasterLayerProperties::sync() leBlueMin->setText(QString::number(mRasterLayer->getMinimumValue(mRasterLayer->getBlueBandName()))); leBlueMax->setText(QString::number(mRasterLayer->getMaximumValue(mRasterLayer->getBlueBandName()))); } + setMinimumMaximumEstimateWarning(); } } else if(mRasterLayerIsGdal) { + mGrayActualMinimumMaximum = mRasterLayer->getActualGrayMinMaxFlag(); if(mRasterLayer->getUserDefinedGrayMinMax()) { sboxSingleBandStdDev->setValue(0.0); @@ -684,29 +702,29 @@ void QgsRasterLayerProperties::sync() leGrayMax->setText(QString::number(mRasterLayer->getMaximumValue(mRasterLayer->getGrayBandName()))); } } - + setMinimumMaximumEstimateWarning(); } //set color scaling algorithm if(QgsContrastEnhancement::STRETCH_TO_MINMAX == mRasterLayer->getContrastEnhancementAlgorithm()) { - cboxContrastEnhancementAlgorithm->setCurrentText(tr("Stretch To MinMax")); + cboxContrastEnhancementAlgorithm->setCurrentIndex(cboxContrastEnhancementAlgorithm->findText(tr("Stretch To MinMax"))); } else if(QgsContrastEnhancement::STRETCH_AND_CLIP_TO_MINMAX == mRasterLayer->getContrastEnhancementAlgorithm()) { - cboxContrastEnhancementAlgorithm->setCurrentText(tr("Stretch And Clip To MinMax")); + cboxContrastEnhancementAlgorithm->setCurrentIndex(cboxContrastEnhancementAlgorithm->findText(tr("Stretch And Clip To MinMax"))); } else if(QgsContrastEnhancement::CLIP_TO_MINMAX == mRasterLayer->getContrastEnhancementAlgorithm()) { - cboxContrastEnhancementAlgorithm->setCurrentText(tr("Clip To MinMax")); + cboxContrastEnhancementAlgorithm->setCurrentIndex(cboxContrastEnhancementAlgorithm->findText(tr("Clip To MinMax"))); } else if(QgsContrastEnhancement::USER_DEFINED == mRasterLayer->getContrastEnhancementAlgorithm()) { - cboxContrastEnhancementAlgorithm->setCurrentText(tr("User Defined")); + cboxContrastEnhancementAlgorithm->setCurrentIndex(cboxContrastEnhancementAlgorithm->findText(tr("User Defined"))); } else { - cboxContrastEnhancementAlgorithm->setCurrentText(tr("No Scaling")); + cboxContrastEnhancementAlgorithm->setCurrentIndex(cboxContrastEnhancementAlgorithm->findText(tr("No Stretch"))); } //Display the current default contrast enhancement algorithm @@ -714,7 +732,7 @@ void QgsRasterLayerProperties::sync() QString myDefaultAlgorithm = myQSettings.value("/Raster/defaultContrastEnhancementAlgorithm", "NO_STRETCH").toString(); if(myDefaultAlgorithm == "NO_STRETCH") { - labelDefaultContrastEnhancementAlgorithm->setText(tr("No Scaling")); + labelDefaultContrastEnhancementAlgorithm->setText(tr("No Stretch")); } if(myDefaultAlgorithm == "STRETCH_TO_MINMAX") { @@ -730,7 +748,7 @@ void QgsRasterLayerProperties::sync() } else { - labelDefaultContrastEnhancementAlgorithm->setText(tr("No Scaling")); + labelDefaultContrastEnhancementAlgorithm->setText(tr("No Stretch")); } @@ -746,18 +764,8 @@ void QgsRasterLayerProperties::sync() sliderTransparency->setValue(255 - mRasterLayer->getTransparency()); //update the transparency percentage label sliderTransparency_valueChanged(255 - mRasterLayer->getTransparency()); - - int myIndex = cboxTransparencyLayer->findText(mRasterLayer->getTransparentLayerName()); - if(-1 != myIndex) - { - cboxTransparencyLayer->setCurrentIndex(myIndex); - } - else - { - cboxTransparencyLayer->setCurrentIndex(cboxTransparencyLayer->findText(TRSTRING_NOT_SET)); - } - myIndex = cboxTransparencyBand->findText(mRasterLayer->getTransparentBandName()); + int myIndex = cboxTransparencyBand->findText(mRasterLayer->getTransparentBandName()); if(-1 != myIndex) { cboxTransparencyBand->setCurrentIndex(myIndex); @@ -1085,7 +1093,6 @@ void QgsRasterLayerProperties::apply() mRasterLayer->setBlueBandName(cboBlue->currentText()); mRasterLayer->setGrayBandName(cboGray->currentText()); mRasterLayer->setTransparentBandName(cboxTransparencyBand->currentText()); - mRasterLayer->setTransparentLayerName(cboxTransparencyLayer->currentText()); //set the appropriate color shading type //If USER_DEFINED do nothing, user defined can only be set programatically @@ -1133,6 +1140,7 @@ void QgsRasterLayerProperties::apply() //Set min max based on user defined values if all are set and stdDev is 0.0 if(rbtnThreeBandMinMax->isEnabled() && rbtnThreeBandMinMax->isChecked() && validUserDefinedMinMax()) { + mRasterLayer->setActualRGBMinMaxFlag(mRGBActualMinimumMaximum); if(mRasterLayer->getRedBandName() != TRSTRING_NOT_SET) { mRasterLayer->setMinimumValue(cboRed->currentText(), leRedMin->text().toDouble(), false); @@ -1167,6 +1175,7 @@ void QgsRasterLayerProperties::apply() //Set min max based on user defined values if all are set and stdDev is 0.0 if(rbtnSingleBandMinMax->isEnabled() && rbtnSingleBandMinMax->isChecked() && validUserDefinedMinMax()) { + mRasterLayer->setActualGrayMinMaxFlag(mGrayActualMinimumMaximum); if(mRasterLayer->getGrayBandName() != TRSTRING_NOT_SET) { mRasterLayer->setMinimumValue(cboGray->currentText(), leGrayMin->text().toDouble(), false); @@ -1474,7 +1483,6 @@ void QgsRasterLayerProperties::apply() //Becuase Min Max values can be set during the redraw if a strech is requested we need to resync after apply if(mRasterLayerIsGdal && QgsContrastEnhancement::NO_STRETCH != mRasterLayer->getContrastEnhancementAlgorithm()) { - //set the stdDevs and min max values if(rbtnThreeBand->isChecked()) { @@ -1485,6 +1493,7 @@ void QgsRasterLayerProperties::apply() if(rbtnThreeBandMinMax->isEnabled()) { + mRGBActualMinimumMaximum = mRasterLayer->getActualRGBMinMaxFlag(); if(mRasterLayer->getRedBandName() != TRSTRING_NOT_SET) { leRedMin->setText(QString::number(mRasterLayer->getMinimumValue(mRasterLayer->getRedBandName()))); @@ -1500,6 +1509,7 @@ void QgsRasterLayerProperties::apply() leBlueMin->setText(QString::number(mRasterLayer->getMinimumValue(mRasterLayer->getBlueBandName()))); leBlueMax->setText(QString::number(mRasterLayer->getMaximumValue(mRasterLayer->getBlueBandName()))); } + setMinimumMaximumEstimateWarning(); } } else @@ -1511,11 +1521,13 @@ void QgsRasterLayerProperties::apply() if(rbtnSingleBandMinMax->isEnabled()) { + mGrayActualMinimumMaximum = mRasterLayer->getActualGrayMinMaxFlag(); if(mRasterLayer->getGrayBandName() != TRSTRING_NOT_SET) { leGrayMin->setText(QString::number(mRasterLayer->getMinimumValue(mRasterLayer->getGrayBandName()))); leGrayMax->setText(QString::number(mRasterLayer->getMaximumValue(mRasterLayer->getGrayBandName()))); } + setMinimumMaximumEstimateWarning(); } } } @@ -1741,35 +1753,6 @@ void QgsRasterLayerProperties::on_cboxColorMap_currentIndexChanged(const QString } } -void QgsRasterLayerProperties::on_cboxTransparencyLayer_currentIndexChanged(const QString& theText) -{ - if(theText == TRSTRING_NOT_SET) - { - cboxTransparencyBand->clear(); - cboxTransparencyBand->addItem(TRSTRING_NOT_SET); - } - else - { - QMap myLayers = QgsMapLayerRegistry::instance()->mapLayers(); - QMap::iterator it; - for(it = myLayers.begin(); it != myLayers.end(); it++) - { - if(theText == it.value()->name() && QgsMapLayer::RASTER == it.value()->type()) - { - QgsRasterLayer* myRasterLayer = (QgsRasterLayer*)it.value(); - int myBandCount = myRasterLayer->getBandCount(); - cboxTransparencyBand->clear(); - cboxTransparencyBand->addItem(TRSTRING_NOT_SET); - for(int bandRunner = 1; bandRunner <= myBandCount; bandRunner++) - { - cboxTransparencyBand->addItem(myRasterLayer->getRasterBandName(bandRunner)); - } - break; - } - } - } -} - void QgsRasterLayerProperties::on_pbnDefaultValues_clicked() { @@ -2512,7 +2495,7 @@ void QgsRasterLayerProperties::on_rbtnThreeBand_toggled(bool theState) mRasterLayer->getRasterLayerType() == QgsRasterLayer::PALETTE) { pbtnLoadMinMax->setEnabled(false); - cboxContrastEnhancementAlgorithm->setCurrentText(tr("No Stretch")); + cboxContrastEnhancementAlgorithm->setCurrentIndex(cboxContrastEnhancementAlgorithm->findText(tr("No Stretch"))); cboxContrastEnhancementAlgorithm->setEnabled(false); labelContrastEnhancement->setEnabled(false); sboxThreeBandStdDev->setEnabled(false); @@ -2614,6 +2597,7 @@ void QgsRasterLayerProperties::userDefinedMinMax_textEdited(QString theString) ignoreSpinBoxEvent = true; sboxThreeBandStdDev->setValue(0.0); } + mRGBActualMinimumMaximum = false; } else { @@ -2622,7 +2606,9 @@ void QgsRasterLayerProperties::userDefinedMinMax_textEdited(QString theString) ignoreSpinBoxEvent = true; sboxSingleBandStdDev->setValue(0.0); } + mGrayActualMinimumMaximum = false; } + setMinimumMaximumEstimateWarning(); } void QgsRasterLayerProperties::on_mClassifyButton_clicked() @@ -2737,6 +2723,7 @@ void QgsRasterLayerProperties::on_pbtnLoadMinMax_clicked() myRasterBandStats = mRasterLayer->getRasterBandStats(mRasterLayer->getRasterBandNumber(cboBlue->currentText())); leBlueMin->setText(QString::number(myRasterBandStats.minVal)); leBlueMax->setText(QString::number(myRasterBandStats.maxVal)); + mRGBActualMinimumMaximum = true; } else { @@ -2751,6 +2738,7 @@ void QgsRasterLayerProperties::on_pbtnLoadMinMax_clicked() mRasterLayer->computeMinimumMaximumEstimates(mRasterLayer->getRasterBandNumber(cboBlue->currentText()), myMinimumMaximum); leBlueMin->setText(QString::number(myMinimumMaximum[0])); leBlueMax->setText(QString::number(myMinimumMaximum[1])); + mRGBActualMinimumMaximum = false; } } @@ -2762,6 +2750,7 @@ void QgsRasterLayerProperties::on_pbtnLoadMinMax_clicked() myRasterBandStats = mRasterLayer->getRasterBandStats(mRasterLayer->getRasterBandNumber(cboGray->currentText())); leGrayMin->setText(QString::number(myRasterBandStats.minVal)); leGrayMax->setText(QString::number(myRasterBandStats.maxVal)); + mGrayActualMinimumMaximum = true; } else { @@ -2770,8 +2759,10 @@ void QgsRasterLayerProperties::on_pbtnLoadMinMax_clicked() mRasterLayer->computeMinimumMaximumEstimates(mRasterLayer->getRasterBandNumber(cboGray->currentText()), myMinimumMaximum); leGrayMin->setText(QString::number(myMinimumMaximum[0])); leGrayMax->setText(QString::number(myMinimumMaximum[1])); + mGrayActualMinimumMaximum = false; } } + setMinimumMaximumEstimateWarning(); } } diff --git a/src/app/qgsrasterlayerproperties.h b/src/app/qgsrasterlayerproperties.h index 903acda871b9..4f881b602eb4 100644 --- a/src/app/qgsrasterlayerproperties.h +++ b/src/app/qgsrasterlayerproperties.h @@ -100,8 +100,6 @@ class QgsRasterLayerProperties : public QDialog, private Ui::QgsRasterLayerPrope void on_cboRed_currentIndexChanged(const QString&); /**The slot handles necessary interface modifications based when color map selected changes*/ void on_cboxColorMap_currentIndexChanged(const QString&); - /**The slot handles necessary interface modifications based when transparency band selection changes*/ - void on_cboxTransparencyLayer_currentIndexChanged(const QString&); /**This slot calculates classification values and colors for the tree widget on the colormap tab*/ void on_mClassifyButton_clicked(); /**This slot deletes the current class from the tree widget on the colormap tab*/ @@ -131,7 +129,19 @@ class QgsRasterLayerProperties : public QDialog, private Ui::QgsRasterLayerPrope private: /** \brief A constant that signals property not used */ const QString TRSTRING_NOT_SET; - + + /** Id for context help */ + static const int context_id = 394441851; + + /** \brief Internal flag used to short circuit signal loop between min max field and stdDev spin box */ + bool ignoreSpinBoxEvent; + + /** \brief Flag to indicate if Gray minimum maximum values are actual minimum maximum values */ + bool mGrayActualMinimumMaximum; + + /** \brief Flag to indicate if RGB minimum maximum values are actual minimum maximum values */ + bool mRGBActualMinimumMaximum; + /** \brief Pointer to the raster layer that this property dilog changes the behaviour of. */ QgsRasterLayer * mRasterLayer; @@ -149,22 +159,19 @@ class QgsRasterLayerProperties : public QDialog, private Ui::QgsRasterLayerPrope */ bool mRasterLayerIsWms; - /** Id for context help */ - static const int context_id = 394441851; - /** \brief Clear the current transparency table and populate the table with the correct types for current drawing mode and data type*/ void populateTransparencyTable(); + + /** \brief Set the message indicating if any min max values are estimates */ + void setMinimumMaximumEstimateWarning(); + + /**Restores the state of the colormap tab*/ + void syncColormapTab(); /** \brief Verify values in custom min max line edits */ bool validUserDefinedMinMax(); - /**Restores the state of the colormap tab*/ - void syncColormapTab(); - - //Short circuit signal loop between min max field and stdDev spin box - bool ignoreSpinBoxEvent; - - //@TODO we should move these gradient generators somewhere more generic + //@TODO we should move these gradient generators somewhere more generic //so they can be used generically throughut the app QLinearGradient greenGradient(); QLinearGradient redGradient(); diff --git a/src/core/raster/qgsrasterlayer.cpp b/src/core/raster/qgsrasterlayer.cpp index 97e05d2530f6..90b5b47e9616 100644 --- a/src/core/raster/qgsrasterlayer.cpp +++ b/src/core/raster/qgsrasterlayer.cpp @@ -321,6 +321,8 @@ QgsRasterLayer::QgsRasterLayer( mUserDefinedRGBMinMaxFlag = false; //defaults needed to bypass stretch mUserDefinedGrayMinMaxFlag = false; + mRGBActualMinimumMaximum = false; + mGrayActualMinimumMaximum = false; mRasterShader = new QgsRasterShader(); @@ -569,15 +571,7 @@ bool QgsRasterLayer::readFile( QString const & fileName ) mBlueBandName = TRSTRING_NOT_SET; // sensible default } - //Beacuse the transparent band can be set from a different layer defaulting to the fourth - //is not a sensible default P.Ersts 2007-05-14 - /* - if (mGdalDataset->GetRasterCount() > 3) - mTransparencyBandName = getRasterBandName(4); - else - */ mTransparencyBandName = TRSTRING_NOT_SET; - mGrayBandName = TRSTRING_NOT_SET; //sensible default drawingStyle = MULTI_BAND_COLOR; //sensible default } @@ -1391,6 +1385,7 @@ void QgsRasterLayer::drawSingleBandGray(QPainter * theQPainter, QgsRasterViewPor if(QgsContrastEnhancement::NO_STRETCH != getContrastEnhancementAlgorithm() && !mUserDefinedGrayMinMaxFlag && mStandardDeviations > 0) { + mGrayActualMinimumMaximum = true; myGrayBandStats = getRasterBandStats(theBandNo); setMaximumValue(theBandNo, myGrayBandStats.mean + (mStandardDeviations * myGrayBandStats.stdDev)); setMinimumValue(theBandNo, myGrayBandStats.mean - (mStandardDeviations * myGrayBandStats.stdDev)); @@ -1401,7 +1396,7 @@ void QgsRasterLayer::drawSingleBandGray(QPainter * theQPainter, QgsRasterViewPor //from calling generate raster band stats double GDALrange[2]; GDALComputeRasterMinMax( myGdalBand, 1, GDALrange ); //Approximate - + mGrayActualMinimumMaximum = false; setMaximumValue(theBandNo, GDALrange[1]); setMinimumValue(theBandNo, GDALrange[0]); @@ -2063,7 +2058,7 @@ void QgsRasterLayer::drawMultiBandColor(QPainter * theQPainter, QgsRasterViewPor myRedBandStats = getRasterBandStats(myRedBandNo); myGreenBandStats = getRasterBandStats(myGreenBandNo); myBlueBandStats = getRasterBandStats(myBlueBandNo); - + mRGBActualMinimumMaximum = true; setMaximumValue(myRedBandNo, myRedBandStats.mean + (mStandardDeviations * myRedBandStats.stdDev)); setMinimumValue(myRedBandNo, myRedBandStats.mean - (mStandardDeviations * myRedBandStats.stdDev)); setMaximumValue(myGreenBandNo, myGreenBandStats.mean + (mStandardDeviations * myGreenBandStats.stdDev)); @@ -2076,6 +2071,8 @@ void QgsRasterLayer::drawMultiBandColor(QPainter * theQPainter, QgsRasterViewPor //This case will be true the first time the image is loaded, so just approimate the min max to keep //from calling generate raster band stats double GDALrange[2]; + mRGBActualMinimumMaximum = false; + GDALComputeRasterMinMax( myGdalRedBand, 1, GDALrange ); //Approximate setMaximumValue(myRedBandNo, GDALrange[1]); setMinimumValue(myRedBandNo, GDALrange[0]); @@ -4236,11 +4233,21 @@ bool QgsRasterLayer::readXML_( QDomNode & layer_node ) myQVariant = (QVariant) myElement.attribute("boolean"); setUserDefinedRGBMinMax(myQVariant.toBool()); + snode = mnl.namedItem("mRGBActualMinimumMaximum"); + myElement = snode.toElement(); + myQVariant = (QVariant) myElement.attribute("boolean"); + setActualRGBMinMaxFlag(myQVariant.toBool()); + snode = mnl.namedItem("mUserDefinedGrayMinMaxFlag"); myElement = snode.toElement(); myQVariant = (QVariant) myElement.attribute("boolean"); setUserDefinedGrayMinMax(myQVariant.toBool()); + snode = mnl.namedItem("mGrayActualMinimumMaximum"); + myElement = snode.toElement(); + myQVariant = (QVariant) myElement.attribute("boolean"); + setActualGrayMinMaxFlag(myQVariant.toBool()); + snode = mnl.namedItem("mContrastEnhancementAlgorithm"); myElement = snode.toElement(); setContrastEnhancementAlgorithm(myElement.text(), false); @@ -4594,6 +4601,20 @@ bool QgsRasterLayer::readXML_( QDomNode & layer_node ) rasterPropertiesElement.appendChild( userDefinedRGBMinMaxFlag ); + // + QDomElement RGBActualMinimumMaximum = document.createElement( "mRGBActualMinimumMaximum" ); + + if ( getActualRGBMinMaxFlag() ) + { + RGBActualMinimumMaximum.setAttribute( "boolean", "true" ); + } + else + { + RGBActualMinimumMaximum.setAttribute( "boolean", "false" ); + } + + rasterPropertiesElement.appendChild( RGBActualMinimumMaximum ); + // QDomElement userDefinedGrayMinMaxFlag = document.createElement( "mUserDefinedGrayMinMaxFlag" ); @@ -4608,6 +4629,20 @@ bool QgsRasterLayer::readXML_( QDomNode & layer_node ) rasterPropertiesElement.appendChild( userDefinedGrayMinMaxFlag ); + // + QDomElement GrayActualMinimumMaximum = document.createElement( "mGrayActualMinimumMaximum" ); + + if ( getActualGrayMinMaxFlag() ) + { + GrayActualMinimumMaximum.setAttribute( "boolean", "true" ); + } + else + { + GrayActualMinimumMaximum.setAttribute( "boolean", "false" ); + } + + rasterPropertiesElement.appendChild( GrayActualMinimumMaximum ); + // QDomElement contrastEnhancementAlgorithmElement = document.createElement( "mContrastEnhancementAlgorithm" ); QDomText contrastEnhancementAlgorithmText = document.createTextNode( getContrastEnhancementAlgorithmAsQString() ); diff --git a/src/core/raster/qgsrasterlayer.h b/src/core/raster/qgsrasterlayer.h index ad46cca02c6f..699456a4e837 100644 --- a/src/core/raster/qgsrasterlayer.h +++ b/src/core/raster/qgsrasterlayer.h @@ -413,19 +413,6 @@ class CORE_EXPORT QgsRasterLayer : public QgsMapLayer } /** \brief Mutator for transparent band name mapping. */ void setTransparentBandName(const QString & theBandNameQString); - // - // Accessor and mutator for transparent band name - // - /** \brief Accessor for transparent band name mapping. */ - QString getTransparentLayerName() - { - return mTransparentLayerName; - } - /** \brief Mutator for transparent band name mapping. */ - void setTransparentLayerName(const QString & theLayerNameQString) - { - mTransparentLayerName = theLayerNameQString; - } // // Accessor and mutator for gray band name @@ -793,29 +780,54 @@ class CORE_EXPORT QgsRasterLayer : public QgsMapLayer */ const QgsRasterDataProvider* getDataProvider() const; - /** \brief Mutator for mUserDefinedRGBMinMaxFlag */ + /** \brief Mutator for mUserDefinedRGBMinMaxFlag */ void setUserDefinedRGBMinMax(bool theBool) { mUserDefinedRGBMinMaxFlag = theBool; } - /** \brief Accessor for userDefinedMinMax. */ + /** \brief Accessor for mUserDefinedRGBMinMaxFlag. */ bool getUserDefinedRGBMinMax() { return mUserDefinedRGBMinMaxFlag; } + + /** \brief Mutator for mRGBActualMinimumMaximum */ + void setActualRGBMinMaxFlag(bool theBool) + { + mRGBActualMinimumMaximum = theBool; + } + + /** \brief Accessor for mRGBActualMinimumMaximum. */ + bool getActualRGBMinMaxFlag() + { + return mRGBActualMinimumMaximum; + } + - /** \brief Mutator for mUserDefinedRGBMinMaxFlag */ + /** \brief Mutator for mUserDefinedGrayMinMaxFlag */ void setUserDefinedGrayMinMax(bool theBool) { mUserDefinedGrayMinMaxFlag = theBool; } - /** \brief Accessor for userDefinedMinMax. */ + /** \brief Accessor for mUserDefinedGrayMinMaxFlag. */ bool getUserDefinedGrayMinMax() { return mUserDefinedGrayMinMaxFlag; } + + /** \brief Mutator for mGrayActualMinimumMaximum */ + void setActualGrayMinMaxFlag(bool theBool) + { + mGrayActualMinimumMaximum = theBool; + } + + /** \brief Accessor for mGrayActualMinimumMaximum. */ + bool getActualGrayMinMaxFlag() + { + return mGrayActualMinimumMaximum; + } public slots: /** @@ -1043,16 +1055,18 @@ public slots: QgsRasterTransparency mRasterTransparency; /** \brief The band to be associated with transparency. */ QString mTransparencyBandName; - /** \brief The Layer to be associated with transparency. */ - QString mTransparentLayerName; /** \brief The band to be associated with the grayscale only ouput - usually 1. */ QString mGrayBandName; /** \brief Whether this raster has overviews / pyramids or not */ bool hasPyramidsFlag; /** \brief Flag to indicate if the user entered custom min max values */ bool mUserDefinedRGBMinMaxFlag; + /** \brief Flag to indicate of the min max values are actual or estimates/user defined */ + bool mRGBActualMinimumMaximum; /** \brief Flag to indicate if the user entered custom min max values */ bool mUserDefinedGrayMinMaxFlag; + /** \brief Flag to indicate of the min max values are actual or estimates/user defined */ + bool mGrayActualMinimumMaximum; /** \brief This list holds a series of RasterPyramid structs * which store infomation for each potential pyramid level for this raster.*/ RasterPyramidList mPyramidList; diff --git a/src/ui/qgsrasterlayerpropertiesbase.ui b/src/ui/qgsrasterlayerpropertiesbase.ui index 314a92b36c3d..13551d5d1782 100644 --- a/src/ui/qgsrasterlayerpropertiesbase.ui +++ b/src/ui/qgsrasterlayerpropertiesbase.ui @@ -6,7 +6,7 @@ 0 0 596 - 629 + 610 @@ -64,7 +64,7 @@ - 1 + 0 @@ -475,7 +475,7 @@ - + @@ -498,7 +498,7 @@ - + @@ -514,7 +514,7 @@ - + @@ -534,7 +534,7 @@ - + @@ -547,7 +547,7 @@ - + @@ -572,7 +572,7 @@ - + @@ -585,7 +585,7 @@ - + @@ -610,14 +610,14 @@ - + Use standard deviation - + 10.000000000000000 @@ -630,19 +630,6 @@ - - - - - 0 - 0 - - - - Estimate note: - - - @@ -650,14 +637,34 @@ - + + + + Note: + + + + + + + Qt::Vertical + + + + 20 + 0 + + + + + Qt::Horizontal - + Load min / max values from band @@ -713,7 +720,7 @@ - + Contrast enhancement @@ -790,19 +797,6 @@ - - - - Qt::Vertical - - - - 20 - 0 - - - - @@ -923,13 +917,6 @@ - - - - Transparency layer; - - - @@ -962,13 +949,6 @@ - - - - false - - - @@ -1732,8 +1712,8 @@ <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;"> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;"></p></body></html> +</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p></body></html>