|
@@ -104,16 +104,26 @@ QgsRasterLayerProperties::QgsRasterLayerProperties( QgsMapLayer *lyr, QgsMapCanv |
|
|
|
|
|
connect( buttonBox, &QDialogButtonBox::helpRequested, this, &QgsRasterLayerProperties::showHelp ); |
|
|
|
|
|
QPushButton *b = new QPushButton( tr( "Style" ) ); |
|
|
QMenu *m = new QMenu( this ); |
|
|
m->addAction( tr( "Load Style..." ), this, SLOT( loadStyle_clicked() ) ); |
|
|
m->addAction( tr( "Save Style..." ), this, SLOT( saveStyleAs_clicked() ) ); |
|
|
m->addSeparator(); |
|
|
m->addAction( tr( "Save as Default" ), this, SLOT( saveDefaultStyle_clicked() ) ); |
|
|
m->addAction( tr( "Restore Default" ), this, SLOT( loadDefaultStyle_clicked() ) ); |
|
|
b->setMenu( m ); |
|
|
connect( m, &QMenu::aboutToShow, this, &QgsRasterLayerProperties::aboutToShowStyleMenu ); |
|
|
buttonBox->addButton( b, QDialogButtonBox::ResetRole ); |
|
|
mBtnStyle = new QPushButton( tr( "Style" ) ); |
|
|
QMenu *menuStyle = new QMenu( this ); |
|
|
menuStyle->addAction( tr( "Load Style..." ), this, SLOT( loadStyle_clicked() ) ); |
|
|
menuStyle->addAction( tr( "Save Style..." ), this, SLOT( saveStyleAs_clicked() ) ); |
|
|
menuStyle->addSeparator(); |
|
|
menuStyle->addAction( tr( "Save as Default" ), this, SLOT( saveDefaultStyle_clicked() ) ); |
|
|
menuStyle->addAction( tr( "Restore Default" ), this, SLOT( loadDefaultStyle_clicked() ) ); |
|
|
mBtnStyle->setMenu( menuStyle ); |
|
|
connect( menuStyle, &QMenu::aboutToShow, this, &QgsRasterLayerProperties::aboutToShowStyleMenu ); |
|
|
buttonBox->addButton( mBtnStyle, QDialogButtonBox::ResetRole ); |
|
|
|
|
|
mBtnMetadata = new QPushButton( tr( "Metadata" ), this ); |
|
|
QMenu *menuMetadata = new QMenu( this ); |
|
|
mActionLoadMetadata = menuMetadata->addAction( tr( "Load Metadata" ), this, SLOT( loadMetadata() ) ); |
|
|
mActionSaveMetadataAs = menuMetadata->addAction( tr( "Save Metadata" ), this, SLOT( saveMetadataAs() ) ); |
|
|
menuMetadata->addSeparator(); |
|
|
menuMetadata->addAction( tr( "Save as Default" ), this, SLOT( saveDefaultMetadata() ) ); |
|
|
menuMetadata->addAction( tr( "Restore Default" ), this, SLOT( loadDefaultMetadata() ) ); |
|
|
mBtnMetadata->setMenu( menuMetadata ); |
|
|
buttonBox->addButton( mBtnMetadata, QDialogButtonBox::ResetRole ); |
|
|
|
|
|
connect( lyr->styleManager(), &QgsMapLayerStyleManager::currentStyleChanged, this, &QgsRasterLayerProperties::syncToLayer ); |
|
|
|
|
@@ -436,6 +446,7 @@ QgsRasterLayerProperties::QgsRasterLayerProperties( QgsMapLayer *lyr, QgsMapCanv |
|
|
|
|
|
QString title = QString( tr( "Layer Properties - %1" ) ).arg( lyr->name() ); |
|
|
restoreOptionsBaseUi( title ); |
|
|
optionsStackedWidget_CurrentChanged( mOptionsStackedWidget->currentIndex() ); |
|
|
} // QgsRasterLayerProperties ctor |
|
|
|
|
|
|
|
@@ -1488,6 +1499,10 @@ void QgsRasterLayerProperties::optionsStackedWidget_CurrentChanged( int index ) |
|
|
{ |
|
|
QgsOptionsDialogBase::optionsStackedWidget_CurrentChanged( index ); |
|
|
|
|
|
bool isMetadataPanel = ( index == mOptStackedWidget->indexOf( mOptsPage_Metadata ) ); |
|
|
mBtnStyle->setVisible( ! isMetadataPanel ); |
|
|
mBtnMetadata->setVisible( isMetadataPanel ); |
|
|
|
|
|
if ( !mHistogramWidget ) |
|
|
return; |
|
|
|
|
@@ -1856,6 +1871,102 @@ void QgsRasterLayerProperties::saveStyleAs_clicked() |
|
|
QMessageBox::information( this, tr( "Saved Style" ), message ); |
|
|
} |
|
|
|
|
|
// |
|
|
// |
|
|
// Next four methods for saving and restoring QMD metadata |
|
|
// |
|
|
// |
|
|
|
|
|
void QgsRasterLayerProperties::loadMetadata() |
|
|
{ |
|
|
QgsSettings myQSettings; // where we keep last used filter in persistent state |
|
|
QString myLastUsedDir = myQSettings.value( QStringLiteral( "style/lastStyleDir" ), QDir::homePath() ).toString(); |
|
|
|
|
|
QString myFileName = QFileDialog::getOpenFileName( this, tr( "Load layer metadata from metadata file" ), myLastUsedDir, |
|
|
tr( "QGIS Layer Metadata File" ) + " (*.qmd)" ); |
|
|
if ( myFileName.isNull() ) |
|
|
{ |
|
|
return; |
|
|
} |
|
|
|
|
|
QString myMessage; |
|
|
bool defaultLoadedFlag = false; |
|
|
myMessage = mRasterLayer->loadNamedMetadata( myFileName, defaultLoadedFlag ); |
|
|
|
|
|
//reset if the default style was loaded OK only |
|
|
if ( defaultLoadedFlag ) |
|
|
{ |
|
|
mMetadataWidget->setMetadata( mRasterLayer->metadata() ); |
|
|
} |
|
|
else |
|
|
{ |
|
|
//let the user know what went wrong |
|
|
QMessageBox::warning( this, tr( "Load Metadata" ), myMessage ); |
|
|
} |
|
|
|
|
|
QFileInfo myFI( myFileName ); |
|
|
QString myPath = myFI.path(); |
|
|
myQSettings.setValue( QStringLiteral( "style/lastStyleDir" ), myPath ); |
|
|
|
|
|
activateWindow(); // set focus back to properties dialog |
|
|
} |
|
|
|
|
|
void QgsRasterLayerProperties::saveMetadataAs() |
|
|
{ |
|
|
QgsSettings myQSettings; // where we keep last used filter in persistent state |
|
|
QString myLastUsedDir = myQSettings.value( QStringLiteral( "style/lastStyleDir" ), QDir::homePath() ).toString(); |
|
|
|
|
|
QString myOutputFileName = QFileDialog::getSaveFileName( this, tr( "Save layer metadata as QMD" ), |
|
|
myLastUsedDir, tr( "QMD File" ) + " (*.qmd)" ); |
|
|
if ( myOutputFileName.isNull() ) //dialog canceled |
|
|
{ |
|
|
return; |
|
|
} |
|
|
|
|
|
mMetadataWidget->acceptMetadata(); |
|
|
|
|
|
//ensure the user never omitted the extension from the file name |
|
|
if ( !myOutputFileName.endsWith( QgsMapLayer::extensionPropertyType( QgsMapLayer::Metadata ), Qt::CaseInsensitive ) ) |
|
|
{ |
|
|
myOutputFileName += QgsMapLayer::extensionPropertyType( QgsMapLayer::Metadata ); |
|
|
} |
|
|
|
|
|
bool defaultLoadedFlag = false; |
|
|
QString message = mRasterLayer->saveNamedMetadata( myOutputFileName, defaultLoadedFlag ); |
|
|
if ( defaultLoadedFlag ) |
|
|
myQSettings.setValue( QStringLiteral( "style/lastStyleDir" ), QFileInfo( myOutputFileName ).absolutePath() ); |
|
|
else |
|
|
QMessageBox::information( this, tr( "Saved Metadata" ), message ); |
|
|
} |
|
|
|
|
|
void QgsRasterLayerProperties::saveDefaultMetadata() |
|
|
{ |
|
|
mMetadataWidget->acceptMetadata(); |
|
|
|
|
|
bool defaultSavedFlag = false; |
|
|
QString errorMsg = mRasterLayer->saveDefaultMetadata( defaultSavedFlag ); |
|
|
if ( !defaultSavedFlag ) |
|
|
{ |
|
|
QMessageBox::warning( this, tr( "Default Metadata" ), errorMsg ); |
|
|
} |
|
|
} |
|
|
|
|
|
void QgsRasterLayerProperties::loadDefaultMetadata() |
|
|
{ |
|
|
bool defaultLoadedFlag = false; |
|
|
QString myMessage = mRasterLayer->loadNamedMetadata( mRasterLayer->metadataUri(), defaultLoadedFlag ); |
|
|
//reset if the default metadata was loaded OK only |
|
|
if ( defaultLoadedFlag ) |
|
|
{ |
|
|
mMetadataWidget->setMetadata( mRasterLayer->metadata() ); |
|
|
} |
|
|
else |
|
|
{ |
|
|
QMessageBox::information( this, tr( "Default Metadata" ), myMessage ); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
void QgsRasterLayerProperties::toggleBuildPyramidsButton() |
|
|
{ |
|
|
if ( lbxPyramidResolutions->selectedItems().empty() ) |
|
|