A horizontal mouse wheel scroll over the canvas "scrubs" the temporal

range slider back or forward
This commit is contained in:
Nyall Dawson 2021-02-03 12:34:26 +10:00
parent 5cbd3e9663
commit ad56216f14
6 changed files with 33 additions and 3 deletions

View File

@ -29,7 +29,7 @@ A widget for controlling playback properties of a :py:class:`QgsTemporalControll
Constructor for QgsTemporalControllerWidget, with the specified ``parent`` widget.
%End
QgsTemporalController *temporalController();
QgsTemporalNavigationObject *temporalController();
%Docstring
Returns the temporal controller object used by this object in navigation.

View File

@ -1226,6 +1226,7 @@ QgisApp::QgisApp( QSplashScreen *splash, bool restorePlugins, bool skipVersionCh
mTemporalControllerWidget->setToggleVisibilityAction( mActionTemporalController );
mMapCanvas->setTemporalController( mTemporalControllerWidget->temporalController() );
mTemporalControllerWidget->setMapCanvas( mMapCanvas );
QgsGui::instance()->dataItemGuiProviderRegistry()->addProvider( new QgsAppDirectoryItemGuiProvider() );
QgsGui::instance()->dataItemGuiProviderRegistry()->addProvider( new QgsProjectHomeItemGuiProvider() );

View File

@ -51,6 +51,28 @@ QgsTemporalController *QgsTemporalControllerDockWidget::temporalController()
return mControllerWidget->temporalController();
}
void QgsTemporalControllerDockWidget::setMapCanvas( QgsMapCanvas *canvas )
{
if ( canvas && canvas->viewport() )
canvas->viewport()->installEventFilter( this );
}
bool QgsTemporalControllerDockWidget::eventFilter( QObject *object, QEvent *event )
{
if ( event->type() == QEvent::Wheel )
{
QWheelEvent *wheelEvent = dynamic_cast< QWheelEvent * >( event );
// handle horizontal wheel events by scrubbing timeline
if ( wheelEvent->angleDelta().x() != 0 )
{
const int step = -wheelEvent->angleDelta().x() / 120.0;
mControllerWidget->temporalController()->setCurrentFrameNumber( mControllerWidget->temporalController()->currentFrameNumber() + step );
return true;
}
}
return QgsDockWidget::eventFilter( object, event );
}
void QgsTemporalControllerDockWidget::exportAnimation()
{
QgsAnimationExportDialog *dlg = new QgsAnimationExportDialog( this, QgisApp::instance()->mapCanvas(), QgisApp::instance()->activeDecorations() );

View File

@ -23,6 +23,7 @@
class QgsTemporalControllerWidget;
class QgsTemporalController;
class QgsMapCanvas;
/**
* \ingroup app
@ -47,6 +48,12 @@ class APP_EXPORT QgsTemporalControllerDockWidget : public QgsDockWidget
*/
QgsTemporalController *temporalController();
void setMapCanvas( QgsMapCanvas *canvas );
protected:
bool eventFilter( QObject *object, QEvent *event ) override;
private slots:
void exportAnimation();

View File

@ -480,7 +480,7 @@ void QgsTemporalControllerWidget::updateRangeLabel( const QgsDateTimeRange &rang
}
}
QgsTemporalController *QgsTemporalControllerWidget::temporalController()
QgsTemporalNavigationObject *QgsTemporalControllerWidget::temporalController()
{
return mNavigationObject;
}

View File

@ -51,7 +51,7 @@ class GUI_EXPORT QgsTemporalControllerWidget : public QgsPanelWidget, private Ui
*
* The dock widget retains ownership of the returned object.
*/
QgsTemporalController *temporalController();
QgsTemporalNavigationObject *temporalController();
#ifndef SIP_RUN