diff --git a/src/app/composer/qgscomposer.cpp b/src/app/composer/qgscomposer.cpp index 703165f59dc..911458b8bef 100644 --- a/src/app/composer/qgscomposer.cpp +++ b/src/app/composer/qgscomposer.cpp @@ -303,6 +303,9 @@ QgsComposer::QgsComposer( QgisApp *qgis, const QString& title ) layoutMenu->addAction( mActionLockItems ); layoutMenu->addAction( mActionUnlockAll ); + QMenu *settingsMenu = menuBar()->addMenu( tr( "Settings" ) ); + settingsMenu->addAction( mActionOptions ); + #ifdef Q_WS_MAC // this doesn't work on Mac anymore: menuBar()->addMenu( mQgis->windowMenu() ); // QgsComposer::populateWithOtherMenu should work recursively with submenus and regardless of Qt version @@ -659,6 +662,11 @@ void QgsComposer::showItemOptions( QgsComposerItem* item ) mItemDock->setWidget( newWidget ); } +void QgsComposer::on_mActionOptions_triggered() +{ + mQgis->showOptionsDialog( this, QString("mOptionsPageComposer") ); +} + QgsMapCanvas *QgsComposer::mapCanvas( void ) { return mQgis->mapCanvas(); diff --git a/src/app/composer/qgscomposer.h b/src/app/composer/qgscomposer.h index c5f7e90fce3..d2d02960672 100644 --- a/src/app/composer/qgscomposer.h +++ b/src/app/composer/qgscomposer.h @@ -306,6 +306,9 @@ class QgsComposer: public QMainWindow, private Ui::QgsComposerBase //!Clear guides void on_mActionClearGuides_triggered(); + //!Show options dialog + void on_mActionOptions_triggered(); + //! Save window state void saveWindowState(); diff --git a/src/app/qgisapp.cpp b/src/app/qgisapp.cpp index 5bfbf46fed2..74f27a94c9b 100644 --- a/src/app/qgisapp.cpp +++ b/src/app/qgisapp.cpp @@ -6839,8 +6839,12 @@ void QgisApp::customize() QgsCustomization::instance()->openDialog( this ); } - void QgisApp::options() +{ + showOptionsDialog( this ); +} + +void QgisApp::showOptionsDialog( QWidget *parent, QString currentPage ) { if ( mMapCanvas && mMapCanvas->isDrawing() ) { @@ -6850,7 +6854,12 @@ void QgisApp::options() QSettings mySettings; QString oldScales = mySettings.value( "Map/scales", PROJECT_SCALES ).toString(); - QgsOptions *optionsDialog = new QgsOptions( this ); + QgsOptions *optionsDialog = new QgsOptions( parent ); + if ( !currentPage.isEmpty() ) + { + optionsDialog->setCurrentPage( currentPage ); + } + if ( optionsDialog->exec() ) { // set the theme if it changed diff --git a/src/app/qgisapp.h b/src/app/qgisapp.h index e545729afb3..28f246f64a3 100644 --- a/src/app/qgisapp.h +++ b/src/app/qgisapp.h @@ -618,6 +618,9 @@ class APP_EXPORT QgisApp : public QMainWindow, private Ui::MainWindow //! Update project menu with the project templates void updateProjectFromTemplates(); + //! Opens the options dialog + void showOptionsDialog( QWidget *parent = 0, QString currentPage = QString() ); + protected: //! Handle state changes (WindowTitleChange) diff --git a/src/app/qgsoptions.cpp b/src/app/qgsoptions.cpp index f42a68c64e7..e81e6eef7c0 100644 --- a/src/app/qgsoptions.cpp +++ b/src/app/qgsoptions.cpp @@ -684,7 +684,7 @@ QgsOptions::QgsOptions( QWidget *parent, Qt::WFlags fl ) : // // Composer settings // - + //default composer font mComposerFontComboBox->blockSignals( true ); @@ -730,7 +730,7 @@ QgsOptions::QgsOptions( QWidget *parent, Qt::WFlags fl ) : //default grid is dots mGridStyleComboBox->setCurrentIndex( 1 ); } - + // // Locale settings // @@ -846,6 +846,21 @@ QgsOptions::~QgsOptions() { } +void QgsOptions::setCurrentPage( QString pageWidgetName ) +{ + //find the page with a matching widget name + for ( int idx = 0; idx < mOptionsStackedWidget->count(); ++idx ) + { + QWidget * currentPage = mOptionsStackedWidget->widget( idx ); + if ( currentPage->objectName() == pageWidgetName ) + { + //found the page, set it as current + mOptionsStackedWidget->setCurrentIndex( idx ); + return; + } + } +} + void QgsOptions::on_cbxProjectDefaultNew_toggled( bool checked ) { if ( checked ) @@ -1264,7 +1279,7 @@ void QgsOptions::saveOptions() // // Composer settings // - + //default font QString composerFont = mComposerFontComboBox->currentFont().family(); settings.setValue( "/Composer/defaultFont", composerFont ); @@ -1288,7 +1303,7 @@ void QgsOptions::saveOptions() { settings.setValue( "/Composer/gridStyle", "Crosses" ); } - + // // Locale settings // @@ -1676,7 +1691,7 @@ void QgsOptions::on_mOptionsStackedWidget_currentChanged( int theIndx ) { Q_UNUSED( theIndx ); // load gdal driver list when gdal tab is first opened - if ( mOptionsStackedWidget->currentWidget()->objectName() == QString( "mOptionsPage_02" ) + if ( mOptionsStackedWidget->currentWidget()->objectName() == QString( "mOptionsPageGDAL" ) && ! mLoadedGdalDriverList ) { loadGdalDriverList(); diff --git a/src/app/qgsoptions.h b/src/app/qgsoptions.h index 079ce846c8d..95a16924dbf 100644 --- a/src/app/qgsoptions.h +++ b/src/app/qgsoptions.h @@ -52,6 +52,11 @@ class APP_EXPORT QgsOptions : public QgsOptionsDialogBase, private Ui::QgsOption */ QString theme(); + /** Sets the page with the specified widget name as the current page + * @note added in QGIS 2.1 + */ + void setCurrentPage( QString pageWidgetName ); + public slots: void on_cbxProjectDefaultNew_toggled( bool checked ); void on_pbnProjectDefaultSetCurrent_clicked(); diff --git a/src/ui/qgscomposerbase.ui b/src/ui/qgscomposerbase.ui index 4b7acf3bb11..c5436a63eb5 100644 --- a/src/ui/qgscomposerbase.ui +++ b/src/ui/qgscomposerbase.ui @@ -780,7 +780,19 @@ Pan Composer - + + + + + :/images/themes/default/mActionOptions.svg:/images/themes/default/mActionOptions.svg + + + Composer Options... + + + QAction::PreferencesRole + + diff --git a/src/ui/qgsoptionsbase.ui b/src/ui/qgsoptionsbase.ui index d1e8aebf991..8ec3992ebec 100644 --- a/src/ui/qgsoptionsbase.ui +++ b/src/ui/qgsoptionsbase.ui @@ -250,7 +250,7 @@ 0 - + 0 @@ -896,7 +896,7 @@ - + 0 @@ -1232,7 +1232,7 @@ - + 0 @@ -1561,7 +1561,7 @@ - + 0 @@ -2076,7 +2076,7 @@ - + 0 @@ -2422,7 +2422,7 @@ - + 0 @@ -2836,7 +2836,7 @@ - + 0 @@ -2945,7 +2945,7 @@ - + 0 @@ -3446,7 +3446,7 @@ - + 0 @@ -3586,7 +3586,7 @@ - + 0 @@ -3843,7 +3843,7 @@ - + 0 @@ -3943,7 +3943,7 @@ - + 0