From dca348fad5ebefe7e38f61db5ddae577b1917d21 Mon Sep 17 00:00:00 2001 From: RJ Ryan Date: Thu, 3 Apr 2014 14:42:26 -0400 Subject: Supply parameter and value to widgets when a connected control changes. For WNumber (and other widgets) base updates on value. Fixes Bug #1301994. --- src/widget/controlwidgetconnection.cpp | 6 +++--- src/widget/wbasewidget.h | 8 ++++++-- src/widget/wcombobox.cpp | 7 +++++-- src/widget/wcombobox.h | 2 +- src/widget/wkey.cpp | 7 +++++-- src/widget/wkey.h | 2 +- src/widget/wnumber.cpp | 6 ++++-- src/widget/wnumber.h | 2 +- src/widget/woverview.cpp | 10 +++++----- src/widget/woverview.h | 2 +- src/widget/wpushbutton.cpp | 7 +++++-- src/widget/wpushbutton.h | 2 +- src/widget/wslidercomposed.cpp | 21 +++++++++++++-------- src/widget/wslidercomposed.h | 2 +- src/widget/wstatuslight.cpp | 7 +++++-- src/widget/wstatuslight.h | 2 +- src/widget/wvumeter.cpp | 7 ++++--- src/widget/wvumeter.h | 2 +- src/widget/wwidget.cpp | 7 ++++--- src/widget/wwidget.h | 2 +- 20 files changed, 68 insertions(+), 43 deletions(-) (limited to 'src/widget') diff --git a/src/widget/controlwidgetconnection.cpp b/src/widget/controlwidgetconnection.cpp index 39614a2b93..90b514aa42 100644 --- a/src/widget/controlwidgetconnection.cpp +++ b/src/widget/controlwidgetconnection.cpp @@ -70,10 +70,10 @@ QString ControlParameterWidgetConnection::toDebugString() const { emitOptionToString(m_emitOption)); } -void ControlParameterWidgetConnection::slotControlValueChanged(double v) { +void ControlParameterWidgetConnection::slotControlValueChanged(double value) { if (m_directionOption & DIR_TO_WIDGET) { - double parameter = getControlParameterForValue(v); - m_pWidget->onConnectedControlValueChanged(parameter); + double parameter = getControlParameterForValue(value); + m_pWidget->onConnectedControlChanged(parameter, value); } } diff --git a/src/widget/wbasewidget.h b/src/widget/wbasewidget.h index 0a51fa56fe..274c4ae96a 100644 --- a/src/widget/wbasewidget.h +++ b/src/widget/wbasewidget.h @@ -55,8 +55,12 @@ class WBaseWidget { double getControlParameterDisplay() const; protected: - virtual void onConnectedControlValueChanged(double v) { - Q_UNUSED(v); + // Whenever a connected control is changed, onConnectedControlChanged is + // called. This allows the widget implementor to respond to the change and + // gives them both the parameter and its corresponding value. + virtual void onConnectedControlChanged(double dParameter, double dValue) { + Q_UNUSED(dParameter); + Q_UNUSED(dValue); } void resetControlParameter(); diff --git a/src/widget/wcombobox.cpp b/src/widget/wcombobox.cpp index 8f7f9ab358..d2d04b2482 100644 --- a/src/widget/wcombobox.cpp +++ b/src/widget/wcombobox.cpp @@ -39,8 +39,11 @@ bool WComboBox::event(QEvent* pEvent) { return QComboBox::event(pEvent); } -void WComboBox::onConnectedControlValueChanged(double v) { - int index = findData(static_cast(v)); +void WComboBox::onConnectedControlChanged(double dParameter, double dValue) { + Q_UNUSED(dParameter); + // Enums are not currently represented using parameter space so it doesn't + // make sense to use the parameter here yet. + int index = findData(static_cast(dValue)); if (index != -1) { setCurrentIndex(index); } diff --git a/src/widget/wcombobox.h b/src/widget/wcombobox.h index 7e5f071422..a5e67e50bc 100644 --- a/src/widget/wcombobox.h +++ b/src/widget/wcombobox.h @@ -16,7 +16,7 @@ class WComboBox : public QComboBox, public WBaseWidget { void setup(QDomNode node, const SkinContext& context); - void onConnectedControlValueChanged(double v); + void onConnectedControlChanged(double dParameter, double dValue); protected: bool event(QEvent* pEvent); diff --git a/src/widget/wkey.cpp b/src/widget/wkey.cpp index b271e08283..cbc19f6660 100644 --- a/src/widget/wkey.cpp +++ b/src/widget/wkey.cpp @@ -15,8 +15,11 @@ WKey::WKey(QWidget* pParent) WKey::~WKey() { } -void WKey::onConnectedControlValueChanged(double v) { - setValue(v); +void WKey::onConnectedControlChanged(double dParameter, double dValue) { + Q_UNUSED(dParameter); + // Enums are not currently represented using parameter space so it doesn't + // make sense to use the parameter here yet. + setValue(dValue); } void WKey::setValue(double dValue) { diff --git a/src/widget/wkey.h b/src/widget/wkey.h index 5e58a01cae..f251a3f37f 100644 --- a/src/widget/wkey.h +++ b/src/widget/wkey.h @@ -12,7 +12,7 @@ class WKey : public WLabel { WKey(QWidget* pParent=NULL); virtual ~WKey(); - virtual void onConnectedControlValueChanged(double v); + virtual void onConnectedControlChanged(double dParameter, double dValue); private slots: void setValue(double dValue); diff --git a/src/widget/wnumber.cpp b/src/widget/wnumber.cpp index 6690257538..0299c01d77 100644 --- a/src/widget/wnumber.cpp +++ b/src/widget/wnumber.cpp @@ -47,8 +47,10 @@ void WNumber::setup(QDomNode node, const SkinContext& context) { setValue(0.); } -void WNumber::onConnectedControlValueChanged(double v) { - setValue(v); +void WNumber::onConnectedControlChanged(double dParameter, double dValue) { + Q_UNUSED(dParameter); + // We show the actual control value instead of its parameter. + setValue(dValue); } void WNumber::setValue(double dValue) { diff --git a/src/widget/wnumber.h b/src/widget/wnumber.h index c542473c83..3b1db056f1 100644 --- a/src/widget/wnumber.h +++ b/src/widget/wnumber.h @@ -31,7 +31,7 @@ class WNumber : public WLabel { virtual void setup(QDomNode node, const SkinContext& context); - virtual void onConnectedControlValueChanged(double v); + virtual void onConnectedControlChanged(double dParameter, double dValue); public slots: virtual void setValue(double dValue); diff --git a/src/widget/woverview.cpp b/src/widget/woverview.cpp index 67defab390..861402faeb 100644 --- a/src/widget/woverview.cpp +++ b/src/widget/woverview.cpp @@ -133,14 +133,14 @@ void WOverview::setup(QDomNode node, const SkinContext& context) { } } -void WOverview::onConnectedControlValueChanged(double dValue) { - if (!m_bDrag) - { +void WOverview::onConnectedControlChanged(double dParameter, double dValue) { + Q_UNUSED(dValue); + if (!m_bDrag) { // Calculate handle position - int iPos = valueToPosition(dValue); + int iPos = valueToPosition(dParameter); if (iPos != m_iPos) { m_iPos = iPos; - //qDebug() << "WOverview::onConnectedControlValueChanged" << dValue << ">>" << m_iPos; + //qDebug() << "WOverview::onConnectedControlChanged" << dParameter << ">>" << m_iPos; update(); } } diff --git a/src/widget/woverview.h b/src/widget/woverview.h index 2d2cfd5ca6..a1db61d7ad 100644 --- a/src/widget/woverview.h +++ b/src/widget/woverview.h @@ -39,7 +39,7 @@ class WOverview : public WWidget { void setup(QDomNode node, const SkinContext& context); public slots: - void onConnectedControlValueChanged(double); + void onConnectedControlChanged(double dParameter, double dValue); void slotLoadNewTrack(TrackPointer pTrack); void slotTrackLoaded(TrackPointer pTrack); void slotUnloadTrack(TrackPointer pTrack); diff --git a/src/widget/wpushbutton.cpp b/src/widget/wpushbutton.cpp index 13860d12ec..e75f992d61 100644 --- a/src/widget/wpushbutton.cpp +++ b/src/widget/wpushbutton.cpp @@ -220,9 +220,12 @@ void WPushButton::setPixmapBackground(const QString &filename, } } -void WPushButton::onConnectedControlValueChanged(double v) { +void WPushButton::onConnectedControlChanged(double dParameter, double dValue) { + Q_UNUSED(dParameter); + // Enums are not currently represented using parameter space so it doesn't + // make sense to use the parameter here yet. if (m_iNoStates == 1) { - m_bPressed = (v == 1.0); + m_bPressed = (dValue == 1.0); } update(); } diff --git a/src/widget/wpushbutton.h b/src/widget/wpushbutton.h index f74a24a42b..ea044cf8dd 100644 --- a/src/widget/wpushbutton.h +++ b/src/widget/wpushbutton.h @@ -55,7 +55,7 @@ class WPushButton : public WWidget { void setStates(int iStatesW); public slots: - void onConnectedControlValueChanged(double); + void onConnectedControlChanged(double dParameter, double dValue); protected: virtual void paintEvent(QPaintEvent*); diff --git a/src/widget/wslidercomposed.cpp b/src/widget/wslidercomposed.cpp index a535f09cff..9d1a43050b 100644 --- a/src/widget/wslidercomposed.cpp +++ b/src/widget/wslidercomposed.cpp @@ -97,7 +97,8 @@ void WSliderComposed::setHandlePixmap(bool bHorizontal, const QString& filenameH m_iHandleLength = m_bHorizontal ? m_pHandle->width() : m_pHandle->height(); - onConnectedControlValueChanged(getControlParameter()); + // Value is unused in WSliderComposed. + onConnectedControlChanged(getControlParameter(), 0); update(); } } @@ -136,7 +137,7 @@ void WSliderComposed::mouseMoveEvent(QMouseEvent * e) { } // If we don't change this, then updates might be rejected in - // onConnectedControlValueChanged. + // onConnectedControlChanged. m_dOldValue = newValue; // Emit valueChanged signal @@ -158,7 +159,8 @@ void WSliderComposed::wheelEvent(QWheelEvent *e) { newValue = math_max(0.0, math_min(1.0, newValue)); setControlParameter(newValue); - onConnectedControlValueChanged(newValue); + // Value is unused in WSliderComposed. + onConnectedControlChanged(newValue, 0); update(); e->accept(); @@ -216,16 +218,19 @@ void WSliderComposed::paintEvent(QPaintEvent *) { } } -void WSliderComposed::onConnectedControlValueChanged(double dValue) { - if (!m_bDrag && m_dOldValue != dValue) { - m_dOldValue = dValue; +void WSliderComposed::onConnectedControlChanged(double dParameter, double) { + // WARNING: The second parameter to this method is unused and called with + // invalid values in parts of WSliderComposed. Do not use it unless you fix + // this. + if (!m_bDrag && m_dOldValue != dParameter) { + m_dOldValue = dParameter; // Calculate handle position if (!m_bHorizontal) { - dValue = 1.0 - dValue; + dParameter = 1.0 - dParameter; } int sliderLength = m_bHorizontal ? width() : height(); - m_iPos = static_cast(dValue * (sliderLength - m_iHandleLength)); + m_iPos = static_cast(dParameter * (sliderLength - m_iHandleLength)); if (m_iPos > (sliderLength - m_iHandleLength)) { m_iPos = sliderLength - m_iHandleLength; diff --git a/src/widget/wslidercomposed.h b/src/widget/wslidercomposed.h index 0ca1f8b615..b94adc9965 100644 --- a/src/widget/wslidercomposed.h +++ b/src/widget/wslidercomposed.h @@ -47,7 +47,7 @@ class WSliderComposed : public WWidget { inline bool isHorizontal() const { return m_bHorizontal; }; public slots: - void onConnectedControlValueChanged(double); + void onConnectedControlChanged(double dParameter, double dValue); void fillDebugTooltip(QStringList* debug); protected: diff --git a/src/widget/wstatuslight.cpp b/src/widget/wstatuslight.cpp index 0585826685..32817df906 100644 --- a/src/widget/wstatuslight.cpp +++ b/src/widget/wstatuslight.cpp @@ -116,8 +116,11 @@ void WStatusLight::setPixmap(int iState, const QString& filename, SizeMode mode) } } -void WStatusLight::onConnectedControlValueChanged(double v) { - int val = static_cast(v); +void WStatusLight::onConnectedControlChanged(double dParameter, double dValue) { + // Enums are not currently represented using parameter space so it doesn't + // make sense to use the parameter here yet. + Q_UNUSED(dParameter); + int val = static_cast(dValue); if (m_iPos == val) { return; } diff --git a/src/widget/wstatuslight.h b/src/widget/wstatuslight.h index 6f860b59eb..8faf6b8003 100644 --- a/src/widget/wstatuslight.h +++ b/src/widget/wstatuslight.h @@ -46,7 +46,7 @@ class WStatusLight : public WWidget { static SizeMode SizeModeFromString(QString str); public slots: - void onConnectedControlValueChanged(double v); + void onConnectedControlChanged(double dParameter, double dValue); protected: void paintEvent(QPaintEvent *); diff --git a/src/widget/wvumeter.cpp b/src/widget/wvumeter.cpp index 27202737f5..45e356a234 100644 --- a/src/widget/wvumeter.cpp +++ b/src/widget/wvumeter.cpp @@ -105,15 +105,16 @@ void WVuMeter::setPixmaps(const QString &vuFilename, } } -void WVuMeter::onConnectedControlValueChanged(double dValue) { - int idx = static_cast(dValue * m_iNoPos); +void WVuMeter::onConnectedControlChanged(double dParameter, double dValue) { + Q_UNUSED(dValue); + int idx = static_cast(dParameter * m_iNoPos); // Range check if (idx > m_iNoPos) idx = m_iNoPos; else if (idx < 0) idx = 0; - if (dValue > 0.) { + if (dParameter > 0.) { setPeak(idx); } else { // A 0.0 value is very unlikely except when the VU Meter is disabled diff --git a/src/widget/wvumeter.h b/src/widget/wvumeter.h index 44e94319ed..1a0d7633f3 100644 --- a/src/widget/wvumeter.h +++ b/src/widget/wvumeter.h @@ -39,7 +39,7 @@ class WVuMeter : public WWidget { void setPixmapBackground(const QString& filename); void setPixmaps(const QString &vuFilename, bool bHorizontal=false); - void onConnectedControlValueChanged(double fValue); + void onConnectedControlChanged(double dParameter, double dValue); protected slots: void updateState(int msecsElapsed); diff --git a/src/widget/wwidget.cpp b/src/widget/wwidget.cpp index 977cd6aa91..21e1049861 100644 --- a/src/widget/wwidget.cpp +++ b/src/widget/wwidget.cpp @@ -23,7 +23,7 @@ WWidget::WWidget(QWidget* parent, Qt::WindowFlags flags) : QWidget(parent, flags), - WBaseWidget(this), + WBaseWidget(this), m_activeTouchButton(Qt::NoButton) { m_pTouchShift = new ControlObjectSlave("[Controls]", "touch_shift"); setAttribute(Qt::WA_StaticContents); @@ -35,8 +35,9 @@ WWidget::~WWidget() { delete m_pTouchShift; } -void WWidget::onConnectedControlValueChanged(double value) { - Q_UNUSED(value); +void WWidget::onConnectedControlChanged(double dParameter, double dValue) { + Q_UNUSED(dParameter); + Q_UNUSED(dValue); update(); } diff --git a/src/widget/wwidget.h b/src/widget/wwidget.h index c4b32e9ca8..46fc969ace 100644 --- a/src/widget/wwidget.h +++ b/src/widget/wwidget.h @@ -45,7 +45,7 @@ class WWidget : public QWidget, public WBaseWidget { Q_PROPERTY(double value READ getControlParameterDisplay); - virtual void onConnectedControlValueChanged(double value); + virtual void onConnectedControlChanged(double dParameter, double dValue); protected: bool touchIsRightButton(); -- cgit v1.2.3