diff --git a/src/audiomixerboard.cpp b/src/audiomixerboard.cpp
index b333994d..e4eecb4e 100755
--- a/src/audiomixerboard.cpp
+++ b/src/audiomixerboard.cpp
@@ -27,53 +27,100 @@
/* Implementation *************************************************************/
CChannelFader::CChannelFader ( QWidget* pNW,
- QHBoxLayout* pParentLayout,
- QString sName )
+ QHBoxLayout* pParentLayout )
{
// create new GUI control objects and store pointers to them
- pMainGrid = new QGridLayout();
- pFader = new QSlider ( Qt::Vertical, pNW );
- pLabel = new QLabel ( "", pNW );
+ pMainGrid = new QVBoxLayout();
+ pFader = new QSlider ( Qt::Vertical, pNW );
+ pcbMute = new QCheckBox ( "Mute", pNW );
+ pcbSolo = new QCheckBox ( "Solo", pNW );
+ pLabel = new QLabel ( "", pNW );
+
+ // setup layout
+ pMainGrid->setSpacing ( 2 );
// setup slider
pFader->setPageStep ( 1 );
pFader->setTickPosition ( QSlider::TicksBothSides );
pFader->setRange ( 0, AUD_MIX_FADER_MAX );
pFader->setTickInterval ( AUD_MIX_FADER_MAX / 9 );
- pFader->setValue ( 0 ); // set init value
- // set label text
- pLabel->setText ( sName );
- // add slider to grid as position 0 / 0
- pMainGrid->addWidget( pFader, 0, 0, Qt::AlignHCenter );
+// TEST solo functionality is not yet implemented, disable control
+pcbSolo->setEnabled ( false );
- // add label to grid as position 1 / 0
- pMainGrid->addWidget( pLabel, 1, 0, Qt::AlignHCenter );
- pParentLayout->insertLayout ( 0, pMainGrid );
+ // add user controls to grid
+ pMainGrid->addWidget( pFader, 0, Qt::AlignHCenter );
+ pMainGrid->addWidget( pcbMute, 0, Qt::AlignHCenter );
+ pMainGrid->addWidget( pcbSolo, 0, Qt::AlignHCenter );
+ pMainGrid->addWidget( pLabel, 0, Qt::AlignHCenter );
+
+ // add fader layout to audio mixer board layout
+ pParentLayout->addLayout ( pMainGrid );
+
+ // reset current fader
+ Reset();
// add help text to controls
- pFader->setWhatsThis ( "Mixer Fader: Adjusts the audio level of this "
- "channel. All connected clients at the server will be assigned an audio "
- "fader at each client" );
+ pFader->setWhatsThis ( "Mixer Fader: Adjusts the audio level of "
+ "this channel. All connected clients at the server will be assigned "
+ "an audio fader at each client." );
- pLabel->setWhatsThis ( "Mixer Fader Label: Label (fader tag) identifying "
- "the connected client. The tag name can be set in the clients main window." );
+ pcbMute->setWhatsThis ( "Mute: Mutes the current channel." );
+
+ pcbSolo->setWhatsThis ( "Solo: If Solo checkbox is checked, only "
+ "the current channel is active and all other channels are muted. Only "
+ "one channel at a time can be set to solo." );
+
+ pLabel->setWhatsThis ( "Mixer Fader Label: Label (fader tag) "
+ "identifying the connected client. The tag name can be set in the "
+ "clients main window." );
// connections -------------------------------------------------------------
QObject::connect ( pFader, SIGNAL ( valueChanged ( int ) ),
- this, SLOT ( OnValueChanged ( int ) ) );
+ this, SLOT ( OnFaderValueChanged ( int ) ) );
+
+ QObject::connect ( pcbMute, SIGNAL ( stateChanged ( int ) ),
+ this, SLOT ( OnMuteStateChanged ( int ) ) );
}
-void CChannelFader::OnValueChanged ( int value )
+void CChannelFader::Reset()
{
- // convert actual slider range in gain values
- // and normalize so that maximum gain is 1
- const double dCurGain = static_cast ( value ) / AUD_MIX_FADER_MAX;
+ // init gain value -> maximum value as definition according to server
+ pFader->setValue ( AUD_MIX_FADER_MAX );
- emit valueChanged ( dCurGain );
+ // reset mute/solo check boxes
+ pcbMute->setChecked ( false );
+ pcbSolo->setChecked ( false );
+
+ // clear label
+ pLabel->setText ( "" );
+}
+
+void CChannelFader::OnFaderValueChanged ( int value )
+{
+ // if mute flag is set, do not apply the new fader value
+ if ( pcbMute->checkState() == Qt::Unchecked )
+ {
+ // emit signal for new fader gain value
+ emit faderValueChanged ( CalcFaderGain ( value ) );
+ }
+}
+
+void CChannelFader::OnMuteStateChanged ( int value )
+{
+ if ( static_cast ( value ) == Qt::Checked )
+ {
+ // mute channel -> send gain of 0
+ emit faderValueChanged ( 0 );
+ }
+ else
+ {
+ // mute was unchecked, get current fader value and apply
+ emit faderValueChanged ( CalcFaderGain ( pFader->value() ) );
+ }
}
void CChannelFader::SetText ( const QString sText )
@@ -90,7 +137,9 @@ void CChannelFader::SetText ( const QString sText )
}
else
{
- sModText.append ( QString ( "
" ) );
+ // insert line break at the beginning of the string -> make sure
+ // if we only have one line that the text appears at the bottom line
+ sModText.insert ( 0, QString ( "
" ) );
}
// use bold text
@@ -100,6 +149,13 @@ void CChannelFader::SetText ( const QString sText )
pLabel->setText ( sModText );
}
+double CChannelFader::CalcFaderGain ( const int value )
+{
+ // convert actual slider range in gain values
+ // and normalize so that maximum gain is 1
+ return static_cast ( value ) / AUD_MIX_FADER_MAX;
+}
+
CAudioMixerBoard::CAudioMixerBoard ( QWidget* parent, Qt::WindowFlags f ) : QFrame ( parent, f )
{
// set modified style
@@ -115,7 +171,7 @@ CAudioMixerBoard::CAudioMixerBoard ( QWidget* parent, Qt::WindowFlags f ) : QFra
vecpChanFader.Init ( MAX_NUM_CHANNELS );
for ( int i = 0; i < MAX_NUM_CHANNELS; i++ )
{
- vecpChanFader[i] = new CChannelFader ( this, pMainLayout, "" );
+ vecpChanFader[i] = new CChannelFader ( this, pMainLayout );
vecpChanFader[i]->Hide();
}
@@ -123,16 +179,16 @@ CAudioMixerBoard::CAudioMixerBoard ( QWidget* parent, Qt::WindowFlags f ) : QFra
// connections -------------------------------------------------------------
// CODE TAG: MAX_NUM_CHANNELS_TAG
// make sure we have MAX_NUM_CHANNELS connections!!!
- QObject::connect ( vecpChanFader[0], SIGNAL ( valueChanged ( double ) ), this, SLOT ( OnValueChangedCh0 ( double ) ) );
- QObject::connect ( vecpChanFader[1], SIGNAL ( valueChanged ( double ) ), this, SLOT ( OnValueChangedCh1 ( double ) ) );
- QObject::connect ( vecpChanFader[2], SIGNAL ( valueChanged ( double ) ), this, SLOT ( OnValueChangedCh2 ( double ) ) );
- QObject::connect ( vecpChanFader[3], SIGNAL ( valueChanged ( double ) ), this, SLOT ( OnValueChangedCh3 ( double ) ) );
- QObject::connect ( vecpChanFader[4], SIGNAL ( valueChanged ( double ) ), this, SLOT ( OnValueChangedCh4 ( double ) ) );
- QObject::connect ( vecpChanFader[5], SIGNAL ( valueChanged ( double ) ), this, SLOT ( OnValueChangedCh5 ( double ) ) );
- QObject::connect ( vecpChanFader[6], SIGNAL ( valueChanged ( double ) ), this, SLOT ( OnValueChangedCh6 ( double ) ) );
- QObject::connect ( vecpChanFader[7], SIGNAL ( valueChanged ( double ) ), this, SLOT ( OnValueChangedCh7 ( double ) ) );
- QObject::connect ( vecpChanFader[8], SIGNAL ( valueChanged ( double ) ), this, SLOT ( OnValueChangedCh8 ( double ) ) );
- QObject::connect ( vecpChanFader[9], SIGNAL ( valueChanged ( double ) ), this, SLOT ( OnValueChangedCh9 ( double ) ) );
+ QObject::connect ( vecpChanFader[0], SIGNAL ( faderValueChanged ( double ) ), this, SLOT ( OnFaderValueChangedCh0 ( double ) ) );
+ QObject::connect ( vecpChanFader[1], SIGNAL ( faderValueChanged ( double ) ), this, SLOT ( OnFaderValueChangedCh1 ( double ) ) );
+ QObject::connect ( vecpChanFader[2], SIGNAL ( faderValueChanged ( double ) ), this, SLOT ( OnFaderValueChangedCh2 ( double ) ) );
+ QObject::connect ( vecpChanFader[3], SIGNAL ( faderValueChanged ( double ) ), this, SLOT ( OnFaderValueChangedCh3 ( double ) ) );
+ QObject::connect ( vecpChanFader[4], SIGNAL ( faderValueChanged ( double ) ), this, SLOT ( OnFaderValueChangedCh4 ( double ) ) );
+ QObject::connect ( vecpChanFader[5], SIGNAL ( faderValueChanged ( double ) ), this, SLOT ( OnFaderValueChangedCh5 ( double ) ) );
+ QObject::connect ( vecpChanFader[6], SIGNAL ( faderValueChanged ( double ) ), this, SLOT ( OnFaderValueChangedCh6 ( double ) ) );
+ QObject::connect ( vecpChanFader[7], SIGNAL ( faderValueChanged ( double ) ), this, SLOT ( OnFaderValueChangedCh7 ( double ) ) );
+ QObject::connect ( vecpChanFader[8], SIGNAL ( faderValueChanged ( double ) ), this, SLOT ( OnFaderValueChangedCh8 ( double ) ) );
+ QObject::connect ( vecpChanFader[9], SIGNAL ( faderValueChanged ( double ) ), this, SLOT ( OnFaderValueChangedCh9 ( double ) ) );
}
void CAudioMixerBoard::HideAll()
@@ -160,7 +216,7 @@ void CAudioMixerBoard::ApplyNewConClientList ( CVector& vecCh
// check if fader was already in use -> preserve gain value
if ( !vecpChanFader[i]->IsVisible() )
{
- vecpChanFader[i]->ResetGain();
+ vecpChanFader[i]->Reset();
// show fader
vecpChanFader[i]->Show();
diff --git a/src/audiomixerboard.h b/src/audiomixerboard.h
index a2aa2efd..aefbb9a0 100755
--- a/src/audiomixerboard.h
+++ b/src/audiomixerboard.h
@@ -27,6 +27,7 @@
#include
#include
+#include
#include
#include
#include
@@ -47,33 +48,39 @@ class CChannelFader : public QObject
Q_OBJECT
public:
- CChannelFader ( QWidget* pNW, QHBoxLayout* pParentLayout, QString sName );
+ CChannelFader ( QWidget* pNW, QHBoxLayout* pParentLayout );
~CChannelFader()
{
pLabel->close();
+ pcbMute->close();
+ pcbSolo->close();
pFader->close();
// TODO get rid of pMainGrid
}
void SetText ( const QString sText );
- void Show() { pLabel->show(); pFader->show(); }
- void Hide() { pLabel->hide(); pFader->hide(); }
+ void Show() { pLabel->show(); pcbMute->show(); pcbSolo->show(); pFader->show(); }
+ void Hide() { pLabel->hide(); pcbMute->hide(); pcbSolo->hide(); pFader->hide(); }
bool IsVisible() { return pLabel->isVisible(); }
- // init gain value -> maximum value as definition according to server
- void ResetGain() { pFader->setValue ( AUD_MIX_FADER_MAX ); }
+ void Reset();
protected:
- QGridLayout* pMainGrid;
+ double CalcFaderGain ( const int value );
+
+ QVBoxLayout* pMainGrid;
QSlider* pFader;
+ QCheckBox* pcbMute;
+ QCheckBox* pcbSolo;
QLabel* pLabel;
public slots:
- void OnValueChanged ( int value );
+ void OnFaderValueChanged ( int value );
+ void OnMuteStateChanged ( int value );
signals:
- void valueChanged ( double value );
+ void faderValueChanged ( double value );
};
@@ -96,20 +103,19 @@ protected:
public slots:
// CODE TAG: MAX_NUM_CHANNELS_TAG
// make sure we have MAX_NUM_CHANNELS connections!!!
- void OnValueChangedCh0 ( double dValue ) { emit ChangeChanGain ( 0, dValue ); }
- void OnValueChangedCh1 ( double dValue ) { emit ChangeChanGain ( 1, dValue ); }
- void OnValueChangedCh2 ( double dValue ) { emit ChangeChanGain ( 2, dValue ); }
- void OnValueChangedCh3 ( double dValue ) { emit ChangeChanGain ( 3, dValue ); }
- void OnValueChangedCh4 ( double dValue ) { emit ChangeChanGain ( 4, dValue ); }
- void OnValueChangedCh5 ( double dValue ) { emit ChangeChanGain ( 5, dValue ); }
- void OnValueChangedCh6 ( double dValue ) { emit ChangeChanGain ( 6, dValue ); }
- void OnValueChangedCh7 ( double dValue ) { emit ChangeChanGain ( 7, dValue ); }
- void OnValueChangedCh8 ( double dValue ) { emit ChangeChanGain ( 8, dValue ); }
- void OnValueChangedCh9 ( double dValue ) { emit ChangeChanGain ( 9, dValue ); }
+ void OnFaderValueChangedCh0 ( double dValue ) { emit ChangeChanGain ( 0, dValue ); }
+ void OnFaderValueChangedCh1 ( double dValue ) { emit ChangeChanGain ( 1, dValue ); }
+ void OnFaderValueChangedCh2 ( double dValue ) { emit ChangeChanGain ( 2, dValue ); }
+ void OnFaderValueChangedCh3 ( double dValue ) { emit ChangeChanGain ( 3, dValue ); }
+ void OnFaderValueChangedCh4 ( double dValue ) { emit ChangeChanGain ( 4, dValue ); }
+ void OnFaderValueChangedCh5 ( double dValue ) { emit ChangeChanGain ( 5, dValue ); }
+ void OnFaderValueChangedCh6 ( double dValue ) { emit ChangeChanGain ( 6, dValue ); }
+ void OnFaderValueChangedCh7 ( double dValue ) { emit ChangeChanGain ( 7, dValue ); }
+ void OnFaderValueChangedCh8 ( double dValue ) { emit ChangeChanGain ( 8, dValue ); }
+ void OnFaderValueChangedCh9 ( double dValue ) { emit ChangeChanGain ( 9, dValue ); }
signals:
void ChangeChanGain ( int iId, double dGain );
};
-
#endif // MIXERBOARD_H__FD6B49E1606C2AC__INCLUDED_
diff --git a/src/llconclientdlg.cpp b/src/llconclientdlg.cpp
index 5e72a608..b23a8f6e 100755
--- a/src/llconclientdlg.cpp
+++ b/src/llconclientdlg.cpp
@@ -37,7 +37,8 @@ CLlconClientDlg::CLlconClientDlg ( CClient* pNCliP, QWidget* parent,
// add help text to controls
QString strInpLevH = tr ( "Input level meter: Shows the level of the "
"input audio signal of the sound card. Overload should be avoided." );
- TextLabelInputLevel->setWhatsThis ( strInpLevH );
+ TextLabelInputLevelL->setWhatsThis ( strInpLevH );
+ TextLabelInputLevelR->setWhatsThis ( strInpLevH );
MultiColorLEDBarInputLevelL->setWhatsThis ( strInpLevH );
MultiColorLEDBarInputLevelR->setWhatsThis ( strInpLevH );
diff --git a/src/llconclientdlgbase.ui b/src/llconclientdlgbase.ui
index 02692349..d4adaf2d 100755
--- a/src/llconclientdlgbase.ui
+++ b/src/llconclientdlgbase.ui
@@ -5,7 +5,7 @@
0
0
- 520
+ 531
324
@@ -83,7 +83,7 @@
0
-
-
+
0
@@ -99,7 +99,7 @@
-
-
+
0