diff --git a/Jamulus.pro b/Jamulus.pro index 04ea0f4c2f..4f25a8d04b 100644 --- a/Jamulus.pro +++ b/Jamulus.pro @@ -729,6 +729,10 @@ DISTFILES += ChangeLog \ src/res/CLEDRedSmall.png \ src/res/CLEDYellow.png \ src/res/CLEDYellowSmall.png \ + src/res/LEDBlackSmall.png \ + src/res/LEDGreenSmall.png \ + src/res/LEDRedSmall.png \ + src/res/LEDYellowSmall.png \ src/res/IndicatorGreen.png \ src/res/IndicatorYellow.png \ src/res/IndicatorRed.png \ diff --git a/src/audiomixerboard.cpp b/src/audiomixerboard.cpp index 9a2083efff..3ffa3d1005 100644 --- a/src/audiomixerboard.cpp +++ b/src/audiomixerboard.cpp @@ -219,28 +219,24 @@ void CChannelFader::SetGUIDesign ( const EGUIDesign eNewDesign ) pLabelGrid->addWidget ( plblLabel, 0, Qt::AlignVCenter ); // label next to icons pLabelInstBox->setMinimumHeight ( 52 ); // maximum height of the instrument+flag pictures - pFader->setMinimumHeight ( 120 ); // if this value is too small, the fader might not be movable with the mouse for fancy skin (#292) pPan->setFixedSize ( 50, 50 ); pPanLabel->setText ( tr ( "PAN" ) ); pcbMute->setText ( tr ( "MUTE" ) ); pcbSolo->setText ( tr ( "SOLO" ) ); - strGroupBaseText = tr ( "GRP" ); - plbrChannelLevel->SetLevelMeterType ( CLevelMeter::MT_LED ); + strGroupBaseText = tr ( "GRP" ); iInstrPicMaxWidth = INVALID_INDEX; // no instrument picture scaling break; case GD_SLIMFADER: pLabelPictGrid->addWidget ( plblLabel, 0, Qt::AlignHCenter ); // label below icons pLabelInstBox->setMinimumHeight ( 130 ); // maximum height of the instrument+flag+label - pFader->setMinimumHeight ( 85 ); pPan->setFixedSize ( 28, 28 ); pFader->setTickPosition ( QSlider::NoTicks ); pFader->setStyleSheet ( "" ); pPanLabel->setText ( tr ( "Pan" ) ); pcbMute->setText ( tr ( "M" ) ); pcbSolo->setText ( tr ( "S" ) ); - strGroupBaseText = tr ( "G" ); - plbrChannelLevel->SetLevelMeterType ( CLevelMeter::MT_SLIM_BAR ); + strGroupBaseText = tr ( "G" ); iInstrPicMaxWidth = 18; // scale instrument picture to avoid enlarging the width by the picture break; @@ -250,13 +246,11 @@ void CChannelFader::SetGUIDesign ( const EGUIDesign eNewDesign ) pFader->setStyleSheet ( "" ); pLabelGrid->addWidget ( plblLabel, 0, Qt::AlignVCenter ); // label next to icons pLabelInstBox->setMinimumHeight ( 52 ); // maximum height of the instrument+flag pictures - pFader->setMinimumHeight ( 85 ); pPan->setFixedSize ( 50, 50 ); pPanLabel->setText ( tr ( "Pan" ) ); pcbMute->setText ( tr ( "Mute" ) ); pcbSolo->setText ( tr ( "Solo" ) ); - strGroupBaseText = tr ( "Grp" ); - plbrChannelLevel->SetLevelMeterType ( CLevelMeter::MT_BAR ); + strGroupBaseText = tr ( "Grp" ); iInstrPicMaxWidth = INVALID_INDEX; // no instrument picture scaling break; } @@ -268,6 +262,45 @@ void CChannelFader::SetGUIDesign ( const EGUIDesign eNewDesign ) SetChannelInfos ( cReceivedChanInfo ); } +void CChannelFader::SetMeterStyle ( const EMeterStyle eNewMeterStyle ) +{ + eMeterStyle = eNewMeterStyle; + + switch ( eNewMeterStyle ) + { + case MT_BAR: + plbrChannelLevel->SetLevelMeterType ( CLevelMeter::MT_BAR ); + // Fader height controls the distribution of the LEDs, if the value is too small the fader might not be movable + pFader->setMinimumHeight ( 120 ); + break; + + case MT_SLIM_BAR: + plbrChannelLevel->SetLevelMeterType ( CLevelMeter::MT_SLIM_BAR ); + // Fader height controls the distribution of the LEDs, if the value is too small the fader might not be movable + pFader->setMinimumHeight ( 85 ); + break; + + case MT_SLIM_LED: + plbrChannelLevel->SetLevelMeterType ( CLevelMeter::MT_SLIM_LED ); + // Fader height controls the distribution of the LEDs, if the value is too small the fader might not be movable + pFader->setMinimumHeight ( 162 ); + break; + + case MT_SMALL_LED: + plbrChannelLevel->SetLevelMeterType ( CLevelMeter::MT_SMALL_LED ); + // Fader height controls the distribution of the LEDs, if the value is too small the fader might not be movable + pFader->setMinimumHeight ( 85 ); + break; + + default: + // reset style sheet and set original parameters + plbrChannelLevel->SetLevelMeterType ( CLevelMeter::MT_LED ); + // Fader height controls the distribution of the LEDs, if the value is too small the fader might not be movable + pFader->setMinimumHeight ( 120 ); + break; + } +} + void CChannelFader::SetDisplayChannelLevel ( const bool eNDCL ) { plbrChannelLevel->setHidden ( !eNDCL ); } bool CChannelFader::GetDisplayChannelLevel() { return !plbrChannelLevel->isHidden(); } @@ -952,6 +985,15 @@ void CAudioMixerBoard::SetGUIDesign ( const EGUIDesign eNewDesign ) } } +void CAudioMixerBoard::SetMeterStyle ( const EMeterStyle eNewMeterStyle ) +{ + // apply GUI design to child GUI controls + for ( int i = 0; i < MAX_NUM_CHANNELS; i++ ) + { + vecpChanFader[i]->SetMeterStyle ( eNewMeterStyle ); + } +} + void CAudioMixerBoard::SetDisplayPans ( const bool eNDP ) { bDisplayPans = eNDP; diff --git a/src/audiomixerboard.h b/src/audiomixerboard.h index ddeeefac45..3dde5c9f77 100644 --- a/src/audiomixerboard.h +++ b/src/audiomixerboard.h @@ -62,6 +62,7 @@ class CChannelFader : public QObject bool IsMute() { return pcbMute->isChecked(); } int GetGroupID() { return iGroupID; } void SetGUIDesign ( const EGUIDesign eNewDesign ); + void SetMeterStyle ( const EMeterStyle eNewMeterStyle ); void SetDisplayChannelLevel ( const bool eNDCL ); bool GetDisplayChannelLevel(); void SetDisplayPans ( const bool eNDP ); @@ -115,16 +116,17 @@ class CChannelFader : public QObject CChannelInfo cReceivedChanInfo; - bool bOtherChannelIsSolo; - bool bIsMyOwnFader; - bool bIsMutedAtServer; - double dPreviousFaderLevel; - int iGroupID; - QString strGroupBaseText; - int iRunningNewClientCnt; - int iInstrPicMaxWidth; - EGUIDesign eDesign; - QPixmap BitmapMutedIcon; + bool bOtherChannelIsSolo; + bool bIsMyOwnFader; + bool bIsMutedAtServer; + double dPreviousFaderLevel; + int iGroupID; + QString strGroupBaseText; + int iRunningNewClientCnt; + int iInstrPicMaxWidth; + EGUIDesign eDesign; + EMeterStyle eMeterStyle; + QPixmap BitmapMutedIcon; public slots: void OnLevelValueChanged ( int value ) @@ -188,6 +190,7 @@ class CAudioMixerBoard : public QGroupBox, public CAudioMixerBoardSlotsGetGUIDesign() ); + // MeterStyle init + SetMeterStyle ( pClient->GetMeterStyle() ); + // set the settings pointer to the mixer board (must be done early) MainMixerBoard->SetSettingsPointer ( pSettings ); MainMixerBoard->SetNumMixerPanelRows ( pSettings->iNumMixerPanelRows ); @@ -491,6 +494,8 @@ CClientDlg::CClientDlg ( CClient* pNCliP, QObject::connect ( &ClientSettingsDlg, &CClientSettingsDlg::GUIDesignChanged, this, &CClientDlg::OnGUIDesignChanged ); + QObject::connect ( &ClientSettingsDlg, &CClientSettingsDlg::MeterStyleChanged, this, &CClientDlg::OnMeterStyleChanged ); + QObject::connect ( &ClientSettingsDlg, &CClientSettingsDlg::AudioChannelsChanged, this, &CClientDlg::OnAudioChannelsChanged ); QObject::connect ( &ClientSettingsDlg, @@ -1338,8 +1343,6 @@ void CClientDlg::SetGUIDesign ( const EGUIDesign eNewDesign ) "font: bold;" ); #endif - lbrInputLevelL->SetLevelMeterType ( CLevelMeter::MT_LED ); - lbrInputLevelR->SetLevelMeterType ( CLevelMeter::MT_LED ); ledBuffers->SetType ( CMultiColorLED::MT_LED ); ledDelay->SetType ( CMultiColorLED::MT_LED ); break; @@ -1354,8 +1357,6 @@ void CClientDlg::SetGUIDesign ( const EGUIDesign eNewDesign ) rbtReverbSelR->setStyleSheet ( "" ); #endif - lbrInputLevelL->SetLevelMeterType ( CLevelMeter::MT_BAR ); - lbrInputLevelR->SetLevelMeterType ( CLevelMeter::MT_BAR ); ledBuffers->SetType ( CMultiColorLED::MT_INDICATOR ); ledDelay->SetType ( CMultiColorLED::MT_INDICATOR ); break; @@ -1365,6 +1366,41 @@ void CClientDlg::SetGUIDesign ( const EGUIDesign eNewDesign ) MainMixerBoard->SetGUIDesign ( eNewDesign ); } +void CClientDlg::SetMeterStyle ( const EMeterStyle eNewMeterStyle ) +{ + // apply MeterStyle to current window + switch ( eNewMeterStyle ) + { + case MT_LED: + lbrInputLevelL->SetLevelMeterType ( CLevelMeter::MT_LED ); + lbrInputLevelR->SetLevelMeterType ( CLevelMeter::MT_LED ); + break; + + case MT_SLIM_LED: + lbrInputLevelL->SetLevelMeterType ( CLevelMeter::MT_SLIM_LED ); + lbrInputLevelR->SetLevelMeterType ( CLevelMeter::MT_SLIM_LED ); + break; + + case MT_BAR: + lbrInputLevelL->SetLevelMeterType ( CLevelMeter::MT_BAR ); + lbrInputLevelR->SetLevelMeterType ( CLevelMeter::MT_BAR ); + break; + + case MT_SLIM_BAR: + lbrInputLevelL->SetLevelMeterType ( CLevelMeter::MT_BAR ); + lbrInputLevelR->SetLevelMeterType ( CLevelMeter::MT_BAR ); + break; + + case MT_SMALL_LED: + lbrInputLevelL->SetLevelMeterType ( CLevelMeter::MT_SLIM_LED ); + lbrInputLevelR->SetLevelMeterType ( CLevelMeter::MT_SLIM_LED ); + break; + } + + // also apply MeterStyle to child GUI controls + MainMixerBoard->SetMeterStyle ( eNewMeterStyle ); +} + void CClientDlg::OnRecorderStateReceived ( const ERecorderState newRecorderState ) { MainMixerBoard->SetRecorderState ( newRecorderState ); @@ -1377,6 +1413,8 @@ void CClientDlg::OnGUIDesignChanged() SetMixerBoardDeco ( MainMixerBoard->GetRecorderState(), pClient->GetGUIDesign() ); } +void CClientDlg::OnMeterStyleChanged() { SetMeterStyle ( pClient->GetMeterStyle() ); } + void CClientDlg::SetMixerBoardDeco ( const ERecorderState newRecorderState, const EGUIDesign eNewDesign ) { // return if no change diff --git a/src/clientdlg.h b/src/clientdlg.h index 4d2ce7e182..996016decf 100644 --- a/src/clientdlg.h +++ b/src/clientdlg.h @@ -85,6 +85,7 @@ class CClientDlg : public CBaseDlg, private Ui_CClientDlgBase protected: void SetGUIDesign ( const EGUIDesign eNewDesign ); + void SetMeterStyle ( const EMeterStyle eNewMeterStyle ); void SetMyWindowTitle ( const int iNumClients ); void ShowConnectionSetupDialog(); void ShowGeneralSettings ( int iTab ); @@ -224,6 +225,7 @@ public slots: void OnConnectDlgAccepted(); void OnDisconnected() { Disconnect(); } void OnGUIDesignChanged(); + void OnMeterStyleChanged(); void OnRecorderStateReceived ( ERecorderState eRecorderState ); void SetMixerBoardDeco ( const ERecorderState newRecorderState, const EGUIDesign eNewDesign ); void OnAudioChannelsChanged() { UpdateRevSelection(); } diff --git a/src/clientsettingsdlg.cpp b/src/clientsettingsdlg.cpp index 4faf0b1884..4250e1184f 100644 --- a/src/clientsettingsdlg.cpp +++ b/src/clientsettingsdlg.cpp @@ -244,6 +244,16 @@ CClientSettingsDlg::CClientSettingsDlg ( CClient* pNCliP, CClientSettings* pNSet cbxSkin->setAccessibleName ( tr ( "Skin combo box" ) ); + // MeterStyle + lblMeterStyle->setWhatsThis ( "" + tr ( "Meter Style" ) + ": " + + tr ( "Select the meter style to be used for the level meters. The " + "Narrow Bar and Small LEDs options only apply to the mixerboard. When " + "Narrow Bar is selected, the input meters are set to Bar. When " + "Small LEDs is selected, the input meters are set to Round LEDs. " + "The remaining options apply to the mixerboard and input meters." ) ); + + cbxMeterStyle->setAccessibleName ( tr ( "Meter Style combo box" ) ); + // Interface Language lblLanguage->setWhatsThis ( "" + tr ( "Language" ) + ": " + tr ( "Select the language to be used for the user interface." ) ); @@ -404,6 +414,15 @@ CClientSettingsDlg::CClientSettingsDlg ( CClient* pNCliP, CClientSettings* pNSet cbxSkin->addItem ( tr ( "Compact" ) ); // GD_SLIMFADER cbxSkin->setCurrentIndex ( static_cast ( pClient->GetGUIDesign() ) ); + // MeterStyle combo box + cbxMeterStyle->clear(); + cbxMeterStyle->addItem ( tr ( "LEDs" ) ); // MT_LED + cbxMeterStyle->addItem ( tr ( "Bar" ) ); // MT_BAR + cbxMeterStyle->addItem ( tr ( "Narrow Bar" ) ); // MT_SLIM_BAR + cbxMeterStyle->addItem ( tr ( "Round LEDs" ) ); // MT_SLIM_LED + cbxMeterStyle->addItem ( tr ( "Small LEDs" ) ); // MT_SMALL_LED + cbxMeterStyle->setCurrentIndex ( static_cast ( pClient->GetMeterStyle() ) ); + // language combo box (corrects the setting if language not found) cbxLanguage->Init ( pSettings->strLanguage ); @@ -624,6 +643,11 @@ CClientSettingsDlg::CClientSettingsDlg ( CClient* pNCliP, CClientSettings* pNSet this, &CClientSettingsDlg::OnGUIDesignActivated ); + QObject::connect ( cbxMeterStyle, + static_cast ( &QComboBox::activated ), + this, + &CClientSettingsDlg::OnMeterStyleActivated ); + QObject::connect ( cbxCentralServerAddress->lineEdit(), &QLineEdit::editingFinished, this, @@ -917,6 +941,13 @@ void CClientSettingsDlg::OnGUIDesignActivated ( int iDesignIdx ) UpdateDisplay(); } +void CClientSettingsDlg::OnMeterStyleActivated ( int iMeterStyleIdx ) +{ + pClient->SetMeterStyle ( static_cast ( iMeterStyleIdx ) ); + emit MeterStyleChanged(); + UpdateDisplay(); +} + void CClientSettingsDlg::OnAutoJitBufStateChanged ( int value ) { pClient->SetDoAutoSockBufSize ( value == Qt::Checked ); diff --git a/src/clientsettingsdlg.h b/src/clientsettingsdlg.h index 53e05fd1bb..75f22d02b1 100644 --- a/src/clientsettingsdlg.h +++ b/src/clientsettingsdlg.h @@ -95,6 +95,7 @@ public slots: void OnAudioChannelsActivated ( int iChanIdx ); void OnAudioQualityActivated ( int iQualityIdx ); void OnGUIDesignActivated ( int iDesignIdx ); + void OnMeterStyleActivated ( int iMeterStyleIdx ); void OnDriverSetupClicked(); void OnLanguageChanged ( QString strLanguage ) { pSettings->strLanguage = strLanguage; } void OnAliasTextChanged ( const QString& strNewName ); @@ -108,6 +109,7 @@ public slots: signals: void GUIDesignChanged(); + void MeterStyleChanged(); void AudioChannelsChanged(); void CustomCentralServerAddrChanged(); void NumMixerPanelRowsChanged ( int value ); diff --git a/src/clientsettingsdlgbase.ui b/src/clientsettingsdlgbase.ui index 70e091f195..bbb3f663ba 100644 --- a/src/clientsettingsdlgbase.ui +++ b/src/clientsettingsdlgbase.ui @@ -221,6 +221,13 @@ + + + + Meter Style + + + @@ -242,6 +249,9 @@ + + + @@ -286,7 +296,7 @@ 20 - 40 + 14 @@ -1270,6 +1280,7 @@ pedtCity pcbxSkill cbxSkin + cbxMeterStyle cbxLanguage spnMixerRows cbxSoundcard diff --git a/src/levelmeter.cpp b/src/levelmeter.cpp index 271e10aabe..376fca085d 100644 --- a/src/levelmeter.cpp +++ b/src/levelmeter.cpp @@ -106,6 +106,24 @@ void CLevelMeter::SetLevelMeterType ( const ELevelMeterType eNType ) pStackedLayout->setCurrentIndex ( 0 ); break; + case MT_SLIM_LED: + // initialize all LEDs + for ( int iLEDIdx = 0; iLEDIdx < NUM_LEDS_INCL_CLIP_LED; iLEDIdx++ ) + { + vecpLEDs[iLEDIdx]->SetColor ( cLED::RL_SLIM_BLACK ); + } + pStackedLayout->setCurrentIndex ( 0 ); + break; + + case MT_SMALL_LED: + // initialize all LEDs + for ( int iLEDIdx = 0; iLEDIdx < NUM_LEDS_INCL_CLIP_LED; iLEDIdx++ ) + { + vecpLEDs[iLEDIdx]->SetColor ( cLED::RL_SMALL_BLACK ); + } + pStackedLayout->setCurrentIndex ( 0 ); + break; + case MT_BAR: pStackedLayout->setCurrentIndex ( 1 ); break; @@ -209,6 +227,76 @@ void CLevelMeter::SetValue ( const double dValue ) } break; + case MT_SLIM_LED: + // update state of all LEDs for current level value (except of the clip LED) + for ( int iLEDIdx = 0; iLEDIdx < NUM_STEPS_LED_BAR; iLEDIdx++ ) + { + // set active LED color if value is above current LED index + if ( iLEDIdx < dValue ) + { + // check which color we should use (green, yellow or red) + if ( iLEDIdx < YELLOW_BOUND_LED_BAR ) + { + // green region + vecpLEDs[iLEDIdx]->SetColor ( cLED::RL_SLIM_GREEN ); + } + else + { + if ( iLEDIdx < RED_BOUND_LED_BAR ) + { + // yellow region + vecpLEDs[iLEDIdx]->SetColor ( cLED::RL_SLIM_YELLOW ); + } + else + { + // red region + vecpLEDs[iLEDIdx]->SetColor ( cLED::RL_SLIM_RED ); + } + } + } + else + { + // we use black LED for inactive state + vecpLEDs[iLEDIdx]->SetColor ( cLED::RL_SLIM_BLACK ); + } + } + break; + + case MT_SMALL_LED: + // update state of all LEDs for current level value (except of the clip LED) + for ( int iLEDIdx = 0; iLEDIdx < NUM_STEPS_LED_BAR; iLEDIdx++ ) + { + // set active LED color if value is above current LED index + if ( iLEDIdx < dValue ) + { + // check which color we should use (green, yellow or red) + if ( iLEDIdx < YELLOW_BOUND_LED_BAR ) + { + // green region + vecpLEDs[iLEDIdx]->SetColor ( cLED::RL_SMALL_GREEN ); + } + else + { + if ( iLEDIdx < RED_BOUND_LED_BAR ) + { + // yellow region + vecpLEDs[iLEDIdx]->SetColor ( cLED::RL_SMALL_YELLOW ); + } + else + { + // red region + vecpLEDs[iLEDIdx]->SetColor ( cLED::RL_SMALL_RED ); + } + } + } + else + { + // we use black LED for inactive state + vecpLEDs[iLEDIdx]->SetColor ( cLED::RL_SMALL_BLACK ); + } + } + break; + case MT_BAR: case MT_SLIM_BAR: pBarMeter->setValue ( 100 * dValue ); @@ -228,6 +316,14 @@ void CLevelMeter::SetValue ( const double dValue ) vecpLEDs[NUM_STEPS_LED_BAR]->SetColor ( cLED::RL_RED ); break; + case MT_SLIM_LED: + vecpLEDs[NUM_STEPS_LED_BAR]->SetColor ( cLED::RL_SLIM_RED ); + break; + + case MT_SMALL_LED: + vecpLEDs[NUM_STEPS_LED_BAR]->SetColor ( cLED::RL_SMALL_RED ); + break; + case MT_BAR: case MT_SLIM_BAR: SetBarMeterStyleAndClipStatus ( eLevelMeterType, true ); @@ -250,6 +346,14 @@ void CLevelMeter::ClipReset() vecpLEDs[NUM_STEPS_LED_BAR]->SetColor ( cLED::RL_BLACK ); break; + case MT_SLIM_LED: + vecpLEDs[NUM_STEPS_LED_BAR]->SetColor ( cLED::RL_SLIM_BLACK ); + break; + + case MT_SMALL_LED: + vecpLEDs[NUM_STEPS_LED_BAR]->SetColor ( cLED::RL_SMALL_BLACK ); + break; + case MT_BAR: case MT_SLIM_BAR: SetBarMeterStyleAndClipStatus ( eLevelMeterType, false ); @@ -258,16 +362,24 @@ void CLevelMeter::ClipReset() } CLevelMeter::cLED::cLED ( QWidget* parent ) : - BitmCubeRoundBlack ( QString::fromUtf8 ( ":/png/LEDs/res/HLEDBlackSmall.png" ) ), - BitmCubeRoundGreen ( QString::fromUtf8 ( ":/png/LEDs/res/HLEDGreenSmall.png" ) ), - BitmCubeRoundYellow ( QString::fromUtf8 ( ":/png/LEDs/res/HLEDYellowSmall.png" ) ), - BitmCubeRoundRed ( QString::fromUtf8 ( ":/png/LEDs/res/HLEDRedSmall.png" ) ) + BitmCubeLedBlack ( QString::fromUtf8 ( ":/png/LEDs/res/HLEDBlackSmall.png" ) ), + BitmCubeLedGreen ( QString::fromUtf8 ( ":/png/LEDs/res/HLEDGreenSmall.png" ) ), + BitmCubeLedYellow ( QString::fromUtf8 ( ":/png/LEDs/res/HLEDYellowSmall.png" ) ), + BitmCubeLedRed ( QString::fromUtf8 ( ":/png/LEDs/res/HLEDRedSmall.png" ) ), + BitmCubeSlimLedBlack ( QString::fromUtf8 ( ":/png/LEDs/res/CLEDBlackSmall.png" ) ), + BitmCubeSlimLedGreen ( QString::fromUtf8 ( ":/png/LEDs/res/CLEDGreenSmall.png" ) ), + BitmCubeSlimLedYellow ( QString::fromUtf8 ( ":/png/LEDs/res/CLEDYellowSmall.png" ) ), + BitmCubeSlimLedRed ( QString::fromUtf8 ( ":/png/LEDs/res/CLEDRedSmall.png" ) ), + BitmCubeSmallLedBlack ( QString::fromUtf8 ( ":/png/LEDs/res/LEDBlackSmall.png" ) ), + BitmCubeSmallLedGreen ( QString::fromUtf8 ( ":/png/LEDs/res/LEDGreenSmall.png" ) ), + BitmCubeSmallLedYellow ( QString::fromUtf8 ( ":/png/LEDs/res/LEDYellowSmall.png" ) ), + BitmCubeSmallLedRed ( QString::fromUtf8 ( ":/png/LEDs/res/LEDRedSmall.png" ) ) { // create LED label pLEDLabel = new QLabel ( "", parent ); // set initial bitmap - pLEDLabel->setPixmap ( BitmCubeRoundBlack ); + pLEDLabel->setPixmap ( BitmCubeLedBlack ); eCurLightColor = RL_BLACK; } @@ -284,19 +396,51 @@ void CLevelMeter::cLED::SetColor ( const ELightColor eNewColor ) break; case RL_BLACK: - pLEDLabel->setPixmap ( BitmCubeRoundBlack ); + pLEDLabel->setPixmap ( BitmCubeLedBlack ); break; case RL_GREEN: - pLEDLabel->setPixmap ( BitmCubeRoundGreen ); + pLEDLabel->setPixmap ( BitmCubeLedGreen ); break; case RL_YELLOW: - pLEDLabel->setPixmap ( BitmCubeRoundYellow ); + pLEDLabel->setPixmap ( BitmCubeLedYellow ); break; case RL_RED: - pLEDLabel->setPixmap ( BitmCubeRoundRed ); + pLEDLabel->setPixmap ( BitmCubeLedRed ); + break; + + case RL_SLIM_BLACK: + pLEDLabel->setPixmap ( BitmCubeSlimLedBlack ); + break; + + case RL_SLIM_GREEN: + pLEDLabel->setPixmap ( BitmCubeSlimLedGreen ); + break; + + case RL_SLIM_YELLOW: + pLEDLabel->setPixmap ( BitmCubeSlimLedYellow ); + break; + + case RL_SLIM_RED: + pLEDLabel->setPixmap ( BitmCubeSlimLedRed ); + break; + + case RL_SMALL_BLACK: + pLEDLabel->setPixmap ( BitmCubeSmallLedBlack ); + break; + + case RL_SMALL_GREEN: + pLEDLabel->setPixmap ( BitmCubeSmallLedGreen ); + break; + + case RL_SMALL_YELLOW: + pLEDLabel->setPixmap ( BitmCubeSmallLedYellow ); + break; + + case RL_SMALL_RED: + pLEDLabel->setPixmap ( BitmCubeSmallLedRed ); break; } eCurLightColor = eNewColor; diff --git a/src/levelmeter.h b/src/levelmeter.h index 2e53e8ace8..27d5102513 100644 --- a/src/levelmeter.h +++ b/src/levelmeter.h @@ -47,7 +47,9 @@ class CLevelMeter : public QWidget { MT_LED, MT_BAR, - MT_SLIM_BAR + MT_SLIM_BAR, + MT_SLIM_LED, + MT_SMALL_LED }; CLevelMeter ( QWidget* parent = nullptr ); @@ -66,7 +68,15 @@ class CLevelMeter : public QWidget RL_BLACK, RL_GREEN, RL_YELLOW, - RL_RED + RL_RED, + RL_SLIM_BLACK, + RL_SLIM_GREEN, + RL_SLIM_YELLOW, + RL_SLIM_RED, + RL_SMALL_BLACK, + RL_SMALL_GREEN, + RL_SMALL_YELLOW, + RL_SMALL_RED }; cLED ( QWidget* parent ); @@ -76,10 +86,18 @@ class CLevelMeter : public QWidget QLabel* GetLabelPointer() { return pLEDLabel; } protected: - QPixmap BitmCubeRoundBlack; - QPixmap BitmCubeRoundGreen; - QPixmap BitmCubeRoundYellow; - QPixmap BitmCubeRoundRed; + QPixmap BitmCubeLedBlack; + QPixmap BitmCubeLedGreen; + QPixmap BitmCubeLedYellow; + QPixmap BitmCubeLedRed; + QPixmap BitmCubeSlimLedBlack; + QPixmap BitmCubeSlimLedGreen; + QPixmap BitmCubeSlimLedYellow; + QPixmap BitmCubeSlimLedRed; + QPixmap BitmCubeSmallLedBlack; + QPixmap BitmCubeSmallLedGreen; + QPixmap BitmCubeSmallLedYellow; + QPixmap BitmCubeSmallLedRed; ELightColor eCurLightColor; QLabel* pLEDLabel; diff --git a/src/res/LEDBlackSmall.png b/src/res/LEDBlackSmall.png new file mode 100644 index 0000000000..46a3ab9d35 Binary files /dev/null and b/src/res/LEDBlackSmall.png differ diff --git a/src/res/LEDGreenSmall.png b/src/res/LEDGreenSmall.png new file mode 100644 index 0000000000..591c29ce6c Binary files /dev/null and b/src/res/LEDGreenSmall.png differ diff --git a/src/res/LEDRedSmall.png b/src/res/LEDRedSmall.png new file mode 100644 index 0000000000..787b13ea69 Binary files /dev/null and b/src/res/LEDRedSmall.png differ diff --git a/src/res/LEDYellowSmall.png b/src/res/LEDYellowSmall.png new file mode 100644 index 0000000000..74df188ba2 Binary files /dev/null and b/src/res/LEDYellowSmall.png differ diff --git a/src/resources.qrc b/src/resources.qrc index e6acbcba85..66fbd653fe 100644 --- a/src/resources.qrc +++ b/src/resources.qrc @@ -38,6 +38,7 @@ res/CLEDGreySmall.png res/CLEDRedSmall.png res/CLEDYellowSmall.png + res/CLEDBlackSmall.png res/IndicatorGreen.png res/IndicatorYellow.png res/IndicatorRed.png @@ -47,6 +48,10 @@ res/HLEDYellowSmall.png res/IndicatorRedFancy.png res/IndicatorYellowFancy.png + res/LEDGreenSmall.png + res/LEDBlackSmall.png + res/LEDRedSmall.png + res/LEDYellowSmall.png res/faderbackground.png diff --git a/src/settings.cpp b/src/settings.cpp index fb22ceed1d..72994aeb6a 100644 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -405,6 +405,37 @@ void CClientSettings::ReadSettingsFromXML ( const QDomDocument& IniXMLDocument, pClient->SetGUIDesign ( static_cast ( iValue ) ); } + // MeterStyle + if ( GetNumericIniSet ( IniXMLDocument, "client", "meterstyle", 0, 4 /* MT_SMALL_LED */, iValue ) ) + { + pClient->SetMeterStyle ( static_cast ( iValue ) ); + } + else + { + // if MeterStyle is not found in the ini, set it based on the GUI design + if ( GetNumericIniSet ( IniXMLDocument, "client", "guidesign", 0, 2 /* GD_SLIMFADER */, iValue ) ) + { + switch ( iValue ) + { + case GD_STANDARD: + pClient->SetMeterStyle ( MT_BAR ); + break; + + case GD_ORIGINAL: + pClient->SetMeterStyle ( MT_LED ); + break; + + case GD_SLIMFADER: + pClient->SetMeterStyle ( MT_SLIM_BAR ); + break; + + default: + pClient->SetMeterStyle ( MT_LED ); + break; + } + } + } + // audio channels if ( GetNumericIniSet ( IniXMLDocument, "client", "audiochannels", 0, 2 /* CC_STEREO */, iValue ) ) { @@ -634,6 +665,9 @@ void CClientSettings::WriteSettingsToXML ( QDomDocument& IniXMLDocument ) // GUI design SetNumericIniSet ( IniXMLDocument, "client", "guidesign", static_cast ( pClient->GetGUIDesign() ) ); + // MeterStyle + SetNumericIniSet ( IniXMLDocument, "client", "meterstyle", static_cast ( pClient->GetMeterStyle() ) ); + // audio channels SetNumericIniSet ( IniXMLDocument, "client", "audiochannels", static_cast ( pClient->GetAudioChannels() ) ); diff --git a/src/util.h b/src/util.h index 8fac9a931c..849ce273d4 100644 --- a/src/util.h +++ b/src/util.h @@ -499,6 +499,17 @@ enum EGUIDesign GD_SLIMFADER = 2 }; +// MeterStyle enum ------------------------------------------------------------- +enum EMeterStyle +{ + // used for settings -> enum values should be fixed + MT_LED = 0, + MT_BAR = 1, + MT_SLIM_BAR = 2, + MT_SLIM_LED = 3, + MT_SMALL_LED = 4 +}; + // Server licence type enum ---------------------------------------------------- enum ELicenceType {