diff --git a/src/apps/marble-kde/marble.kcfg b/src/apps/marble-kde/marble.kcfg --- a/src/apps/marble-kde/marble.kcfg +++ b/src/apps/marble-kde/marble.kcfg @@ -194,6 +194,9 @@ true + + true + false diff --git a/src/apps/marble-kde/marble_part.cpp b/src/apps/marble-kde/marble_part.cpp --- a/src/apps/marble-kde/marble_part.cpp +++ b/src/apps/marble-kde/marble_part.cpp @@ -1609,6 +1609,7 @@ // External map editor m_controlView->setExternalMapEditor( m_externalEditorMapping[MarbleSettings::externalMapEditor()] ); m_controlView->marbleWidget()->inputHandler()->setInertialEarthRotationEnabled( MarbleSettings::inertialEarthRotation() ); + m_controlView->marbleWidget()->inputHandler()->setMouseViewRotationEnabled( MarbleSettings::mouseViewRotation() ); CloudSyncManager* cloudSyncManager = m_controlView->cloudSyncManager(); cloudSyncManager->setOwncloudCredentials( MarbleSettings::owncloudServer(), diff --git a/src/apps/marble-qt/QtMainWindow.cpp b/src/apps/marble-qt/QtMainWindow.cpp --- a/src/apps/marble-qt/QtMainWindow.cpp +++ b/src/apps/marble-qt/QtMainWindow.cpp @@ -1494,6 +1494,7 @@ m_controlView->marbleWidget()->setAnimationsEnabled( m_configDialog->animateTargetVoyage() ); m_controlView->marbleWidget()->inputHandler()->setInertialEarthRotationEnabled( m_configDialog->inertialEarthRotation() ); + m_controlView->marbleWidget()->inputHandler()->setMouseViewRotationEnabled( m_configDialog->mouseViewRotation() ); if ( !m_configDialog->externalMapEditor().isEmpty() ) { m_controlView->setExternalMapEditor( m_configDialog->externalMapEditor() ); } diff --git a/src/bindings/python/sip/QtMarbleConfigDialog.sip b/src/bindings/python/sip/QtMarbleConfigDialog.sip --- a/src/bindings/python/sip/QtMarbleConfigDialog.sip +++ b/src/bindings/python/sip/QtMarbleConfigDialog.sip @@ -61,5 +61,6 @@ void initializeCustomTimezone (); QLocale::MeasurementSystem measurementSystem () const; bool inertialEarthRotation () const; + bool mouseViewRotation () const; }; }; diff --git a/src/lib/marble/MarbleInputHandler.h b/src/lib/marble/MarbleInputHandler.h --- a/src/lib/marble/MarbleInputHandler.h +++ b/src/lib/marble/MarbleInputHandler.h @@ -76,6 +76,10 @@ */ bool inertialEarthRotationEnabled() const; + void setMouseViewRotationEnabled( bool enabled ); + + bool mouseViewRotationEnabled() const; + /// should the map do kinetic scrolling, this would stop the operation virtual void stopInertialEarthRotation(); diff --git a/src/lib/marble/MarbleInputHandler.cpp b/src/lib/marble/MarbleInputHandler.cpp --- a/src/lib/marble/MarbleInputHandler.cpp +++ b/src/lib/marble/MarbleInputHandler.cpp @@ -48,6 +48,7 @@ qreal m_wheelZoomTargetDistance; bool m_panViaArrowsEnabled; bool m_inertialEarthRotation; + bool m_mouseViewRotation; int m_steps; const int m_discreteZoomSteps = 120; }; @@ -60,6 +61,7 @@ m_wheelZoomTargetDistance( 0.0 ), m_panViaArrowsEnabled( true ), m_inertialEarthRotation( true ), + m_mouseViewRotation( true ), m_steps(0) { } @@ -127,6 +129,16 @@ return d->m_inertialEarthRotation; } +void MarbleInputHandler::setMouseViewRotationEnabled(bool enabled) +{ + d->m_mouseViewRotation = enabled; +} + +bool MarbleInputHandler::mouseViewRotationEnabled() const +{ + return d->m_mouseViewRotation; +} + void MarbleInputHandler::stopInertialEarthRotation() { } @@ -837,7 +849,7 @@ MarbleInputHandler::d->m_marblePresenter->setRadius(d->m_startingRadius * pow(1.005, dy)); } - if (d->m_rightPressed) + if (d->m_rightPressed && MarbleInputHandler::d->m_mouseViewRotation) { qreal centerX, centerY; MarbleInputHandler::d->m_marblePresenter->map()->screenCoordinates( diff --git a/src/lib/marble/MarbleNavigationSettingsWidget.ui b/src/lib/marble/MarbleNavigationSettingsWidget.ui --- a/src/lib/marble/MarbleNavigationSettingsWidget.ui +++ b/src/lib/marble/MarbleNavigationSettingsWidget.ui @@ -90,6 +90,16 @@ + + + + Use right mouse button to rotate the camera around + + + &Mouse view rotation + + + diff --git a/src/lib/marble/QtMarbleConfigDialog.h b/src/lib/marble/QtMarbleConfigDialog.h --- a/src/lib/marble/QtMarbleConfigDialog.h +++ b/src/lib/marble/QtMarbleConfigDialog.h @@ -48,6 +48,7 @@ bool animateTargetVoyage() const; QString externalMapEditor() const; bool inertialEarthRotation() const; + bool mouseViewRotation() const; // Cache Settings int volatileTileCacheLimit() const; diff --git a/src/lib/marble/QtMarbleConfigDialog.cpp b/src/lib/marble/QtMarbleConfigDialog.cpp --- a/src/lib/marble/QtMarbleConfigDialog.cpp +++ b/src/lib/marble/QtMarbleConfigDialog.cpp @@ -300,6 +300,7 @@ d->ui_navigationSettings.kcfg_dragLocation->setCurrentIndex( Marble::KeepAxisVertically ); d->ui_navigationSettings.kcfg_onStartup->setCurrentIndex( onStartup() ); d->ui_navigationSettings.kcfg_inertialEarthRotation->setChecked( inertialEarthRotation() ); + d->ui_navigationSettings.kcfg_mouseViewRotation->setChecked( mouseViewRotation() ); d->ui_navigationSettings.kcfg_animateTargetVoyage->setChecked( animateTargetVoyage() ); int editorIndex = 0; if (externalMapEditor() == QLatin1String("potlatch")) { @@ -393,6 +394,7 @@ d->m_settings.beginGroup( "Navigation" ); d->m_settings.setValue( "onStartup", d->ui_navigationSettings.kcfg_onStartup->currentIndex() ); d->m_settings.setValue( "inertialEarthRotation", d->ui_navigationSettings.kcfg_inertialEarthRotation->isChecked() ); + d->m_settings.setValue( "mouseViewRotation", d->ui_navigationSettings.kcfg_mouseViewRotation->isChecked() ); d->m_settings.setValue( "animateTargetVoyage", d->ui_navigationSettings.kcfg_animateTargetVoyage->isChecked() ); if( d->ui_navigationSettings.kcfg_externalMapEditor->currentIndex() == 0 ) { d->m_settings.setValue( "externalMapEditor", "" ); @@ -509,6 +511,11 @@ return d->m_settings.value( "Navigation/inertialEarthRotation", true ).toBool(); } +bool QtMarbleConfigDialog::mouseViewRotation() const +{ + return d->m_settings.value( "Navigation/mouseViewRotation", true ).toBool(); +} + int QtMarbleConfigDialog::volatileTileCacheLimit() const { int defaultValue = (MarbleGlobal::getInstance()->profiles() & MarbleGlobal::SmallScreen) ? 6 : 100;