the solo state of a mixer fader is not exclusive any more and the solo state is preserved if the number of mixer faders changes
This commit is contained in:
parent
ae874ae0b4
commit
b66e22379a
3 changed files with 54 additions and 101 deletions
|
@ -4,6 +4,9 @@
|
||||||
|
|
||||||
- added new instrument pictures for "Recorder", "Streamer" and "Listener"
|
- added new instrument pictures for "Recorder", "Streamer" and "Listener"
|
||||||
|
|
||||||
|
- the solo state of a mixer fader is not exclusive any more and the solo
|
||||||
|
state is preserved if the number of mixer faders changes
|
||||||
|
|
||||||
|
|
||||||
3.3.2
|
3.3.2
|
||||||
|
|
||||||
|
|
|
@ -214,8 +214,8 @@ void CChannelFader::SetMute ( const bool bState )
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// only unmute if no other channel is on solo
|
// only unmute if we are not solot but an other channel is on solo
|
||||||
if ( !bOtherChannelIsSolo )
|
if ( !bOtherChannelIsSolo || IsSolo() )
|
||||||
{
|
{
|
||||||
// mute was unchecked, get current fader value and apply
|
// mute was unchecked, get current fader value and apply
|
||||||
emit gainValueChanged ( CalcFaderGain ( GetFaderLevel() ) );
|
emit gainValueChanged ( CalcFaderGain ( GetFaderLevel() ) );
|
||||||
|
@ -223,41 +223,16 @@ void CChannelFader::SetMute ( const bool bState )
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CChannelFader::ResetSoloState()
|
void CChannelFader::UpdateSoloState ( const bool bNewOtherSoloState )
|
||||||
{
|
|
||||||
// reset solo state -> since solo state means that this channel is not
|
|
||||||
// muted but all others, we simply have to uncheck the check box (make
|
|
||||||
// sure the setChecked does not fire a signal)
|
|
||||||
pcbSolo->blockSignals ( true );
|
|
||||||
{
|
|
||||||
pcbSolo->setChecked ( false );
|
|
||||||
}
|
|
||||||
pcbSolo->blockSignals ( false );
|
|
||||||
}
|
|
||||||
|
|
||||||
void CChannelFader::SetOtherSoloState ( const bool bState )
|
|
||||||
{
|
{
|
||||||
// store state (must be done before the SetMute() call!)
|
// store state (must be done before the SetMute() call!)
|
||||||
bOtherChannelIsSolo = bState;
|
bOtherChannelIsSolo = bNewOtherSoloState;
|
||||||
|
|
||||||
// check if we are in solo on state, in that case we first have to disable
|
// mute overwrites solo -> if mute is active, do not change anything
|
||||||
// our solo state since only one channel can be set to solo
|
|
||||||
if ( bState && pcbSolo->isChecked() )
|
|
||||||
{
|
|
||||||
// we do not want to fire a signal with the following set function
|
|
||||||
// -> block signals temporarily
|
|
||||||
pcbSolo->blockSignals ( true );
|
|
||||||
{
|
|
||||||
pcbSolo->setChecked ( false );
|
|
||||||
}
|
|
||||||
pcbSolo->blockSignals ( false );
|
|
||||||
}
|
|
||||||
|
|
||||||
// if other channel is solo, mute this channel, else enable channel gain
|
|
||||||
// (only enable channel gain if local mute switch is not set to on)
|
|
||||||
if ( !pcbMute->isChecked() )
|
if ( !pcbMute->isChecked() )
|
||||||
{
|
{
|
||||||
SetMute ( bState );
|
// mute channel if we are not solo but another channel is solo
|
||||||
|
SetMute ( ( !IsSolo() && bOtherChannelIsSolo ) );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -387,26 +362,26 @@ CAudioMixerBoard::CAudioMixerBoard ( QWidget* parent, Qt::WindowFlags ) :
|
||||||
QObject::connect ( vecpChanFader[18], SIGNAL ( gainValueChanged ( double ) ), this, SLOT ( OnGainValueChangedCh18 ( double ) ) );
|
QObject::connect ( vecpChanFader[18], SIGNAL ( gainValueChanged ( double ) ), this, SLOT ( OnGainValueChangedCh18 ( double ) ) );
|
||||||
QObject::connect ( vecpChanFader[19], SIGNAL ( gainValueChanged ( double ) ), this, SLOT ( OnGainValueChangedCh19 ( double ) ) );
|
QObject::connect ( vecpChanFader[19], SIGNAL ( gainValueChanged ( double ) ), this, SLOT ( OnGainValueChangedCh19 ( double ) ) );
|
||||||
|
|
||||||
QObject::connect ( vecpChanFader[0], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChangedCh0 ( int ) ) );
|
QObject::connect ( vecpChanFader[0], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChanged() ) );
|
||||||
QObject::connect ( vecpChanFader[1], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChangedCh1 ( int ) ) );
|
QObject::connect ( vecpChanFader[1], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChanged() ) );
|
||||||
QObject::connect ( vecpChanFader[2], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChangedCh2 ( int ) ) );
|
QObject::connect ( vecpChanFader[2], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChanged() ) );
|
||||||
QObject::connect ( vecpChanFader[3], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChangedCh3 ( int ) ) );
|
QObject::connect ( vecpChanFader[3], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChanged() ) );
|
||||||
QObject::connect ( vecpChanFader[4], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChangedCh4 ( int ) ) );
|
QObject::connect ( vecpChanFader[4], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChanged() ) );
|
||||||
QObject::connect ( vecpChanFader[5], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChangedCh5 ( int ) ) );
|
QObject::connect ( vecpChanFader[5], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChanged() ) );
|
||||||
QObject::connect ( vecpChanFader[6], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChangedCh6 ( int ) ) );
|
QObject::connect ( vecpChanFader[6], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChanged() ) );
|
||||||
QObject::connect ( vecpChanFader[7], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChangedCh7 ( int ) ) );
|
QObject::connect ( vecpChanFader[7], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChanged() ) );
|
||||||
QObject::connect ( vecpChanFader[8], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChangedCh8 ( int ) ) );
|
QObject::connect ( vecpChanFader[8], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChanged() ) );
|
||||||
QObject::connect ( vecpChanFader[9], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChangedCh9 ( int ) ) );
|
QObject::connect ( vecpChanFader[9], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChanged() ) );
|
||||||
QObject::connect ( vecpChanFader[10], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChangedCh10 ( int ) ) );
|
QObject::connect ( vecpChanFader[10], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChanged() ) );
|
||||||
QObject::connect ( vecpChanFader[11], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChangedCh11 ( int ) ) );
|
QObject::connect ( vecpChanFader[11], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChanged() ) );
|
||||||
QObject::connect ( vecpChanFader[12], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChangedCh12 ( int ) ) );
|
QObject::connect ( vecpChanFader[12], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChanged() ) );
|
||||||
QObject::connect ( vecpChanFader[13], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChangedCh13 ( int ) ) );
|
QObject::connect ( vecpChanFader[13], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChanged() ) );
|
||||||
QObject::connect ( vecpChanFader[14], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChangedCh14 ( int ) ) );
|
QObject::connect ( vecpChanFader[14], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChanged() ) );
|
||||||
QObject::connect ( vecpChanFader[15], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChangedCh15 ( int ) ) );
|
QObject::connect ( vecpChanFader[15], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChanged() ) );
|
||||||
QObject::connect ( vecpChanFader[16], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChangedCh16 ( int ) ) );
|
QObject::connect ( vecpChanFader[16], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChanged() ) );
|
||||||
QObject::connect ( vecpChanFader[17], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChangedCh17 ( int ) ) );
|
QObject::connect ( vecpChanFader[17], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChanged() ) );
|
||||||
QObject::connect ( vecpChanFader[18], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChangedCh18 ( int ) ) );
|
QObject::connect ( vecpChanFader[18], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChanged() ) );
|
||||||
QObject::connect ( vecpChanFader[19], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChangedCh19 ( int ) ) );
|
QObject::connect ( vecpChanFader[19], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChanged() ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
void CAudioMixerBoard::SetServerName ( const QString& strNewServerName )
|
void CAudioMixerBoard::SetServerName ( const QString& strNewServerName )
|
||||||
|
@ -465,18 +440,12 @@ void CAudioMixerBoard::ApplyNewConClientList ( CVector<CChannelInfo>& vecChanInf
|
||||||
// check if fader was already in use -> preserve gain value
|
// check if fader was already in use -> preserve gain value
|
||||||
if ( !vecpChanFader[i]->IsVisible() )
|
if ( !vecpChanFader[i]->IsVisible() )
|
||||||
{
|
{
|
||||||
|
// the fader was not in use, reset everything for new client
|
||||||
vecpChanFader[i]->Reset();
|
vecpChanFader[i]->Reset();
|
||||||
|
|
||||||
// show fader
|
// show fader
|
||||||
vecpChanFader[i]->Show();
|
vecpChanFader[i]->Show();
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
// by definition disable all Solo switches if the number of
|
|
||||||
// channels at the server has changed
|
|
||||||
vecpChanFader[i]->SetOtherSoloState ( false );
|
|
||||||
vecpChanFader[i]->ResetSoloState();
|
|
||||||
}
|
|
||||||
|
|
||||||
// restore gain (if new name is different from the current one)
|
// restore gain (if new name is different from the current one)
|
||||||
if ( vecpChanFader[i]->GetReceivedName().compare ( vecChanInfo[j].strName ) )
|
if ( vecpChanFader[i]->GetReceivedName().compare ( vecChanInfo[j].strName ) )
|
||||||
|
@ -523,36 +492,37 @@ void CAudioMixerBoard::ApplyNewConClientList ( CVector<CChannelInfo>& vecChanInf
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// update the solo states since if any channel was on solo and a new client
|
||||||
|
// has just connected, the new channel must be muted
|
||||||
|
UpdateSoloStates();
|
||||||
|
|
||||||
// emit status of connected clients
|
// emit status of connected clients
|
||||||
emit NumClientsChanged ( iNumConnectedClients );
|
emit NumClientsChanged ( iNumConnectedClients );
|
||||||
}
|
}
|
||||||
|
|
||||||
void CAudioMixerBoard::OnChSoloStateChanged ( const int iChannelIdx,
|
void CAudioMixerBoard::UpdateSoloStates()
|
||||||
const int iValue )
|
|
||||||
{
|
{
|
||||||
// if channel iChannelIdx has just activated the solo switch, mute all
|
// first check if any channel has a solo state active
|
||||||
// other channels, else enable them again
|
bool bAnyChannelIsSolo = false;
|
||||||
const bool bSetOtherSoloState =
|
|
||||||
( static_cast<Qt::CheckState> ( iValue ) == Qt::Checked );
|
|
||||||
|
|
||||||
// apply "other solo state" for all other channels
|
|
||||||
for ( int i = 0; i < MAX_NUM_CHANNELS; i++ )
|
for ( int i = 0; i < MAX_NUM_CHANNELS; i++ )
|
||||||
{
|
{
|
||||||
if ( i != iChannelIdx )
|
// check if fader is in use and has solo state active
|
||||||
|
if ( vecpChanFader[i]->IsVisible() && vecpChanFader[i]->IsSolo() )
|
||||||
{
|
{
|
||||||
// check if fader is in use
|
bAnyChannelIsSolo = true;
|
||||||
if ( vecpChanFader[i]->IsVisible() )
|
continue;
|
||||||
{
|
|
||||||
vecpChanFader[i]->SetOtherSoloState ( bSetOtherSoloState );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// set "other solo state" always to false for the current fader at which the
|
// now update the solo state of all active faders
|
||||||
// status was changed because if solo is enabled, it has to be "false" and
|
for ( int i = 0; i < MAX_NUM_CHANNELS; i++ )
|
||||||
// in case solo is just disabled (check was removed by the user), also no
|
{
|
||||||
// other channel can be solo at this time
|
if ( vecpChanFader[i]->IsVisible() )
|
||||||
vecpChanFader[iChannelIdx]->SetOtherSoloState ( false );
|
{
|
||||||
|
vecpChanFader[i]->UpdateSoloState ( bAnyChannelIsSolo );
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CAudioMixerBoard::OnGainValueChanged ( const int iChannelIdx,
|
void CAudioMixerBoard::OnGainValueChanged ( const int iChannelIdx,
|
||||||
|
|
|
@ -52,11 +52,10 @@ public:
|
||||||
void Show() { pFrame->show(); }
|
void Show() { pFrame->show(); }
|
||||||
void Hide() { pFrame->hide(); }
|
void Hide() { pFrame->hide(); }
|
||||||
bool IsVisible() { return pLabel->isVisible(); }
|
bool IsVisible() { return pLabel->isVisible(); }
|
||||||
|
bool IsSolo() { return pcbSolo->isChecked(); }
|
||||||
void SetGUIDesign ( const EGUIDesign eNewDesign );
|
void SetGUIDesign ( const EGUIDesign eNewDesign );
|
||||||
|
|
||||||
void ResetSoloState();
|
void UpdateSoloState ( const bool bNewOtherSoloState );
|
||||||
void SetOtherSoloState ( const bool bState );
|
|
||||||
|
|
||||||
void SetFaderLevel ( const int iLevel );
|
void SetFaderLevel ( const int iLevel );
|
||||||
int GetFaderLevel() { return pFader->value(); }
|
int GetFaderLevel() { return pFader->value(); }
|
||||||
void Reset();
|
void Reset();
|
||||||
|
@ -107,8 +106,8 @@ public:
|
||||||
protected:
|
protected:
|
||||||
int GetStoredFaderLevel ( const CChannelInfo& ChanInfo );
|
int GetStoredFaderLevel ( const CChannelInfo& ChanInfo );
|
||||||
void StoreFaderLevel ( CChannelFader* pChanFader );
|
void StoreFaderLevel ( CChannelFader* pChanFader );
|
||||||
|
void UpdateSoloStates();
|
||||||
|
|
||||||
void OnChSoloStateChanged ( const int iChannelIdx, const int iValue );
|
|
||||||
void OnGainValueChanged ( const int iChannelIdx, const double dValue );
|
void OnGainValueChanged ( const int iChannelIdx, const double dValue );
|
||||||
|
|
||||||
CVector<CChannelFader*> vecpChanFader;
|
CVector<CChannelFader*> vecpChanFader;
|
||||||
|
@ -138,26 +137,7 @@ public slots:
|
||||||
void OnGainValueChangedCh18 ( double dValue ) { OnGainValueChanged ( 18, dValue ); }
|
void OnGainValueChangedCh18 ( double dValue ) { OnGainValueChanged ( 18, dValue ); }
|
||||||
void OnGainValueChangedCh19 ( double dValue ) { OnGainValueChanged ( 19, dValue ); }
|
void OnGainValueChangedCh19 ( double dValue ) { OnGainValueChanged ( 19, dValue ); }
|
||||||
|
|
||||||
void OnChSoloStateChangedCh0 ( int value ) { OnChSoloStateChanged ( 0, value ); }
|
void OnChSoloStateChanged() { UpdateSoloStates(); }
|
||||||
void OnChSoloStateChangedCh1 ( int value ) { OnChSoloStateChanged ( 1, value ); }
|
|
||||||
void OnChSoloStateChangedCh2 ( int value ) { OnChSoloStateChanged ( 2, value ); }
|
|
||||||
void OnChSoloStateChangedCh3 ( int value ) { OnChSoloStateChanged ( 3, value ); }
|
|
||||||
void OnChSoloStateChangedCh4 ( int value ) { OnChSoloStateChanged ( 4, value ); }
|
|
||||||
void OnChSoloStateChangedCh5 ( int value ) { OnChSoloStateChanged ( 5, value ); }
|
|
||||||
void OnChSoloStateChangedCh6 ( int value ) { OnChSoloStateChanged ( 6, value ); }
|
|
||||||
void OnChSoloStateChangedCh7 ( int value ) { OnChSoloStateChanged ( 7, value ); }
|
|
||||||
void OnChSoloStateChangedCh8 ( int value ) { OnChSoloStateChanged ( 8, value ); }
|
|
||||||
void OnChSoloStateChangedCh9 ( int value ) { OnChSoloStateChanged ( 9, value ); }
|
|
||||||
void OnChSoloStateChangedCh10 ( int value ) { OnChSoloStateChanged ( 10, value ); }
|
|
||||||
void OnChSoloStateChangedCh11 ( int value ) { OnChSoloStateChanged ( 11, value ); }
|
|
||||||
void OnChSoloStateChangedCh12 ( int value ) { OnChSoloStateChanged ( 12, value ); }
|
|
||||||
void OnChSoloStateChangedCh13 ( int value ) { OnChSoloStateChanged ( 13, value ); }
|
|
||||||
void OnChSoloStateChangedCh14 ( int value ) { OnChSoloStateChanged ( 14, value ); }
|
|
||||||
void OnChSoloStateChangedCh15 ( int value ) { OnChSoloStateChanged ( 15, value ); }
|
|
||||||
void OnChSoloStateChangedCh16 ( int value ) { OnChSoloStateChanged ( 16, value ); }
|
|
||||||
void OnChSoloStateChangedCh17 ( int value ) { OnChSoloStateChanged ( 17, value ); }
|
|
||||||
void OnChSoloStateChangedCh18 ( int value ) { OnChSoloStateChanged ( 18, value ); }
|
|
||||||
void OnChSoloStateChangedCh19 ( int value ) { OnChSoloStateChanged ( 19, value ); }
|
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void ChangeChanGain ( int iId, double dGain );
|
void ChangeChanGain ( int iId, double dGain );
|
||||||
|
|
Loading…
Reference in a new issue