diff --git a/src/controllers/controlpickermenu.cpp b/src/controllers/controlpickermenu.cpp index c3a1c9b0666..873d81b473a 100644 --- a/src/controllers/controlpickermenu.cpp +++ b/src/controllers/controlpickermenu.cpp @@ -1373,6 +1373,10 @@ ControlPickerMenu::ControlPickerMenu(QWidget* pParent) tr("Reset the waveform zoom level to the default value selected in " "Preferences -> Waveforms"), pGuiMenu); + addDeckControl("waveform_zoom_selector", + tr("Waveform Zoom Selector"), + tr("Zooms the waveform in or out."), + pGuiMenu); pGuiMenu->addSeparator(); diff --git a/src/mixer/basetrackplayer.cpp b/src/mixer/basetrackplayer.cpp index c0395aafb18..3d9a0dbf39f 100644 --- a/src/mixer/basetrackplayer.cpp +++ b/src/mixer/basetrackplayer.cpp @@ -3,6 +3,7 @@ #include #include +#include "control/controlencoder.h" #include "control/controlobject.h" #include "control/controlpotmeter.h" #include "engine/channels/enginedeck.h" @@ -159,6 +160,21 @@ BaseTrackPlayerImpl::BaseTrackPlayerImpl( WaveformWidgetRenderer::s_waveformMinZoom); m_pWaveformZoom->setStepCount(stepCount); m_pWaveformZoom->setSmallStepCount(stepCount * 10); + // A wrapper for waveform_zoom_up/_down + m_pWaveformZoomSelector = std::make_unique( + ConfigKey(getGroup(), "waveform_zoom_selector"), false); + connect(m_pWaveformZoomSelector.get(), + &ControlObject::valueChanged, + this, + [this](double value) { + int steps = static_cast(fabs(std::round(value))); + const QString dir = std::round(value) > 0 ? "up" : "down"; + while (steps > 0) { + ControlObject::set(ConfigKey(getGroup(), "waveform_zoom_" + dir), 1); + ControlObject::set(ConfigKey(getGroup(), "waveform_zoom_" + dir), 0); + steps--; + } + }); m_pPreGain = make_parented(getGroup(), "pregain", this); diff --git a/src/mixer/basetrackplayer.h b/src/mixer/basetrackplayer.h index 003b19526e0..af58081c640 100644 --- a/src/mixer/basetrackplayer.h +++ b/src/mixer/basetrackplayer.h @@ -13,6 +13,7 @@ class EngineMixer; class ControlObject; +class ControlEncoder; class ControlPotmeter; class ControlProxy; class EffectsManager; @@ -162,6 +163,7 @@ class BaseTrackPlayerImpl : public BaseTrackPlayer { // Waveform display related controls std::unique_ptr m_pWaveformZoom; + std::unique_ptr m_pWaveformZoomSelector; parented_ptr m_pLoopInPoint; parented_ptr m_pLoopOutPoint;