diff --git a/ChangeLog b/ChangeLog index ec4b0f85..f5c839ca 100644 --- a/ChangeLog +++ b/ChangeLog @@ -21,10 +21,10 @@ TODO grouping does not work as expected: - - fader shall not have the same value but only use the increment from the moved fader - vertical space between check boxes should be smaller - get rid of bIsSelected +TODO minimum height of faders (dependent on style) diff --git a/src/audiomixerboard.cpp b/src/audiomixerboard.cpp index 9132f316..a76a79f1 100755 --- a/src/audiomixerboard.cpp +++ b/src/audiomixerboard.cpp @@ -313,6 +313,7 @@ void CChannelFader::Reset() // init gain and pan value -> maximum value as definition according to server pFader->setValue ( AUD_MIX_FADER_MAX ); + iPreviousFaderLevel = AUD_MIX_FADER_MAX; pPan->setValue ( AUD_MIX_PAN_MAX / 2 ); // reset mute/solo/select check boxes and level meter @@ -405,7 +406,9 @@ void CChannelFader::SendFaderLevelToServer ( const int iLevel ) ( !bOtherChannelIsSolo || IsSolo() ) ) { // emit signal for new fader gain value - emit gainValueChanged ( CalcFaderGain ( iLevel ), bIsMyOwnFader ); + emit gainValueChanged ( CalcFaderGain ( iLevel ), bIsMyOwnFader, iLevel - iPreviousFaderLevel ); + + iPreviousFaderLevel = iLevel; } } @@ -425,7 +428,7 @@ void CChannelFader::SetMute ( const bool bState ) if ( bState ) { // mute channel -> send gain of 0 - emit gainValueChanged ( 0, bIsMyOwnFader ); + emit gainValueChanged ( 0, bIsMyOwnFader, 0 ); } else { @@ -433,7 +436,7 @@ void CChannelFader::SetMute ( const bool bState ) if ( !bOtherChannelIsSolo || IsSolo() ) { // mute was unchecked, get current fader value and apply - emit gainValueChanged ( CalcFaderGain ( GetFaderLevel() ), bIsMyOwnFader ); + emit gainValueChanged ( CalcFaderGain ( GetFaderLevel() ), bIsMyOwnFader, 0 ); } } } @@ -698,7 +701,7 @@ inline void CAudioMixerBoard::connectFaderSignalsToMixerBoardSlots() { int iCurChanID = slotId - 1; - void ( CAudioMixerBoard::* pGainValueChanged )( double, bool ) = + void ( CAudioMixerBoard::* pGainValueChanged )( double, bool, int ) = &CAudioMixerBoardSlots::OnChGainValueChanged; void ( CAudioMixerBoard::* pPanValueChanged )( double ) = @@ -1029,7 +1032,8 @@ void CAudioMixerBoard::UpdateSoloStates() void CAudioMixerBoard::UpdateGainValue ( const int iChannelIdx, const double dValue, - const bool bIsMyOwnFader ) + const bool bIsMyOwnFader, + const int iDiffLevel ) { // update current gain emit ChangeChanGain ( iChannelIdx, dValue, bIsMyOwnFader ); @@ -1048,7 +1052,7 @@ void CAudioMixerBoard::UpdateGainValue ( const int iChannelIdx, vecpChanFader[i]->SetFaderIsSelect ( false ); // "move" faders with moving fader level - vecpChanFader[i]->SetFaderLevel ( vecpChanFader[iChannelIdx]->GetFaderLevel() ); + vecpChanFader[i]->SetFaderLevel ( vecpChanFader[i]->GetFaderLevel() + iDiffLevel ); // back to selected status vecpChanFader[i]->SetFaderIsSelect ( true ); diff --git a/src/audiomixerboard.h b/src/audiomixerboard.h index e690db2e..dad461aa 100755 --- a/src/audiomixerboard.h +++ b/src/audiomixerboard.h @@ -111,6 +111,7 @@ protected: bool bOtherChannelIsSolo; bool bIsMyOwnFader; bool bIsSelected; + int iPreviousFaderLevel; public slots: void OnLevelValueChanged ( int value ) { SendFaderLevelToServer ( value ); } @@ -119,7 +120,7 @@ public slots: void OnSelectStateChanged ( int value ); signals: - void gainValueChanged ( double value, bool bIsMyOwnFader ); + void gainValueChanged ( double value, bool bIsMyOwnFader, int iDiffLevel ); void panValueChanged ( double value ); void soloStateChanged ( int value ); }; @@ -128,13 +129,14 @@ template class CAudioMixerBoardSlots : public CAudioMixerBoardSlots { public: - void OnChGainValueChanged ( double dValue, bool bIsMyOwnFader ) { UpdateGainValue ( slotId - 1, dValue, bIsMyOwnFader ); } + void OnChGainValueChanged ( double dValue, bool bIsMyOwnFader, int iDiffLevel ) { UpdateGainValue ( slotId - 1, dValue, bIsMyOwnFader, iDiffLevel ); } void OnChPanValueChanged ( double dValue ) { UpdatePanValue ( slotId - 1, dValue ); } protected: virtual void UpdateGainValue ( const int iChannelIdx, const double dValue, - const bool bIsMyOwnFader ) = 0; + const bool bIsMyOwnFader, + const int iDiffLevel ) = 0; virtual void UpdatePanValue ( const int iChannelIdx, const double dValue ) = 0; }; @@ -223,7 +225,8 @@ protected: virtual void UpdateGainValue ( const int iChannelIdx, const double dValue, - const bool bIsMyOwnFader ); + const bool bIsMyOwnFader, + const int iDiffLevel ); virtual void UpdatePanValue ( const int iChannelIdx, const double dValue );