|
21 | 21 | #include "qgsdoublespinbox.h"
|
22 | 22 | #include "qgssettings.h"
|
23 | 23 | #include "qgsmaptoolpan.h"
|
| 24 | +#include "qgsmapthemecollection.h" |
| 25 | +#include "qgsproject.h" |
| 26 | +#include "qgsmapthemes.h" |
24 | 27 | #include <QMessageBox>
|
25 | 28 | #include <QMenu>
|
26 | 29 | #include <QToolBar>
|
@@ -49,24 +52,36 @@ QgsMapCanvasDockWidget::QgsMapCanvasDockWidget( const QString &name, QWidget *pa
|
49 | 52 |
|
50 | 53 | connect( mActionSyncView, &QAction::toggled, this, &QgsMapCanvasDockWidget::syncView );
|
51 | 54 |
|
52 |
| - QMenu *menu = new QMenu(); |
53 |
| - |
54 |
| - QToolButton *toolButton = new QToolButton(); |
55 |
| - toolButton->setMenu( menu ); |
56 |
| - toolButton->setPopupMode( QToolButton::InstantPopup ); |
57 |
| - toolButton->setIcon( QgsApplication::getThemeIcon( QStringLiteral( "/mActionMapSettings.svg" ) ) ); |
58 |
| - mToolbar->addWidget( toolButton ); |
| 55 | + mMenu = new QMenu(); |
| 56 | + connect( mMenu, &QMenu::aboutToShow, this, &QgsMapCanvasDockWidget::menuAboutToShow ); |
| 57 | + |
| 58 | + QToolButton *btnMapThemes = new QToolButton; |
| 59 | + btnMapThemes->setAutoRaise( true ); |
| 60 | + btnMapThemes->setToolTip( tr( "Set View Theme" ) ); |
| 61 | + btnMapThemes->setIcon( QgsApplication::getThemeIcon( QStringLiteral( "/mActionShowAllLayers.svg" ) ) ); |
| 62 | + btnMapThemes->setPopupMode( QToolButton::InstantPopup ); |
| 63 | + btnMapThemes->setMenu( mMenu ); |
| 64 | + mToolbar->addWidget( btnMapThemes ); |
| 65 | + |
| 66 | + QMenu *settingsMenu = new QMenu(); |
| 67 | + QToolButton *settingsButton = new QToolButton(); |
| 68 | + btnMapThemes->setAutoRaise( true ); |
| 69 | + settingsButton->setMenu( settingsMenu ); |
| 70 | + settingsButton->setPopupMode( QToolButton::InstantPopup ); |
| 71 | + settingsButton->setIcon( QgsApplication::getThemeIcon( QStringLiteral( "/mActionMapSettings.svg" ) ) ); |
| 72 | + mToolbar->addWidget( settingsButton ); |
59 | 73 |
|
60 | 74 | connect( mActionSetCrs, &QAction::triggered, this, &QgsMapCanvasDockWidget::setMapCrs );
|
61 | 75 | connect( mMapCanvas, &QgsMapCanvas::destinationCrsChanged, this, &QgsMapCanvasDockWidget::mapCrsChanged );
|
62 | 76 | mapCrsChanged();
|
63 | 77 |
|
64 |
| - QgsMapSettingsAction *settingsAction = new QgsMapSettingsAction( menu ); |
65 |
| - menu->addAction( settingsAction ); |
| 78 | + QgsMapSettingsAction *settingsAction = new QgsMapSettingsAction( settingsMenu ); |
| 79 | + settingsMenu->addAction( settingsAction ); |
66 | 80 |
|
67 |
| - menu->addSeparator(); |
68 |
| - menu->addAction( mActionSetCrs ); |
69 |
| - menu->addAction( mActionRename ); |
| 81 | + settingsMenu->addSeparator(); |
| 82 | + settingsMenu->addAction( mActionSetCrs ); |
| 83 | + settingsMenu->addAction( mActionRename ); |
| 84 | + settingsMenu->addSeparator(); |
70 | 85 | connect( mActionRename, &QAction::triggered, this, &QgsMapCanvasDockWidget::renameTriggered );
|
71 | 86 |
|
72 | 87 | mScaleCombo = settingsAction->scaleCombo();
|
@@ -219,6 +234,45 @@ void QgsMapCanvasDockWidget::mapCrsChanged()
|
219 | 234 | tr( "No projection" ) ) );
|
220 | 235 | }
|
221 | 236 |
|
| 237 | +void QgsMapCanvasDockWidget::menuAboutToShow() |
| 238 | +{ |
| 239 | + qDeleteAll( mMenuPresetActions ); |
| 240 | + mMenuPresetActions.clear(); |
| 241 | + |
| 242 | + QString currentTheme = mMapCanvas->theme(); |
| 243 | + |
| 244 | + QAction *actionFollowMain = new QAction( tr( "(default)" ), mMenu ); |
| 245 | + actionFollowMain->setCheckable( true ); |
| 246 | + if ( currentTheme.isEmpty() || !QgsProject::instance()->mapThemeCollection()->hasMapTheme( currentTheme ) ) |
| 247 | + { |
| 248 | + actionFollowMain->setChecked( true ); |
| 249 | + } |
| 250 | + connect( actionFollowMain, &QAction::triggered, this, [ = ] |
| 251 | + { |
| 252 | + mMapCanvas->setTheme( QString() ); |
| 253 | + mMapCanvas->refresh(); |
| 254 | + } ); |
| 255 | + mMenuPresetActions.append( actionFollowMain ); |
| 256 | + |
| 257 | + Q_FOREACH ( const QString &grpName, QgsProject::instance()->mapThemeCollection()->mapThemes() ) |
| 258 | + { |
| 259 | + QAction *a = new QAction( grpName, mMenu ); |
| 260 | + a->setCheckable( true ); |
| 261 | + if ( grpName == currentTheme ) |
| 262 | + { |
| 263 | + a->setChecked( true ); |
| 264 | + } |
| 265 | + connect( a, &QAction::triggered, this, [a, this] |
| 266 | + { |
| 267 | + mMapCanvas->setTheme( a->text() ); |
| 268 | + mMapCanvas->refresh(); |
| 269 | + } ); |
| 270 | + mMenuPresetActions.append( a ); |
| 271 | + } |
| 272 | + mMenu->addActions( mMenuPresetActions ); |
| 273 | +} |
| 274 | + |
| 275 | + |
222 | 276 | QgsMapSettingsAction::QgsMapSettingsAction( QWidget *parent )
|
223 | 277 | : QWidgetAction( parent )
|
224 | 278 | {
|
|
0 commit comments