@@ -104,16 +104,26 @@ QgsRasterLayerProperties::QgsRasterLayerProperties( QgsMapLayer *lyr, QgsMapCanv
104
104
105
105
connect ( buttonBox, &QDialogButtonBox::helpRequested, this , &QgsRasterLayerProperties::showHelp );
106
106
107
- QPushButton *b = new QPushButton ( tr ( " Style" ) );
108
- QMenu *m = new QMenu ( this );
109
- m->addAction ( tr ( " Load Style..." ), this , SLOT ( loadStyle_clicked () ) );
110
- m->addAction ( tr ( " Save Style..." ), this , SLOT ( saveStyleAs_clicked () ) );
111
- m->addSeparator ();
112
- m->addAction ( tr ( " Save as Default" ), this , SLOT ( saveDefaultStyle_clicked () ) );
113
- m->addAction ( tr ( " Restore Default" ), this , SLOT ( loadDefaultStyle_clicked () ) );
114
- b->setMenu ( m );
115
- connect ( m, &QMenu::aboutToShow, this , &QgsRasterLayerProperties::aboutToShowStyleMenu );
116
- buttonBox->addButton ( b, QDialogButtonBox::ResetRole );
107
+ mBtnStyle = new QPushButton ( tr ( " Style" ) );
108
+ QMenu *menuStyle = new QMenu ( this );
109
+ menuStyle->addAction ( tr ( " Load Style..." ), this , SLOT ( loadStyle_clicked () ) );
110
+ menuStyle->addAction ( tr ( " Save Style..." ), this , SLOT ( saveStyleAs_clicked () ) );
111
+ menuStyle->addSeparator ();
112
+ menuStyle->addAction ( tr ( " Save as Default" ), this , SLOT ( saveDefaultStyle_clicked () ) );
113
+ menuStyle->addAction ( tr ( " Restore Default" ), this , SLOT ( loadDefaultStyle_clicked () ) );
114
+ mBtnStyle ->setMenu ( menuStyle );
115
+ connect ( menuStyle, &QMenu::aboutToShow, this , &QgsRasterLayerProperties::aboutToShowStyleMenu );
116
+ buttonBox->addButton ( mBtnStyle , QDialogButtonBox::ResetRole );
117
+
118
+ mBtnMetadata = new QPushButton ( tr ( " Metadata" ), this );
119
+ QMenu *menuMetadata = new QMenu ( this );
120
+ mActionLoadMetadata = menuMetadata->addAction ( tr ( " Load Metadata" ), this , SLOT ( loadMetadata () ) );
121
+ mActionSaveMetadataAs = menuMetadata->addAction ( tr ( " Save Metadata" ), this , SLOT ( saveMetadataAs () ) );
122
+ menuMetadata->addSeparator ();
123
+ menuMetadata->addAction ( tr ( " Save as Default" ), this , SLOT ( saveDefaultMetadata () ) );
124
+ menuMetadata->addAction ( tr ( " Restore Default" ), this , SLOT ( loadDefaultMetadata () ) );
125
+ mBtnMetadata ->setMenu ( menuMetadata );
126
+ buttonBox->addButton ( mBtnMetadata , QDialogButtonBox::ResetRole );
117
127
118
128
connect ( lyr->styleManager (), &QgsMapLayerStyleManager::currentStyleChanged, this , &QgsRasterLayerProperties::syncToLayer );
119
129
@@ -436,6 +446,7 @@ QgsRasterLayerProperties::QgsRasterLayerProperties( QgsMapLayer *lyr, QgsMapCanv
436
446
437
447
QString title = QString ( tr ( " Layer Properties - %1" ) ).arg ( lyr->name () );
438
448
restoreOptionsBaseUi ( title );
449
+ optionsStackedWidget_CurrentChanged ( mOptionsStackedWidget ->currentIndex () );
439
450
} // QgsRasterLayerProperties ctor
440
451
441
452
@@ -1488,6 +1499,10 @@ void QgsRasterLayerProperties::optionsStackedWidget_CurrentChanged( int index )
1488
1499
{
1489
1500
QgsOptionsDialogBase::optionsStackedWidget_CurrentChanged ( index );
1490
1501
1502
+ bool isMetadataPanel = ( index == mOptStackedWidget ->indexOf ( mOptsPage_Metadata ) );
1503
+ mBtnStyle ->setVisible ( ! isMetadataPanel );
1504
+ mBtnMetadata ->setVisible ( isMetadataPanel );
1505
+
1491
1506
if ( !mHistogramWidget )
1492
1507
return ;
1493
1508
@@ -1856,6 +1871,102 @@ void QgsRasterLayerProperties::saveStyleAs_clicked()
1856
1871
QMessageBox::information ( this , tr ( " Saved Style" ), message );
1857
1872
}
1858
1873
1874
+ //
1875
+ //
1876
+ // Next four methods for saving and restoring QMD metadata
1877
+ //
1878
+ //
1879
+
1880
+ void QgsRasterLayerProperties::loadMetadata ()
1881
+ {
1882
+ QgsSettings myQSettings; // where we keep last used filter in persistent state
1883
+ QString myLastUsedDir = myQSettings.value ( QStringLiteral ( " style/lastStyleDir" ), QDir::homePath () ).toString ();
1884
+
1885
+ QString myFileName = QFileDialog::getOpenFileName ( this , tr ( " Load layer metadata from metadata file" ), myLastUsedDir,
1886
+ tr ( " QGIS Layer Metadata File" ) + " (*.qmd)" );
1887
+ if ( myFileName.isNull () )
1888
+ {
1889
+ return ;
1890
+ }
1891
+
1892
+ QString myMessage;
1893
+ bool defaultLoadedFlag = false ;
1894
+ myMessage = mRasterLayer ->loadNamedMetadata ( myFileName, defaultLoadedFlag );
1895
+
1896
+ // reset if the default style was loaded OK only
1897
+ if ( defaultLoadedFlag )
1898
+ {
1899
+ mMetadataWidget ->setMetadata ( mRasterLayer ->metadata () );
1900
+ }
1901
+ else
1902
+ {
1903
+ // let the user know what went wrong
1904
+ QMessageBox::warning ( this , tr ( " Load Metadata" ), myMessage );
1905
+ }
1906
+
1907
+ QFileInfo myFI ( myFileName );
1908
+ QString myPath = myFI.path ();
1909
+ myQSettings.setValue ( QStringLiteral ( " style/lastStyleDir" ), myPath );
1910
+
1911
+ activateWindow (); // set focus back to properties dialog
1912
+ }
1913
+
1914
+ void QgsRasterLayerProperties::saveMetadataAs ()
1915
+ {
1916
+ QgsSettings myQSettings; // where we keep last used filter in persistent state
1917
+ QString myLastUsedDir = myQSettings.value ( QStringLiteral ( " style/lastStyleDir" ), QDir::homePath () ).toString ();
1918
+
1919
+ QString myOutputFileName = QFileDialog::getSaveFileName ( this , tr ( " Save layer metadata as QMD" ),
1920
+ myLastUsedDir, tr ( " QMD File" ) + " (*.qmd)" );
1921
+ if ( myOutputFileName.isNull () ) // dialog canceled
1922
+ {
1923
+ return ;
1924
+ }
1925
+
1926
+ mMetadataWidget ->acceptMetadata ();
1927
+
1928
+ // ensure the user never omitted the extension from the file name
1929
+ if ( !myOutputFileName.endsWith ( QgsMapLayer::extensionPropertyType ( QgsMapLayer::Metadata ), Qt::CaseInsensitive ) )
1930
+ {
1931
+ myOutputFileName += QgsMapLayer::extensionPropertyType ( QgsMapLayer::Metadata );
1932
+ }
1933
+
1934
+ bool defaultLoadedFlag = false ;
1935
+ QString message = mRasterLayer ->saveNamedMetadata ( myOutputFileName, defaultLoadedFlag );
1936
+ if ( defaultLoadedFlag )
1937
+ myQSettings.setValue ( QStringLiteral ( " style/lastStyleDir" ), QFileInfo ( myOutputFileName ).absolutePath () );
1938
+ else
1939
+ QMessageBox::information ( this , tr ( " Saved Metadata" ), message );
1940
+ }
1941
+
1942
+ void QgsRasterLayerProperties::saveDefaultMetadata ()
1943
+ {
1944
+ mMetadataWidget ->acceptMetadata ();
1945
+
1946
+ bool defaultSavedFlag = false ;
1947
+ QString errorMsg = mRasterLayer ->saveDefaultMetadata ( defaultSavedFlag );
1948
+ if ( !defaultSavedFlag )
1949
+ {
1950
+ QMessageBox::warning ( this , tr ( " Default Metadata" ), errorMsg );
1951
+ }
1952
+ }
1953
+
1954
+ void QgsRasterLayerProperties::loadDefaultMetadata ()
1955
+ {
1956
+ bool defaultLoadedFlag = false ;
1957
+ QString myMessage = mRasterLayer ->loadNamedMetadata ( mRasterLayer ->metadataUri (), defaultLoadedFlag );
1958
+ // reset if the default metadata was loaded OK only
1959
+ if ( defaultLoadedFlag )
1960
+ {
1961
+ mMetadataWidget ->setMetadata ( mRasterLayer ->metadata () );
1962
+ }
1963
+ else
1964
+ {
1965
+ QMessageBox::information ( this , tr ( " Default Metadata" ), myMessage );
1966
+ }
1967
+ }
1968
+
1969
+
1859
1970
void QgsRasterLayerProperties::toggleBuildPyramidsButton ()
1860
1971
{
1861
1972
if ( lbxPyramidResolutions->selectedItems ().empty () )
0 commit comments