/*
  ==============================================================================

  This is an automatically generated GUI class created by the Introjucer!

  Be careful when adding custom code to these files, as only the code within
  the "//[xyz]" and "//[/xyz]" sections will be retained when the file is loaded
  and re-saved.

  Created with Introjucer version: 3.1.0

  ------------------------------------------------------------------------------

  The Introjucer is part of the JUCE library - "Jules' Utility Class Extensions"
  Copyright 2004-13 by Raw Material Software Ltd.

  ==============================================================================
*/

//[Headers] You can add your own extra header files here...
//[/Headers]

#include "ControlComponent.h"


//[MiscUserDefs] You can add your own user definitions and misc code here...
//[/MiscUserDefs]

//==============================================================================
ControlComponent::ControlComponent (ReceiverInterface *pReceiverControlListener, TransmitterInterface *pTransmitterControlListener)
    : m_pReceiverControlListener(pReceiverControlListener),  m_pTransmitterControlListener(pTransmitterControlListener)
{
    addAndMakeVisible (groupComponent3 = new GroupComponent ("new group",
                                                             TRANS("Statistics")));

    addAndMakeVisible (m_GroupSymbolTimingRecovery2 = new GroupComponent ("Symbol Timing Recovery group",
                                                                          TRANS("AGC")));

    addAndMakeVisible (groupComponent = new GroupComponent ("new group",
                                                            TRANS("Powers")));

    addAndMakeVisible (groupDFE = new GroupComponent ("DFE group",
                                                      TRANS("Decision Feedback Equalizer")));

    addAndMakeVisible (groupCMA = new GroupComponent ("CMA group",
                                                      TRANS("Blind CMA Equalizer")));

    addAndMakeVisible (groupCarrierPhaseRecovery = new GroupComponent ("Carrier Phase Recovery group",
                                                                       TRANS("Carrier Phase Recovery")));

    addAndMakeVisible (m_GroupSymbolTimingRecovery = new GroupComponent ("Symbol Timing Recovery group",
                                                                         TRANS("Symbol Timing Recovery")));

    addAndMakeVisible (toggleButtonCPREnable = new ToggleButton ("CPR Button"));
    toggleButtonCPREnable->setTooltip (TRANS("CPR Enable"));
    toggleButtonCPREnable->setButtonText (TRANS("On"));
    toggleButtonCPREnable->addListener (this);

    addAndMakeVisible (toggleButtonDFEEnable = new ToggleButton ("DFE Button"));
    toggleButtonDFEEnable->setButtonText (TRANS("On"));
    toggleButtonDFEEnable->addListener (this);

    addAndMakeVisible (toggleButtonSTREnable = new ToggleButton ("STR Button"));
    toggleButtonSTREnable->setTooltip (TRANS("STR Enable"));
    toggleButtonSTREnable->setButtonText (TRANS("On"));
    toggleButtonSTREnable->addListener (this);

    addAndMakeVisible (m_entrySTRLoopFilterLead_0 = new TextEditor ("STRLoopFilterLead 0"));
    m_entrySTRLoopFilterLead_0->setTooltip (TRANS("STRLoopFilterLead 0"));
    m_entrySTRLoopFilterLead_0->setMultiLine (false);
    m_entrySTRLoopFilterLead_0->setReturnKeyStartsNewLine (false);
    m_entrySTRLoopFilterLead_0->setReadOnly (false);
    m_entrySTRLoopFilterLead_0->setScrollbarsShown (false);
    m_entrySTRLoopFilterLead_0->setCaretVisible (true);
    m_entrySTRLoopFilterLead_0->setPopupMenuEnabled (true);
    m_entrySTRLoopFilterLead_0->setText (TRANS("1000.000"));

    addAndMakeVisible (m_entrySTRLoopFilterLag_0 = new TextEditor ("STRLoopFilterLag 0"));
    m_entrySTRLoopFilterLag_0->setTooltip (TRANS("STRLoopFilterLag 0"));
    m_entrySTRLoopFilterLag_0->setMultiLine (false);
    m_entrySTRLoopFilterLag_0->setReturnKeyStartsNewLine (false);
    m_entrySTRLoopFilterLag_0->setReadOnly (false);
    m_entrySTRLoopFilterLag_0->setScrollbarsShown (false);
    m_entrySTRLoopFilterLag_0->setCaretVisible (true);
    m_entrySTRLoopFilterLag_0->setPopupMenuEnabled (true);
    m_entrySTRLoopFilterLag_0->setText (TRANS("1000.000"));

    addAndMakeVisible (m_entryCPRLoopFilterLead_0 = new TextEditor ("CPRLoopFilterLead 0"));
    m_entryCPRLoopFilterLead_0->setTooltip (TRANS("CPRLoopFilterLead 0"));
    m_entryCPRLoopFilterLead_0->setMultiLine (false);
    m_entryCPRLoopFilterLead_0->setReturnKeyStartsNewLine (false);
    m_entryCPRLoopFilterLead_0->setReadOnly (false);
    m_entryCPRLoopFilterLead_0->setScrollbarsShown (false);
    m_entryCPRLoopFilterLead_0->setCaretVisible (true);
    m_entryCPRLoopFilterLead_0->setPopupMenuEnabled (true);
    m_entryCPRLoopFilterLead_0->setText (TRANS("1000.000"));

    addAndMakeVisible (m_entryCPRLoopFilterLag_0 = new TextEditor ("CPRLoopFilterLag 0"));
    m_entryCPRLoopFilterLag_0->setTooltip (TRANS("CPRLoopFilterLag 0"));
    m_entryCPRLoopFilterLag_0->setMultiLine (false);
    m_entryCPRLoopFilterLag_0->setReturnKeyStartsNewLine (false);
    m_entryCPRLoopFilterLag_0->setReadOnly (false);
    m_entryCPRLoopFilterLag_0->setScrollbarsShown (false);
    m_entryCPRLoopFilterLag_0->setCaretVisible (true);
    m_entryCPRLoopFilterLag_0->setPopupMenuEnabled (true);
    m_entryCPRLoopFilterLag_0->setText (TRANS("1000.000"));

    addAndMakeVisible (m_buttonDfeOnUpdateFromDfeOff = new TextButton ("DFE-off => DFE-on Update button"));
    m_buttonDfeOnUpdateFromDfeOff->setTooltip (TRANS("DFE-off => DFE-on Update"));
    m_buttonDfeOnUpdateFromDfeOff->setButtonText (TRANS("Update"));
    m_buttonDfeOnUpdateFromDfeOff->addListener (this);

    addAndMakeVisible (m_buttonResetDFE = new TextButton ("DFE Reset button"));
    m_buttonResetDFE->setButtonText (TRANS("Reset"));
    m_buttonResetDFE->addListener (this);

    addAndMakeVisible (m_buttonResetCMA = new TextButton ("CMA Reset button"));
    m_buttonResetCMA->setButtonText (TRANS("Reset"));
    m_buttonResetCMA->addListener (this);

    addAndMakeVisible (groupComponent2 = new GroupComponent ("new group",
                                                             TRANS("SNR")));

    addAndMakeVisible (m_entryCmaMu = new TextEditor ("CMA Adaption Rate"));
    m_entryCmaMu->setMultiLine (false);
    m_entryCmaMu->setReturnKeyStartsNewLine (false);
    m_entryCmaMu->setReadOnly (false);
    m_entryCmaMu->setScrollbarsShown (true);
    m_entryCmaMu->setCaretVisible (true);
    m_entryCmaMu->setPopupMenuEnabled (true);
    m_entryCmaMu->setText (String::empty);

    addAndMakeVisible (m_entryDfeMu = new TextEditor ("DFE Adaption Rate"));
    m_entryDfeMu->setMultiLine (false);
    m_entryDfeMu->setReturnKeyStartsNewLine (false);
    m_entryDfeMu->setReadOnly (false);
    m_entryDfeMu->setScrollbarsShown (true);
    m_entryDfeMu->setCaretVisible (true);
    m_entryDfeMu->setPopupMenuEnabled (true);
    m_entryDfeMu->setText (String::empty);

    addAndMakeVisible (m_labelPowerRF = new Label ("RF-Power",
                                                   TRANS("-120")));
    m_labelPowerRF->setTooltip (TRANS("RF-Power"));
    m_labelPowerRF->setFont (Font (15.00f, Font::plain));
    m_labelPowerRF->setJustificationType (Justification::centredRight);
    m_labelPowerRF->setEditable (false, false, false);
    m_labelPowerRF->setColour (TextEditor::textColourId, Colours::black);
    m_labelPowerRF->setColour (TextEditor::backgroundColourId, Colour (0x00000000));

    addAndMakeVisible (m_labelPowerDDC = new Label ("DDC-Power",
                                                    TRANS("-120")));
    m_labelPowerDDC->setTooltip (TRANS("DDC-Power"));
    m_labelPowerDDC->setFont (Font (15.00f, Font::plain));
    m_labelPowerDDC->setJustificationType (Justification::centredRight);
    m_labelPowerDDC->setEditable (false, false, false);
    m_labelPowerDDC->setColour (TextEditor::textColourId, Colours::black);
    m_labelPowerDDC->setColour (TextEditor::backgroundColourId, Colour (0x00000000));

    addAndMakeVisible (m_labelPowerMF = new Label ("MF-Power",
                                                   TRANS("-120")));
    m_labelPowerMF->setTooltip (TRANS("MF-Power"));
    m_labelPowerMF->setFont (Font (15.00f, Font::plain));
    m_labelPowerMF->setJustificationType (Justification::centredRight);
    m_labelPowerMF->setEditable (false, false, false);
    m_labelPowerMF->setColour (TextEditor::textColourId, Colours::black);
    m_labelPowerMF->setColour (TextEditor::backgroundColourId, Colour (0x00000000));

    addAndMakeVisible (m_labelPowerCPR = new Label ("CPR-Power",
                                                    TRANS("-120")));
    m_labelPowerCPR->setTooltip (TRANS("CPR-Power"));
    m_labelPowerCPR->setFont (Font (15.00f, Font::plain));
    m_labelPowerCPR->setJustificationType (Justification::centredRight);
    m_labelPowerCPR->setEditable (false, false, false);
    m_labelPowerCPR->setColour (TextEditor::textColourId, Colours::black);
    m_labelPowerCPR->setColour (TextEditor::backgroundColourId, Colour (0x00000000));

    addAndMakeVisible (m_labelPowerAGC2 = new Label ("AGC-2-Power",
                                                     TRANS("-120")));
    m_labelPowerAGC2->setTooltip (TRANS("AGC-2-Power"));
    m_labelPowerAGC2->setFont (Font (15.00f, Font::plain));
    m_labelPowerAGC2->setJustificationType (Justification::centredRight);
    m_labelPowerAGC2->setEditable (false, false, false);
    m_labelPowerAGC2->setColour (TextEditor::textColourId, Colours::black);
    m_labelPowerAGC2->setColour (TextEditor::backgroundColourId, Colour (0x00000000));

    addAndMakeVisible (m_labelPowerEQ = new Label ("EQ-Power",
                                                   TRANS("-120")));
    m_labelPowerEQ->setTooltip (TRANS("EQ-Power"));
    m_labelPowerEQ->setFont (Font (15.00f, Font::plain));
    m_labelPowerEQ->setJustificationType (Justification::centredRight);
    m_labelPowerEQ->setEditable (false, false, false);
    m_labelPowerEQ->setColour (TextEditor::textColourId, Colours::black);
    m_labelPowerEQ->setColour (TextEditor::backgroundColourId, Colour (0x00000000));

    addAndMakeVisible (m_labelSnrCurrent = new Label ("SNR Current",
                                                      TRANS("-120")));
    m_labelSnrCurrent->setTooltip (TRANS("SNR Current"));
    m_labelSnrCurrent->setFont (Font (15.00f, Font::plain));
    m_labelSnrCurrent->setJustificationType (Justification::centredRight);
    m_labelSnrCurrent->setEditable (false, false, false);
    m_labelSnrCurrent->setColour (TextEditor::textColourId, Colours::black);
    m_labelSnrCurrent->setColour (TextEditor::backgroundColourId, Colour (0x00000000));

    addAndMakeVisible (m_labelSnrCma = new Label ("SNR CMA",
                                                  TRANS("-120")));
    m_labelSnrCma->setTooltip (TRANS("SNR CMA"));
    m_labelSnrCma->setFont (Font (15.00f, Font::plain));
    m_labelSnrCma->setJustificationType (Justification::centredRight);
    m_labelSnrCma->setEditable (false, false, false);
    m_labelSnrCma->setColour (TextEditor::textColourId, Colours::black);
    m_labelSnrCma->setColour (TextEditor::backgroundColourId, Colour (0x00000000));

    addAndMakeVisible (m_labelSnrDfeOn = new Label ("SNR-DEF-On",
                                                    TRANS("-120")));
    m_labelSnrDfeOn->setTooltip (TRANS("SNR-DEF-On"));
    m_labelSnrDfeOn->setFont (Font (15.00f, Font::plain));
    m_labelSnrDfeOn->setJustificationType (Justification::centredRight);
    m_labelSnrDfeOn->setEditable (false, false, false);
    m_labelSnrDfeOn->setColour (TextEditor::textColourId, Colours::black);
    m_labelSnrDfeOn->setColour (TextEditor::backgroundColourId, Colour (0x00000000));

    addAndMakeVisible (m_labelSnrDfeOff = new Label ("SNR-DEF-Off",
                                                     TRANS("-120")));
    m_labelSnrDfeOff->setTooltip (TRANS("SNR-DEF-Off"));
    m_labelSnrDfeOff->setFont (Font (15.00f, Font::plain));
    m_labelSnrDfeOff->setJustificationType (Justification::centredRight);
    m_labelSnrDfeOff->setEditable (false, false, false);
    m_labelSnrDfeOff->setColour (TextEditor::textColourId, Colours::black);
    m_labelSnrDfeOff->setColour (TextEditor::backgroundColourId, Colour (0x00000000));

    addAndMakeVisible (m_labelSnrSymbolMag = new Label ("SNR Symbol Magnitude",
                                                        TRANS("-120")));
    m_labelSnrSymbolMag->setTooltip (TRANS("SNR Symbol Magnitude"));
    m_labelSnrSymbolMag->setFont (Font (15.00f, Font::plain));
    m_labelSnrSymbolMag->setJustificationType (Justification::centredRight);
    m_labelSnrSymbolMag->setEditable (false, false, false);
    m_labelSnrSymbolMag->setColour (TextEditor::textColourId, Colours::black);
    m_labelSnrSymbolMag->setColour (TextEditor::backgroundColourId, Colour (0x00000000));

    addAndMakeVisible (m_labelSnrSymbolPhase = new Label ("SNR Symbol Phase",
                                                          TRANS("-120")));
    m_labelSnrSymbolPhase->setTooltip (TRANS("SNR Symbol Phase"));
    m_labelSnrSymbolPhase->setFont (Font (15.00f, Font::plain));
    m_labelSnrSymbolPhase->setJustificationType (Justification::centredRight);
    m_labelSnrSymbolPhase->setEditable (false, false, false);
    m_labelSnrSymbolPhase->setColour (TextEditor::textColourId, Colours::black);
    m_labelSnrSymbolPhase->setColour (TextEditor::backgroundColourId, Colour (0x00000000));

    addAndMakeVisible (m_labelNoiseStr = new Label ("SNR STR",
                                                    TRANS("-120")));
    m_labelNoiseStr->setTooltip (TRANS("SNR STR"));
    m_labelNoiseStr->setFont (Font (15.00f, Font::plain));
    m_labelNoiseStr->setJustificationType (Justification::centredRight);
    m_labelNoiseStr->setEditable (false, false, false);
    m_labelNoiseStr->setColour (TextEditor::textColourId, Colours::black);
    m_labelNoiseStr->setColour (TextEditor::backgroundColourId, Colour (0x00000000));

    addAndMakeVisible (m_labelSymbolReceivedCount = new Label ("Number of Symbols Received",
                                                               TRANS("0")));
    m_labelSymbolReceivedCount->setTooltip (TRANS("Number of Symbols Received"));
    m_labelSymbolReceivedCount->setFont (Font (15.00f, Font::plain));
    m_labelSymbolReceivedCount->setJustificationType (Justification::centredRight);
    m_labelSymbolReceivedCount->setEditable (false, false, false);
    m_labelSymbolReceivedCount->setColour (TextEditor::textColourId, Colours::black);
    m_labelSymbolReceivedCount->setColour (TextEditor::backgroundColourId, Colour (0x00000000));

    addAndMakeVisible (m_buttonResetReset = new TextButton ("Receiver Reset"));
    m_buttonResetReset->setTooltip (TRANS("Receiver Reset"));
    m_buttonResetReset->setButtonText (TRANS("Reset"));
    m_buttonResetReset->addListener (this);

    addAndMakeVisible (m_entryAgcMu_0 = new TextEditor ("AGC Adaption Rate 0"));
    m_entryAgcMu_0->setTooltip (TRANS("AGC Adaption Rate 0"));
    m_entryAgcMu_0->setMultiLine (false);
    m_entryAgcMu_0->setReturnKeyStartsNewLine (false);
    m_entryAgcMu_0->setReadOnly (false);
    m_entryAgcMu_0->setScrollbarsShown (false);
    m_entryAgcMu_0->setCaretVisible (true);
    m_entryAgcMu_0->setPopupMenuEnabled (true);
    m_entryAgcMu_0->setText (TRANS("0.000001"));

    addAndMakeVisible (toggleButtonCmaTrainingEnable = new ToggleButton ("CMA Enable Training"));
    toggleButtonCmaTrainingEnable->setTooltip (TRANS("CMA Enable Training"));
    toggleButtonCmaTrainingEnable->setButtonText (TRANS("Learn"));
    toggleButtonCmaTrainingEnable->addListener (this);

    addAndMakeVisible (toggleButtonDfeTrainingEnable = new ToggleButton ("DFE Enable Training"));
    toggleButtonDfeTrainingEnable->setTooltip (TRANS("DFE Enable Training"));
    toggleButtonDfeTrainingEnable->setButtonText (TRANS("Learn"));
    toggleButtonDfeTrainingEnable->addListener (this);

    addAndMakeVisible (m_buttonDfeOffUpdateFromCma = new TextButton ("CMA => DFE-off Update button"));
    m_buttonDfeOffUpdateFromCma->setTooltip (TRANS("CMA => DFE-off Update"));
    m_buttonDfeOffUpdateFromCma->setButtonText (TRANS("=> DFE"));
    m_buttonDfeOffUpdateFromCma->addListener (this);

    addAndMakeVisible (m_entryNumBitsPerSymbol = new TextEditor ("NumBitsPerSymbol"));
    m_entryNumBitsPerSymbol->setTooltip (TRANS("NumBitsPerSymbol"));
    m_entryNumBitsPerSymbol->setMultiLine (false);
    m_entryNumBitsPerSymbol->setReturnKeyStartsNewLine (false);
    m_entryNumBitsPerSymbol->setReadOnly (false);
    m_entryNumBitsPerSymbol->setScrollbarsShown (false);
    m_entryNumBitsPerSymbol->setCaretVisible (true);
    m_entryNumBitsPerSymbol->setPopupMenuEnabled (true);
    m_entryNumBitsPerSymbol->setText (TRANS("2"));

    addAndMakeVisible (m_entrySymbolRate = new TextEditor ("Symbolrate"));
    m_entrySymbolRate->setTooltip (TRANS("Symbolrate"));
    m_entrySymbolRate->setMultiLine (false);
    m_entrySymbolRate->setReturnKeyStartsNewLine (false);
    m_entrySymbolRate->setReadOnly (false);
    m_entrySymbolRate->setScrollbarsShown (false);
    m_entrySymbolRate->setCaretVisible (true);
    m_entrySymbolRate->setPopupMenuEnabled (true);
    m_entrySymbolRate->setText (TRANS("192000.000"));

    addAndMakeVisible (m_entryDdcFrequency = new TextEditor ("DDC Frequency"));
    m_entryDdcFrequency->setTooltip (TRANS("DDC Frequency"));
    m_entryDdcFrequency->setMultiLine (false);
    m_entryDdcFrequency->setReturnKeyStartsNewLine (false);
    m_entryDdcFrequency->setReadOnly (false);
    m_entryDdcFrequency->setScrollbarsShown (false);
    m_entryDdcFrequency->setCaretVisible (true);
    m_entryDdcFrequency->setPopupMenuEnabled (true);
    m_entryDdcFrequency->setText (TRANS("192000.000"));

    addAndMakeVisible (m_labelDdcDeltaFreq = new Label ("DDC Frequency Offset",
                                                        TRANS("-999.000000")));
    m_labelDdcDeltaFreq->setTooltip (TRANS("DDC Frequency Offset"));
    m_labelDdcDeltaFreq->setFont (Font (15.00f, Font::plain));
    m_labelDdcDeltaFreq->setJustificationType (Justification::centredRight);
    m_labelDdcDeltaFreq->setEditable (false, false, false);
    m_labelDdcDeltaFreq->setColour (TextEditor::textColourId, Colours::black);
    m_labelDdcDeltaFreq->setColour (TextEditor::backgroundColourId, Colour (0x00000000));

    addAndMakeVisible (m_labelStrDeltaFreq = new Label ("STR Frequency Offset",
                                                        TRANS("-999.000000")));
    m_labelStrDeltaFreq->setTooltip (TRANS("STR Frequency Offset"));
    m_labelStrDeltaFreq->setFont (Font (15.00f, Font::plain));
    m_labelStrDeltaFreq->setJustificationType (Justification::centredRight);
    m_labelStrDeltaFreq->setEditable (false, false, false);
    m_labelStrDeltaFreq->setColour (TextEditor::textColourId, Colours::black);
    m_labelStrDeltaFreq->setColour (TextEditor::backgroundColourId, Colour (0x00000000));

    addAndMakeVisible (m_labelCprState = new Label ("CPR state",
                                                    TRANS("Tracking")));
    m_labelCprState->setTooltip (TRANS("CPR state"));
    m_labelCprState->setFont (Font (15.00f, Font::bold));
    m_labelCprState->setJustificationType (Justification::centred);
    m_labelCprState->setEditable (false, false, false);
    m_labelCprState->setColour (Label::backgroundColourId, Colours::white);
    m_labelCprState->setColour (TextEditor::textColourId, Colours::black);
    m_labelCprState->setColour (TextEditor::backgroundColourId, Colour (0x00000000));

    addAndMakeVisible (m_labelStrState = new Label ("STR state",
                                                    TRANS("Tracking")));
    m_labelStrState->setTooltip (TRANS("STR state"));
    m_labelStrState->setFont (Font (15.00f, Font::bold));
    m_labelStrState->setJustificationType (Justification::centred);
    m_labelStrState->setEditable (false, false, false);
    m_labelStrState->setColour (Label::backgroundColourId, Colours::white);
    m_labelStrState->setColour (TextEditor::textColourId, Colours::black);
    m_labelStrState->setColour (TextEditor::backgroundColourId, Colour (0x00000000));

    addAndMakeVisible (toggleButtonAgcEnable = new ToggleButton ("AGC Enable"));
    toggleButtonAgcEnable->setTooltip (TRANS("AGC Enable"));
    toggleButtonAgcEnable->setButtonText (TRANS("On"));
    toggleButtonAgcEnable->addListener (this);

    addAndMakeVisible (m_labelAgcState = new Label ("AGC state",
                                                    TRANS("Tracking")));
    m_labelAgcState->setTooltip (TRANS("AGC state"));
    m_labelAgcState->setFont (Font (15.00f, Font::bold));
    m_labelAgcState->setJustificationType (Justification::centred);
    m_labelAgcState->setEditable (false, false, false);
    m_labelAgcState->setColour (Label::backgroundColourId, Colours::white);
    m_labelAgcState->setColour (TextEditor::textColourId, Colours::black);
    m_labelAgcState->setColour (TextEditor::backgroundColourId, Colour (0x00000000));

    addAndMakeVisible (toggleButtonAgcMuForceTrack = new ToggleButton ("AGC Force Track"));
    toggleButtonAgcMuForceTrack->setTooltip (TRANS("AGC Force Tracking Mode"));
    toggleButtonAgcMuForceTrack->setButtonText (TRANS("Track"));
    toggleButtonAgcMuForceTrack->addListener (this);

    addAndMakeVisible (m_labelDdcMinI = new Label ("Ddc-Minimum",
                                                   TRANS("-1")));
    m_labelDdcMinI->setTooltip (TRANS("Ddc-Minimum"));
    m_labelDdcMinI->setFont (Font (15.00f, Font::plain));
    m_labelDdcMinI->setJustificationType (Justification::centredRight);
    m_labelDdcMinI->setEditable (false, false, false);
    m_labelDdcMinI->setColour (TextEditor::textColourId, Colours::black);
    m_labelDdcMinI->setColour (TextEditor::backgroundColourId, Colour (0x00000000));

    addAndMakeVisible (m_labelDdcMaxI = new Label ("DDC-Maximum",
                                                   TRANS("-120")));
    m_labelDdcMaxI->setTooltip (TRANS("DDC-Maximum"));
    m_labelDdcMaxI->setFont (Font (15.00f, Font::plain));
    m_labelDdcMaxI->setJustificationType (Justification::centredRight);
    m_labelDdcMaxI->setEditable (false, false, false);
    m_labelDdcMaxI->setColour (TextEditor::textColourId, Colours::black);
    m_labelDdcMaxI->setColour (TextEditor::backgroundColourId, Colour (0x00000000));

    addAndMakeVisible (m_labelDdcMinQ = new Label ("Ddc-Minimum",
                                                   TRANS("-1")));
    m_labelDdcMinQ->setTooltip (TRANS("Ddc-Minimum"));
    m_labelDdcMinQ->setFont (Font (15.00f, Font::plain));
    m_labelDdcMinQ->setJustificationType (Justification::centredRight);
    m_labelDdcMinQ->setEditable (false, false, false);
    m_labelDdcMinQ->setColour (TextEditor::textColourId, Colours::black);
    m_labelDdcMinQ->setColour (TextEditor::backgroundColourId, Colour (0x00000000));

    addAndMakeVisible (m_labelDdcMaxQ = new Label ("DDC-Maximum",
                                                   TRANS("-120")));
    m_labelDdcMaxQ->setTooltip (TRANS("DDC-Maximum"));
    m_labelDdcMaxQ->setFont (Font (15.00f, Font::plain));
    m_labelDdcMaxQ->setJustificationType (Justification::centredRight);
    m_labelDdcMaxQ->setEditable (false, false, false);
    m_labelDdcMaxQ->setColour (TextEditor::textColourId, Colours::black);
    m_labelDdcMaxQ->setColour (TextEditor::backgroundColourId, Colour (0x00000000));

    addAndMakeVisible (m_labelDdcMinMag = new Label ("Ddc-Minimum",
                                                     TRANS("-1")));
    m_labelDdcMinMag->setTooltip (TRANS("Ddc-Minimum"));
    m_labelDdcMinMag->setFont (Font (15.00f, Font::plain));
    m_labelDdcMinMag->setJustificationType (Justification::centredRight);
    m_labelDdcMinMag->setEditable (false, false, false);
    m_labelDdcMinMag->setColour (TextEditor::textColourId, Colours::black);
    m_labelDdcMinMag->setColour (TextEditor::backgroundColourId, Colour (0x00000000));

    addAndMakeVisible (m_labelDdcMaxMag = new Label ("DDC-Maximum",
                                                     TRANS("-120")));
    m_labelDdcMaxMag->setTooltip (TRANS("DDC-Maximum"));
    m_labelDdcMaxMag->setFont (Font (15.00f, Font::plain));
    m_labelDdcMaxMag->setJustificationType (Justification::centredRight);
    m_labelDdcMaxMag->setEditable (false, false, false);
    m_labelDdcMaxMag->setColour (TextEditor::textColourId, Colours::black);
    m_labelDdcMaxMag->setColour (TextEditor::backgroundColourId, Colour (0x00000000));

    addAndMakeVisible (m_labelDdcPhiMinI = new Label ("Ddc-Minimum",
                                                      TRANS("-1")));
    m_labelDdcPhiMinI->setTooltip (TRANS("Ddc-Minimum"));
    m_labelDdcPhiMinI->setFont (Font (15.00f, Font::plain));
    m_labelDdcPhiMinI->setJustificationType (Justification::centredRight);
    m_labelDdcPhiMinI->setEditable (false, false, false);
    m_labelDdcPhiMinI->setColour (TextEditor::textColourId, Colours::black);
    m_labelDdcPhiMinI->setColour (TextEditor::backgroundColourId, Colour (0x00000000));

    addAndMakeVisible (m_labelDdcPhiMaxI = new Label ("DDC-Maximum",
                                                      TRANS("-120")));
    m_labelDdcPhiMaxI->setTooltip (TRANS("DDC-Maximum"));
    m_labelDdcPhiMaxI->setFont (Font (15.00f, Font::plain));
    m_labelDdcPhiMaxI->setJustificationType (Justification::centredRight);
    m_labelDdcPhiMaxI->setEditable (false, false, false);
    m_labelDdcPhiMaxI->setColour (TextEditor::textColourId, Colours::black);
    m_labelDdcPhiMaxI->setColour (TextEditor::backgroundColourId, Colour (0x00000000));

    addAndMakeVisible (m_labelDdcPhiMinQ = new Label ("Ddc-Minimum",
                                                      TRANS("-1")));
    m_labelDdcPhiMinQ->setTooltip (TRANS("Ddc-Minimum"));
    m_labelDdcPhiMinQ->setFont (Font (15.00f, Font::plain));
    m_labelDdcPhiMinQ->setJustificationType (Justification::centredRight);
    m_labelDdcPhiMinQ->setEditable (false, false, false);
    m_labelDdcPhiMinQ->setColour (TextEditor::textColourId, Colours::black);
    m_labelDdcPhiMinQ->setColour (TextEditor::backgroundColourId, Colour (0x00000000));

    addAndMakeVisible (m_labelDdcPhiMaxQ = new Label ("DDC-Maximum",
                                                      TRANS("-120")));
    m_labelDdcPhiMaxQ->setTooltip (TRANS("DDC-Maximum"));
    m_labelDdcPhiMaxQ->setFont (Font (15.00f, Font::plain));
    m_labelDdcPhiMaxQ->setJustificationType (Justification::centredRight);
    m_labelDdcPhiMaxQ->setEditable (false, false, false);
    m_labelDdcPhiMaxQ->setColour (TextEditor::textColourId, Colours::black);
    m_labelDdcPhiMaxQ->setColour (TextEditor::backgroundColourId, Colour (0x00000000));

    addAndMakeVisible (m_entryAgcMu_1 = new TextEditor ("AGC Adaption Rate 1"));
    m_entryAgcMu_1->setTooltip (TRANS("AGC Adaption Rate 1"));
    m_entryAgcMu_1->setMultiLine (false);
    m_entryAgcMu_1->setReturnKeyStartsNewLine (false);
    m_entryAgcMu_1->setReadOnly (false);
    m_entryAgcMu_1->setScrollbarsShown (false);
    m_entryAgcMu_1->setCaretVisible (true);
    m_entryAgcMu_1->setPopupMenuEnabled (true);
    m_entryAgcMu_1->setText (TRANS("0.000001"));

    addAndMakeVisible (m_entryCPRLoopFilterLead_1 = new TextEditor ("CPRLoopFilterLead 1"));
    m_entryCPRLoopFilterLead_1->setTooltip (TRANS("CPRLoopFilterLead 1"));
    m_entryCPRLoopFilterLead_1->setMultiLine (false);
    m_entryCPRLoopFilterLead_1->setReturnKeyStartsNewLine (false);
    m_entryCPRLoopFilterLead_1->setReadOnly (false);
    m_entryCPRLoopFilterLead_1->setScrollbarsShown (false);
    m_entryCPRLoopFilterLead_1->setCaretVisible (true);
    m_entryCPRLoopFilterLead_1->setPopupMenuEnabled (true);
    m_entryCPRLoopFilterLead_1->setText (TRANS("1000.000"));

    addAndMakeVisible (m_entryCPRLoopFilterLag_1 = new TextEditor ("CPRLoopFilterLag 1"));
    m_entryCPRLoopFilterLag_1->setTooltip (TRANS("CPRLoopFilterLag 1"));
    m_entryCPRLoopFilterLag_1->setMultiLine (false);
    m_entryCPRLoopFilterLag_1->setReturnKeyStartsNewLine (false);
    m_entryCPRLoopFilterLag_1->setReadOnly (false);
    m_entryCPRLoopFilterLag_1->setScrollbarsShown (false);
    m_entryCPRLoopFilterLag_1->setCaretVisible (true);
    m_entryCPRLoopFilterLag_1->setPopupMenuEnabled (true);
    m_entryCPRLoopFilterLag_1->setText (TRANS("1000.000"));

    addAndMakeVisible (m_entrySTRLoopFilterLead_1 = new TextEditor ("STRLoopFilterLead 1"));
    m_entrySTRLoopFilterLead_1->setTooltip (TRANS("STRLoopFilterLead 1"));
    m_entrySTRLoopFilterLead_1->setMultiLine (false);
    m_entrySTRLoopFilterLead_1->setReturnKeyStartsNewLine (false);
    m_entrySTRLoopFilterLead_1->setReadOnly (false);
    m_entrySTRLoopFilterLead_1->setScrollbarsShown (false);
    m_entrySTRLoopFilterLead_1->setCaretVisible (true);
    m_entrySTRLoopFilterLead_1->setPopupMenuEnabled (true);
    m_entrySTRLoopFilterLead_1->setText (TRANS("1000.000"));

    addAndMakeVisible (m_entrySTRLoopFilterLag_1 = new TextEditor ("STRLoopFilterLag 1"));
    m_entrySTRLoopFilterLag_1->setTooltip (TRANS("STRLoopFilterLag 1"));
    m_entrySTRLoopFilterLag_1->setMultiLine (false);
    m_entrySTRLoopFilterLag_1->setReturnKeyStartsNewLine (false);
    m_entrySTRLoopFilterLag_1->setReadOnly (false);
    m_entrySTRLoopFilterLag_1->setScrollbarsShown (false);
    m_entrySTRLoopFilterLag_1->setCaretVisible (true);
    m_entrySTRLoopFilterLag_1->setPopupMenuEnabled (true);
    m_entrySTRLoopFilterLag_1->setText (TRANS("1000.000"));

    addAndMakeVisible (toggleButtonSTRLoopFilterForceTrack = new ToggleButton ("STR Track"));
    toggleButtonSTRLoopFilterForceTrack->setTooltip (TRANS("STR Force Tracking Mode"));
    toggleButtonSTRLoopFilterForceTrack->setButtonText (TRANS("Track"));
    toggleButtonSTRLoopFilterForceTrack->addListener (this);

    addAndMakeVisible (toggleButtonCPRLoopFilterForceTrack = new ToggleButton ("CPR Track"));
    toggleButtonCPRLoopFilterForceTrack->setTooltip (TRANS("STR Force Tracking Mode"));
    toggleButtonCPRLoopFilterForceTrack->setButtonText (TRANS("Track"));
    toggleButtonCPRLoopFilterForceTrack->addListener (this);

    addAndMakeVisible (toggleButtonDfeAutoUpdateEnable = new ToggleButton ("DFE Enable Training"));
    toggleButtonDfeAutoUpdateEnable->setTooltip (TRANS("DFE Enable Training"));
    toggleButtonDfeAutoUpdateEnable->setButtonText (TRANS("Auto Upd."));
    toggleButtonDfeAutoUpdateEnable->addListener (this);

    addAndMakeVisible (m_labelEbN0 = new Label ("SNR STR",
                                                TRANS("-120")));
    m_labelEbN0->setTooltip (TRANS("SNR STR"));
    m_labelEbN0->setFont (Font (15.00f, Font::plain));
    m_labelEbN0->setJustificationType (Justification::centredRight);
    m_labelEbN0->setEditable (false, false, false);
    m_labelEbN0->setColour (TextEditor::textColourId, Colours::black);
    m_labelEbN0->setColour (TextEditor::backgroundColourId, Colour (0x00000000));

    addAndMakeVisible (m_labelFrameTotalCount = new Label ("FrameTotalCount",
                                                           TRANS("0")));
    m_labelFrameTotalCount->setTooltip (TRANS("Number of Frames Received"));
    m_labelFrameTotalCount->setFont (Font (15.00f, Font::plain));
    m_labelFrameTotalCount->setJustificationType (Justification::centredRight);
    m_labelFrameTotalCount->setEditable (false, false, false);
    m_labelFrameTotalCount->setColour (TextEditor::textColourId, Colours::black);
    m_labelFrameTotalCount->setColour (TextEditor::backgroundColourId, Colour (0x00000000));

    addAndMakeVisible (m_labelFrameDataCount = new Label ("FrameDataCount",
                                                          TRANS("0")));
    m_labelFrameDataCount->setTooltip (TRANS("Number of Data Frames Received"));
    m_labelFrameDataCount->setFont (Font (15.00f, Font::plain));
    m_labelFrameDataCount->setJustificationType (Justification::centredRight);
    m_labelFrameDataCount->setEditable (false, false, false);
    m_labelFrameDataCount->setColour (TextEditor::textColourId, Colours::black);
    m_labelFrameDataCount->setColour (TextEditor::backgroundColourId, Colour (0x00000000));

    addAndMakeVisible (m_labelFrameIdleCount = new Label ("FrameIdleCount",
                                                          TRANS("0")));
    m_labelFrameIdleCount->setTooltip (TRANS("Number of Idle Frames Received"));
    m_labelFrameIdleCount->setFont (Font (15.00f, Font::plain));
    m_labelFrameIdleCount->setJustificationType (Justification::centredRight);
    m_labelFrameIdleCount->setEditable (false, false, false);
    m_labelFrameIdleCount->setColour (TextEditor::textColourId, Colours::black);
    m_labelFrameIdleCount->setColour (TextEditor::backgroundColourId, Colour (0x00000000));

    addAndMakeVisible (m_labelFrameInvalidCount = new Label ("FrameInvalidCount",
                                                             TRANS("0")));
    m_labelFrameInvalidCount->setTooltip (TRANS("Number of Invalid Frames Received"));
    m_labelFrameInvalidCount->setFont (Font (15.00f, Font::plain));
    m_labelFrameInvalidCount->setJustificationType (Justification::centredRight);
    m_labelFrameInvalidCount->setEditable (false, false, false);
    m_labelFrameInvalidCount->setColour (TextEditor::textColourId, Colours::black);
    m_labelFrameInvalidCount->setColour (TextEditor::backgroundColourId, Colour (0x00000000));

    addAndMakeVisible (m_labelFrameByteCount = new Label ("FrameByteCount",
                                                          TRANS("0")));
    m_labelFrameByteCount->setTooltip (TRANS("Number of bytes  Received"));
    m_labelFrameByteCount->setFont (Font (15.00f, Font::plain));
    m_labelFrameByteCount->setJustificationType (Justification::centredRight);
    m_labelFrameByteCount->setEditable (false, false, false);
    m_labelFrameByteCount->setColour (TextEditor::textColourId, Colours::black);
    m_labelFrameByteCount->setColour (TextEditor::backgroundColourId, Colour (0x00000000));

    addAndMakeVisible (m_buttonResetStatistic = new TextButton ("Statistic Reset button"));
    m_buttonResetStatistic->setButtonText (TRANS("Reset"));
    m_buttonResetStatistic->addListener (this);

    addAndMakeVisible (m_sliderCarrierPhase = new Slider ("CarrierPhaseSlider"));
    m_sliderCarrierPhase->setRange (-3.14159, 3.14159, 0.001);
    m_sliderCarrierPhase->setSliderStyle (Slider::RotaryVerticalDrag);
    m_sliderCarrierPhase->setTextBoxStyle (Slider::TextBoxLeft, false, 80, 20);
    m_sliderCarrierPhase->addListener (this);

    addAndMakeVisible (m_buttonResetCPR = new TextButton ("CPR Reset button"));
    m_buttonResetCPR->setButtonText (TRANS("Reset"));
    m_buttonResetCPR->addListener (this);

    addAndMakeVisible (m_buttonResetStr = new TextButton ("STR Reset button"));
    m_buttonResetStr->setButtonText (TRANS("Reset"));
    m_buttonResetStr->addListener (this);

    addAndMakeVisible (comboBoxCmaMode = new ComboBox ("CmaMode"));
    comboBoxCmaMode->setEditableText (false);
    comboBoxCmaMode->setJustificationType (Justification::centredLeft);
    comboBoxCmaMode->setTextWhenNothingSelected (String::empty);
    comboBoxCmaMode->setTextWhenNoChoicesAvailable (TRANS("(no choices)"));
    comboBoxCmaMode->addItem (TRANS("CMA"), 1);
    comboBoxCmaMode->addItem (TRANS("MMA"), 2);
    comboBoxCmaMode->addItem (TRANS("S-MMA"), 3);
    comboBoxCmaMode->addListener (this);

    addAndMakeVisible (toggleButtonCMAEnable = new ToggleButton ("CMA Button"));
    toggleButtonCMAEnable->setButtonText (TRANS("On"));
    toggleButtonCMAEnable->addListener (this);

    addAndMakeVisible (m_labelPowerDecision = new Label ("Slicer-Power",
                                                         TRANS("-120")));
    m_labelPowerDecision->setTooltip (TRANS("Slicer-Power"));
    m_labelPowerDecision->setFont (Font (15.00f, Font::plain));
    m_labelPowerDecision->setJustificationType (Justification::centredRight);
    m_labelPowerDecision->setEditable (false, false, false);
    m_labelPowerDecision->setColour (TextEditor::textColourId, Colours::black);
    m_labelPowerDecision->setColour (TextEditor::backgroundColourId, Colour (0x00000000));

    addAndMakeVisible (m_labelPowerDecisionMag = new Label ("Slicer-Power Magnitude",
                                                            TRANS("-120")));
    m_labelPowerDecisionMag->setTooltip (TRANS("Slicer-Power Magnitude"));
    m_labelPowerDecisionMag->setFont (Font (15.00f, Font::plain));
    m_labelPowerDecisionMag->setJustificationType (Justification::centredRight);
    m_labelPowerDecisionMag->setEditable (false, false, false);
    m_labelPowerDecisionMag->setColour (TextEditor::textColourId, Colours::black);
    m_labelPowerDecisionMag->setColour (TextEditor::backgroundColourId, Colour (0x00000000));

    addAndMakeVisible (m_labelPowerDecisionPhase = new Label ("Slicer-Power Phase",
                                                              TRANS("-120")));
    m_labelPowerDecisionPhase->setTooltip (TRANS("Slicer-Power Phase"));
    m_labelPowerDecisionPhase->setFont (Font (15.00f, Font::plain));
    m_labelPowerDecisionPhase->setJustificationType (Justification::centredRight);
    m_labelPowerDecisionPhase->setEditable (false, false, false);
    m_labelPowerDecisionPhase->setColour (TextEditor::textColourId, Colours::black);
    m_labelPowerDecisionPhase->setColour (TextEditor::backgroundColourId, Colour (0x00000000));

    addAndMakeVisible (m_labelNoiseCpr = new Label ("SNR CPR",
                                                    TRANS("-120")));
    m_labelNoiseCpr->setTooltip (TRANS("SNR CPR"));
    m_labelNoiseCpr->setFont (Font (15.00f, Font::plain));
    m_labelNoiseCpr->setJustificationType (Justification::centredRight);
    m_labelNoiseCpr->setEditable (false, false, false);
    m_labelNoiseCpr->setColour (TextEditor::textColourId, Colours::black);
    m_labelNoiseCpr->setColour (TextEditor::backgroundColourId, Colour (0x00000000));


    //[UserPreSize]
    //[/UserPreSize]

    setSize (800, 1000);


    //[Constructor] You can add your own custom stuff here..
	addChangeListener(this);

	// Texteditor Listeners
	m_entryCmaMu->addListener(this);
	m_entryDfeMu->addListener(this);
	m_entryAgcMu_0->addListener(this);
	m_entryAgcMu_1->addListener(this);
	m_entryCPRLoopFilterLead_0->addListener(this);
	m_entryCPRLoopFilterLead_1->addListener(this);
	m_entryCPRLoopFilterLag_0->addListener(this);
	m_entryCPRLoopFilterLag_1->addListener(this);
	m_entrySTRLoopFilterLead_0->addListener(this);
	m_entrySTRLoopFilterLead_1->addListener(this);
	m_entrySTRLoopFilterLag_0->addListener(this);
	m_entrySTRLoopFilterLag_1->addListener(this);
	m_entryNumBitsPerSymbol->addListener(this);
	m_entryDdcFrequency->addListener(this);
	m_entrySymbolRate->addListener(this);

	// Texteditor Select All on focus
	m_entryCmaMu->setSelectAllWhenFocused(true);
	m_entryDfeMu->setSelectAllWhenFocused(true);
	m_entryAgcMu_0->setSelectAllWhenFocused(true);
	m_entryAgcMu_1->setSelectAllWhenFocused(true);
	m_entryCPRLoopFilterLead_0->setSelectAllWhenFocused(true);
	m_entryCPRLoopFilterLead_1->setSelectAllWhenFocused(true);
	m_entryCPRLoopFilterLag_0->setSelectAllWhenFocused(true);
	m_entryCPRLoopFilterLag_1->setSelectAllWhenFocused(true);
	m_entrySTRLoopFilterLead_0->setSelectAllWhenFocused(true);
	m_entrySTRLoopFilterLead_1->setSelectAllWhenFocused(true);
	m_entrySTRLoopFilterLag_0->setSelectAllWhenFocused(true);
	m_entrySTRLoopFilterLag_1->setSelectAllWhenFocused(true);
	m_entryNumBitsPerSymbol->setSelectAllWhenFocused(true);
	m_entryDdcFrequency->setSelectAllWhenFocused(true);
	m_entrySymbolRate->setSelectAllWhenFocused(true);

	m_userParamEntryinProgress = false;
	m_tooltipWindow  = new TooltipWindow (this, 500);
    //[/Constructor]
}

ControlComponent::~ControlComponent()
{
    //[Destructor_pre]. You can add your own custom destruction code here..
	m_tooltipWindow = nullptr;
    //[/Destructor_pre]

    groupComponent3 = nullptr;
    m_GroupSymbolTimingRecovery2 = nullptr;
    groupComponent = nullptr;
    groupDFE = nullptr;
    groupCMA = nullptr;
    groupCarrierPhaseRecovery = nullptr;
    m_GroupSymbolTimingRecovery = nullptr;
    toggleButtonCPREnable = nullptr;
    toggleButtonDFEEnable = nullptr;
    toggleButtonSTREnable = nullptr;
    m_entrySTRLoopFilterLead_0 = nullptr;
    m_entrySTRLoopFilterLag_0 = nullptr;
    m_entryCPRLoopFilterLead_0 = nullptr;
    m_entryCPRLoopFilterLag_0 = nullptr;
    m_buttonDfeOnUpdateFromDfeOff = nullptr;
    m_buttonResetDFE = nullptr;
    m_buttonResetCMA = nullptr;
    groupComponent2 = nullptr;
    m_entryCmaMu = nullptr;
    m_entryDfeMu = nullptr;
    m_labelPowerRF = nullptr;
    m_labelPowerDDC = nullptr;
    m_labelPowerMF = nullptr;
    m_labelPowerCPR = nullptr;
    m_labelPowerAGC2 = nullptr;
    m_labelPowerEQ = nullptr;
    m_labelSnrCurrent = nullptr;
    m_labelSnrCma = nullptr;
    m_labelSnrDfeOn = nullptr;
    m_labelSnrDfeOff = nullptr;
    m_labelSnrSymbolMag = nullptr;
    m_labelSnrSymbolPhase = nullptr;
    m_labelNoiseStr = nullptr;
    m_labelSymbolReceivedCount = nullptr;
    m_buttonResetReset = nullptr;
    m_entryAgcMu_0 = nullptr;
    toggleButtonCmaTrainingEnable = nullptr;
    toggleButtonDfeTrainingEnable = nullptr;
    m_buttonDfeOffUpdateFromCma = nullptr;
    m_entryNumBitsPerSymbol = nullptr;
    m_entrySymbolRate = nullptr;
    m_entryDdcFrequency = nullptr;
    m_labelDdcDeltaFreq = nullptr;
    m_labelStrDeltaFreq = nullptr;
    m_labelCprState = nullptr;
    m_labelStrState = nullptr;
    toggleButtonAgcEnable = nullptr;
    m_labelAgcState = nullptr;
    toggleButtonAgcMuForceTrack = nullptr;
    m_labelDdcMinI = nullptr;
    m_labelDdcMaxI = nullptr;
    m_labelDdcMinQ = nullptr;
    m_labelDdcMaxQ = nullptr;
    m_labelDdcMinMag = nullptr;
    m_labelDdcMaxMag = nullptr;
    m_labelDdcPhiMinI = nullptr;
    m_labelDdcPhiMaxI = nullptr;
    m_labelDdcPhiMinQ = nullptr;
    m_labelDdcPhiMaxQ = nullptr;
    m_entryAgcMu_1 = nullptr;
    m_entryCPRLoopFilterLead_1 = nullptr;
    m_entryCPRLoopFilterLag_1 = nullptr;
    m_entrySTRLoopFilterLead_1 = nullptr;
    m_entrySTRLoopFilterLag_1 = nullptr;
    toggleButtonSTRLoopFilterForceTrack = nullptr;
    toggleButtonCPRLoopFilterForceTrack = nullptr;
    toggleButtonDfeAutoUpdateEnable = nullptr;
    m_labelEbN0 = nullptr;
    m_labelFrameTotalCount = nullptr;
    m_labelFrameDataCount = nullptr;
    m_labelFrameIdleCount = nullptr;
    m_labelFrameInvalidCount = nullptr;
    m_labelFrameByteCount = nullptr;
    m_buttonResetStatistic = nullptr;
    m_sliderCarrierPhase = nullptr;
    m_buttonResetCPR = nullptr;
    m_buttonResetStr = nullptr;
    comboBoxCmaMode = nullptr;
    toggleButtonCMAEnable = nullptr;
    m_labelPowerDecision = nullptr;
    m_labelPowerDecisionMag = nullptr;
    m_labelPowerDecisionPhase = nullptr;
    m_labelNoiseCpr = nullptr;


    //[Destructor]. You can add your own custom destruction code here..
    //[/Destructor]
}

//==============================================================================
void ControlComponent::paint (Graphics& g)
{
    //[UserPrePaint] Add your own custom painting code here..
    //[/UserPrePaint]

    g.fillAll (Colours::white);

    g.setColour (Colours::black);
    g.setFont (Font (15.00f, Font::plain));
    g.drawText (TRANS("Loop Filter Acquisition [*1E-6]"),
                31, 78, 209, 24,
                Justification::centredLeft, true);

    g.setColour (Colours::black);
    g.setFont (Font (15.00f, Font::plain));
    g.drawText (TRANS("Current [dB]"),
                348, 472, 156, 24,
                Justification::centredLeft, true);

    g.setColour (Colours::black);
    g.setFont (Font (15.00f, Font::plain));
    g.drawText (TRANS("CMA [dB]"),
                348, 496, 156, 24,
                Justification::centredLeft, true);

    g.setColour (Colours::black);
    g.setFont (Font (15.00f, Font::plain));
    g.drawText (TRANS("DFE-on [dB]"),
                348, 520, 156, 24,
                Justification::centredLeft, true);

    g.setColour (Colours::black);
    g.setFont (Font (15.00f, Font::plain));
    g.drawText (TRANS("DFE-off [dB]"),
                348, 544, 156, 24,
                Justification::centredLeft, true);

    g.setColour (Colours::black);
    g.setFont (Font (15.00f, Font::plain));
    g.drawText (TRANS("Symbol Magnitude [dB]"),
                348, 568, 156, 24,
                Justification::centredLeft, true);

    g.setColour (Colours::black);
    g.setFont (Font (15.00f, Font::plain));
    g.drawText (TRANS("Symbol Phase [dB]"),
                348, 592, 156, 24,
                Justification::centredLeft, true);

    g.setColour (Colours::black);
    g.setFont (Font (15.00f, Font::plain));
    g.drawText (TRANS("Adaption Rate [*1E-3]"),
                23, 358, 145, 24,
                Justification::centredLeft, true);

    g.setColour (Colours::black);
    g.setFont (Font (15.00f, Font::plain));
    g.drawText (TRANS("Adaption Rate [*1E-3]"),
                287, 358, 144, 24,
                Justification::centredLeft, true);

    g.setColour (Colours::black);
    g.setFont (Font (15.00f, Font::plain));
    g.drawText (TRANS("RF [dB]"),
                84, 472, 84, 24,
                Justification::centredLeft, true);

    g.setColour (Colours::black);
    g.setFont (Font (15.00f, Font::plain));
    g.drawText (TRANS("DDC [dB]"),
                84, 496, 84, 24,
                Justification::centredLeft, true);

    g.setColour (Colours::black);
    g.setFont (Font (15.00f, Font::plain));
    g.drawText (TRANS("MF [dB]"),
                84, 520, 84, 24,
                Justification::centredLeft, true);

    g.setColour (Colours::black);
    g.setFont (Font (15.00f, Font::plain));
    g.drawText (TRANS("CPR [dB]"),
                84, 544, 84, 24,
                Justification::centredLeft, true);

    g.setColour (Colours::black);
    g.setFont (Font (15.00f, Font::plain));
    g.drawText (TRANS("AGC [dB]"),
                84, 568, 84, 24,
                Justification::centredLeft, true);

    g.setColour (Colours::black);
    g.setFont (Font (15.00f, Font::plain));
    g.drawText (TRANS("EQ [dB]"),
                84, 592, 84, 24,
                Justification::centredLeft, true);

    g.setColour (Colours::black);
    g.setFont (Font (15.00f, Font::plain));
    g.drawText (TRANS("STR [dB]"),
                648, 624, 72, 24,
                Justification::centredLeft, true);

    g.setColour (Colours::black);
    g.setFont (Font (15.00f, Font::plain));
    g.drawText (TRANS("Adaption Rate Acquisition [*1E-3]"),
                559, 78, 217, 24,
                Justification::centredLeft, true);

    g.setColour (Colours::black);
    g.setFont (Font (15.00f, Font::plain));
    g.drawText (TRANS("# Bits per Symbol"),
                356, 736, 140, 24,
                Justification::centredLeft, true);

    g.setColour (Colours::black);
    g.setFont (Font (15.00f, Font::plain));
    g.drawText (TRANS("Symbolrate"),
                356, 760, 140, 24,
                Justification::centredLeft, true);

    g.setColour (Colours::black);
    g.setFont (Font (15.00f, Font::plain));
    g.drawText (TRANS("DDC Frequency"),
                356, 782, 140, 24,
                Justification::centredLeft, true);

    g.setColour (Colours::black);
    g.setFont (Font (15.00f, Font::plain));
    g.drawText (TRANS("dF [Hz]"),
                119, 206, 124, 26,
                Justification::centredLeft, true);

    g.setColour (Colours::black);
    g.setFont (Font (15.00f, Font::plain));
    g.drawText (TRANS("dF [sym/s]"),
                383, 206, 124, 26,
                Justification::centredLeft, true);

    g.setColour (Colours::black);
    g.setFont (Font (15.00f, Font::plain));
    g.drawText (TRANS("min"),
                348, 820, 36, 20,
                Justification::centred, true);

    g.setColour (Colours::black);
    g.setFont (Font (15.00f, Font::plain));
    g.drawText (TRANS("max"),
                428, 820, 36, 20,
                Justification::centred, true);

    g.setColour (Colours::black);
    g.setFont (Font (15.00f, Font::plain));
    g.drawText (TRANS("I"),
                300, 844, 44, 20,
                Justification::centred, true);

    g.setColour (Colours::black);
    g.setFont (Font (15.00f, Font::plain));
    g.drawText (TRANS("Q"),
                300, 868, 44, 20,
                Justification::centred, true);

    g.setColour (Colours::black);
    g.setFont (Font (15.00f, Font::plain));
    g.drawText (TRANS("Mag"),
                300, 892, 44, 20,
                Justification::centred, true);

    g.setColour (Colours::black);
    g.setFont (Font (15.00f, Font::plain));
    g.drawText (TRANS("Phi I"),
                300, 916, 44, 20,
                Justification::centred, true);

    g.setColour (Colours::black);
    g.setFont (Font (15.00f, Font::plain));
    g.drawText (TRANS("Phi Q"),
                300, 940, 44, 20,
                Justification::centred, true);

    g.setColour (Colours::black);
    g.setFont (Font (15.00f, Font::plain));
    g.drawText (TRANS("Lead"),
                104, 104, 36, 24,
                Justification::centredLeft, true);

    g.setColour (Colours::black);
    g.setFont (Font (15.00f, Font::plain));
    g.drawText (TRANS("Lag"),
                224, 104, 32, 24,
                Justification::centredLeft, true);

    g.setColour (Colours::black);
    g.setFont (Font (15.00f, Font::plain));
    g.drawText (TRANS("Loop Filter Tracking [*1E-6]"),
                31, 142, 209, 24,
                Justification::centredLeft, true);

    g.setColour (Colours::black);
    g.setFont (Font (15.00f, Font::plain));
    g.drawText (TRANS("Lead"),
                104, 168, 36, 24,
                Justification::centredLeft, true);

    g.setColour (Colours::black);
    g.setFont (Font (15.00f, Font::plain));
    g.drawText (TRANS("Lag"),
                224, 168, 32, 24,
                Justification::centredLeft, true);

    g.setColour (Colours::black);
    g.setFont (Font (15.00f, Font::plain));
    g.drawText (TRANS("Loop Filter Acquisition [*1E-6]"),
                295, 78, 209, 24,
                Justification::centredLeft, true);

    g.setColour (Colours::black);
    g.setFont (Font (15.00f, Font::plain));
    g.drawText (TRANS("Lead"),
                368, 104, 36, 24,
                Justification::centredLeft, true);

    g.setColour (Colours::black);
    g.setFont (Font (15.00f, Font::plain));
    g.drawText (TRANS("Lag"),
                488, 104, 32, 24,
                Justification::centredLeft, true);

    g.setColour (Colours::black);
    g.setFont (Font (15.00f, Font::plain));
    g.drawText (TRANS("Loop Filter Tracking [*1E-6]"),
                295, 142, 209, 24,
                Justification::centredLeft, true);

    g.setColour (Colours::black);
    g.setFont (Font (15.00f, Font::plain));
    g.drawText (TRANS("Lead"),
                368, 168, 36, 24,
                Justification::centredLeft, true);

    g.setColour (Colours::black);
    g.setFont (Font (15.00f, Font::plain));
    g.drawText (TRANS("Lag"),
                488, 168, 32, 24,
                Justification::centredLeft, true);

    g.setColour (Colours::black);
    g.setFont (Font (15.00f, Font::plain));
    g.drawText (TRANS("Adaption Rate Tracking [*1E-3]"),
                559, 142, 217, 24,
                Justification::centredLeft, true);

    g.setColour (Colours::black);
    g.setFont (Font (15.00f, Font::plain));
    g.drawText (TRANS("EB/N0 [dB]"),
                348, 616, 156, 24,
                Justification::centredLeft, true);

    g.setColour (Colours::black);
    g.setFont (Font (15.00f, Font::plain));
    g.drawText (TRANS("# Symbols"),
                640, 288, 120, 24,
                Justification::centredLeft, true);

    g.setColour (Colours::black);
    g.setFont (Font (15.00f, Font::plain));
    g.drawText (TRANS("# Frames"),
                640, 312, 120, 24,
                Justification::centredLeft, true);

    g.setColour (Colours::black);
    g.setFont (Font (15.00f, Font::plain));
    g.drawText (TRANS("# Data Frames"),
                640, 360, 120, 24,
                Justification::centredLeft, true);

    g.setColour (Colours::black);
    g.setFont (Font (15.00f, Font::plain));
    g.drawText (TRANS("# Idle Frames"),
                640, 384, 120, 24,
                Justification::centredLeft, true);

    g.setColour (Colours::black);
    g.setFont (Font (15.00f, Font::plain));
    g.drawText (TRANS("# Bytes"),
                640, 408, 120, 24,
                Justification::centredLeft, true);

    g.setColour (Colours::black);
    g.setFont (Font (15.00f, Font::plain));
    g.drawText (TRANS("# Invalid Frames"),
                640, 336, 120, 24,
                Justification::centredLeft, true);

    g.setColour (Colours::black);
    g.setFont (Font (15.00f, Font::plain));
    g.drawText (TRANS("Decision [dB]"),
                84, 616, 84, 24,
                Justification::centredLeft, true);

    g.setColour (Colours::black);
    g.setFont (Font (15.00f, Font::plain));
    g.drawText (TRANS("Decision Magnitude [dB]"),
                84, 640, 164, 24,
                Justification::centredLeft, true);

    g.setColour (Colours::black);
    g.setFont (Font (15.00f, Font::plain));
    g.drawText (TRANS("Decision Phase [dB]"),
                84, 664, 164, 24,
                Justification::centredLeft, true);

    g.setColour (Colours::black);
    g.setFont (Font (15.00f, Font::plain));
    g.drawText (TRANS("CPR [dB]"),
                647, 646, 72, 24,
                Justification::centredLeft, true);

    //[UserPaint] Add your own custom painting code here..
    //[/UserPaint]
}

void ControlComponent::resized()
{
    groupComponent3->setBounds (536, 272, 256, 168);
    m_GroupSymbolTimingRecovery2->setBounds (536, 8, 256, 256);
    groupComponent->setBounds (16, 448, 248, 248);
    groupDFE->setBounds (272, 272, 256, 168);
    groupCMA->setBounds (8, 272, 256, 168);
    groupCarrierPhaseRecovery->setBounds (8, 8, 256, 256);
    m_GroupSymbolTimingRecovery->setBounds (272, 8, 256, 256);
    toggleButtonCPREnable->setBounds (192, 24, 48, 24);
    toggleButtonDFEEnable->setBounds (280, 296, 64, 24);
    toggleButtonSTREnable->setBounds (456, 24, 48, 24);
    m_entrySTRLoopFilterLead_0->setBounds (288, 104, 72, 24);
    m_entrySTRLoopFilterLag_0->setBounds (408, 104, 72, 24);
    m_entryCPRLoopFilterLead_0->setBounds (24, 104, 72, 24);
    m_entryCPRLoopFilterLag_0->setBounds (144, 104, 72, 24);
    m_buttonDfeOnUpdateFromDfeOff->setBounds (448, 296, 64, 24);
    m_buttonResetDFE->setBounds (456, 408, 64, 24);
    m_buttonResetCMA->setBounds (192, 408, 64, 24);
    groupComponent2->setBounds (272, 448, 256, 232);
    m_entryCmaMu->setBounds (24, 384, 88, 24);
    m_entryDfeMu->setBounds (288, 384, 88, 24);
    m_labelPowerRF->setBounds (24, 472, 58, 24);
    m_labelPowerDDC->setBounds (24, 496, 58, 24);
    m_labelPowerMF->setBounds (24, 520, 58, 24);
    m_labelPowerCPR->setBounds (24, 544, 58, 24);
    m_labelPowerAGC2->setBounds (24, 568, 58, 24);
    m_labelPowerEQ->setBounds (24, 592, 58, 24);
    m_labelSnrCurrent->setBounds (280, 472, 58, 24);
    m_labelSnrCma->setBounds (280, 496, 58, 24);
    m_labelSnrDfeOn->setBounds (280, 520, 58, 24);
    m_labelSnrDfeOff->setBounds (280, 544, 58, 24);
    m_labelSnrSymbolMag->setBounds (280, 568, 58, 24);
    m_labelSnrSymbolPhase->setBounds (280, 592, 58, 24);
    m_labelNoiseStr->setBounds (576, 624, 58, 24);
    m_labelSymbolReceivedCount->setBounds (544, 288, 90, 24);
    m_buttonResetReset->setBounds (512, 792, 64, 24);
    m_entryAgcMu_0->setBounds (560, 104, 64, 24);
    toggleButtonCmaTrainingEnable->setBounds (24, 320, 64, 24);
    toggleButtonDfeTrainingEnable->setBounds (280, 320, 64, 24);
    m_buttonDfeOffUpdateFromCma->setBounds (184, 296, 64, 24);
    m_entryNumBitsPerSymbol->setBounds (320, 736, 32, 24);
    m_entrySymbolRate->setBounds (264, 760, 88, 24);
    m_entryDdcFrequency->setBounds (264, 784, 88, 24);
    m_labelDdcDeltaFreq->setBounds (16, 208, 98, 24);
    m_labelStrDeltaFreq->setBounds (280, 208, 98, 24);
    m_labelCprState->setBounds (24, 32, 112, 24);
    m_labelStrState->setBounds (288, 32, 112, 24);
    toggleButtonAgcEnable->setBounds (720, 24, 48, 24);
    m_labelAgcState->setBounds (552, 32, 112, 24);
    toggleButtonAgcMuForceTrack->setBounds (720, 48, 64, 24);
    m_labelDdcMinI->setBounds (320, 840, 58, 24);
    m_labelDdcMaxI->setBounds (408, 840, 58, 24);
    m_labelDdcMinQ->setBounds (320, 864, 58, 24);
    m_labelDdcMaxQ->setBounds (408, 864, 58, 24);
    m_labelDdcMinMag->setBounds (320, 888, 58, 24);
    m_labelDdcMaxMag->setBounds (408, 888, 58, 24);
    m_labelDdcPhiMinI->setBounds (320, 912, 58, 24);
    m_labelDdcPhiMaxI->setBounds (408, 912, 58, 24);
    m_labelDdcPhiMinQ->setBounds (320, 936, 58, 24);
    m_labelDdcPhiMaxQ->setBounds (408, 936, 58, 24);
    m_entryAgcMu_1->setBounds (560, 168, 64, 24);
    m_entryCPRLoopFilterLead_1->setBounds (24, 168, 72, 24);
    m_entryCPRLoopFilterLag_1->setBounds (144, 168, 72, 24);
    m_entrySTRLoopFilterLead_1->setBounds (288, 168, 72, 24);
    m_entrySTRLoopFilterLag_1->setBounds (408, 168, 72, 24);
    toggleButtonSTRLoopFilterForceTrack->setBounds (456, 48, 64, 24);
    toggleButtonCPRLoopFilterForceTrack->setBounds (192, 48, 64, 24);
    toggleButtonDfeAutoUpdateEnable->setBounds (352, 296, 88, 24);
    m_labelEbN0->setBounds (280, 616, 58, 24);
    m_labelFrameTotalCount->setBounds (544, 312, 90, 24);
    m_labelFrameDataCount->setBounds (544, 360, 90, 24);
    m_labelFrameIdleCount->setBounds (544, 384, 90, 24);
    m_labelFrameInvalidCount->setBounds (544, 336, 90, 24);
    m_labelFrameByteCount->setBounds (544, 408, 90, 24);
    m_buttonResetStatistic->setBounds (720, 408, 64, 24);
    m_sliderCarrierPhase->setBounds (568, 480, 150, 24);
    m_buttonResetCPR->setBounds (192, 232, 64, 24);
    m_buttonResetStr->setBounds (456, 232, 64, 24);
    comboBoxCmaMode->setBounds (96, 296, 72, 24);
    toggleButtonCMAEnable->setBounds (24, 296, 64, 24);
    m_labelPowerDecision->setBounds (24, 616, 58, 24);
    m_labelPowerDecisionMag->setBounds (24, 640, 58, 24);
    m_labelPowerDecisionPhase->setBounds (24, 664, 58, 24);
    m_labelNoiseCpr->setBounds (576, 648, 58, 24);
    //[UserResized] Add your own custom resize handling here..
    //[/UserResized]
}

void ControlComponent::buttonClicked (Button* buttonThatWasClicked)
{
    //[UserbuttonClicked_Pre]
	bool isOn = buttonThatWasClicked->getToggleState();

    //[/UserbuttonClicked_Pre]

    if (buttonThatWasClicked == toggleButtonCPREnable)
    {
        //[UserButtonCode_toggleButtonCPREnable] -- add your button handler code here..
		if (isOn)
		{
			m_params.cpr_mode = cpr_mode_enabled;
		}
		else
		{
			m_params.cpr_mode = cpr_mode_disabled;
		}
		m_pReceiverControlListener->setParams(m_params);

        //[/UserButtonCode_toggleButtonCPREnable]
    }
    else if (buttonThatWasClicked == toggleButtonDFEEnable)
    {
        //[UserButtonCode_toggleButtonDFEEnable] -- add your button handler code here..
		if (isOn)
		{
			m_params.eq_mode = eq_mode_dfe;
		}
		else
		{
			m_params.eq_mode = eq_mode_disabled;
		}
		m_pReceiverControlListener->setParams(m_params);
        //[/UserButtonCode_toggleButtonDFEEnable]
    }
    else if (buttonThatWasClicked == toggleButtonSTREnable)
    {
        //[UserButtonCode_toggleButtonSTREnable] -- add your button handler code here..
		if (isOn)
		{
			m_params.str_mode = str_mode_enabled;
		}
		else
		{
			m_params.str_mode = str_mode_disabled;
		}
		m_pReceiverControlListener->setParams(m_params);
        //[/UserButtonCode_toggleButtonSTREnable]
    }
    else if (buttonThatWasClicked == m_buttonDfeOnUpdateFromDfeOff)
    {
        //[UserButtonCode_m_buttonDfeOnUpdateFromDfeOff] -- add your button handler code here..
		m_pReceiverControlListener->dfeOnUpdateFromDfeOff();
        //[/UserButtonCode_m_buttonDfeOnUpdateFromDfeOff]
    }
    else if (buttonThatWasClicked == m_buttonResetDFE)
    {
        //[UserButtonCode_m_buttonResetDFE] -- add your button handler code here..
		m_pReceiverControlListener->dfeReset();
        //[/UserButtonCode_m_buttonResetDFE]
    }
    else if (buttonThatWasClicked == m_buttonResetCMA)
    {
        //[UserButtonCode_m_buttonResetCMA] -- add your button handler code here..
		m_pReceiverControlListener->cmaReset();
        //[/UserButtonCode_m_buttonResetCMA]
    }
    else if (buttonThatWasClicked == m_buttonResetReset)
    {
        //[UserButtonCode_m_buttonResetReset] -- add your button handler code here..
		m_pReceiverControlListener->reset();
        //[/UserButtonCode_m_buttonResetReset]
    }
    else if (buttonThatWasClicked == toggleButtonCmaTrainingEnable)
    {
        //[UserButtonCode_toggleButtonCmaTrainingEnable] -- add your button handler code here..
		if (isOn)
		{
			m_params.cmaMode = cma_mode_training_enabled;
		}
		else
		{
			m_params.cmaMode = cma_mode_training_disabled;
		}
		m_pReceiverControlListener->setParams(m_params);
        //[/UserButtonCode_toggleButtonCmaTrainingEnable]
    }
    else if (buttonThatWasClicked == toggleButtonDfeTrainingEnable)
    {
        //[UserButtonCode_toggleButtonDfeTrainingEnable] -- add your button handler code here..
		if (isOn)
		{
			m_params.dfeMode = dfe_mode_training_enabled;
		}
		else
		{
			m_params.dfeMode = dfe_mode_training_disabled;
		}
		m_pReceiverControlListener->setParams(m_params);
        //[/UserButtonCode_toggleButtonDfeTrainingEnable]
    }
    else if (buttonThatWasClicked == m_buttonDfeOffUpdateFromCma)
    {
        //[UserButtonCode_m_buttonDfeOffUpdateFromCma] -- add your button handler code here..
		m_pReceiverControlListener->dfeOffUpdateFromCma();
        //[/UserButtonCode_m_buttonDfeOffUpdateFromCma]
    }
    else if (buttonThatWasClicked == toggleButtonAgcEnable)
    {
        //[UserButtonCode_toggleButtonAgcEnable] -- add your button handler code here..
		if (isOn)
		{
			m_params.agc_mode = agc_mode_enabled;
		}
		else
		{
			m_params.agc_mode = agc_mode_disabled;
		}
		m_pReceiverControlListener->setParams(m_params);
        //[/UserButtonCode_toggleButtonAgcEnable]
    }
    else if (buttonThatWasClicked == toggleButtonAgcMuForceTrack)
    {
        //[UserButtonCode_toggleButtonAgcMuForceTrack] -- add your button handler code here..
		m_params.agcMu_index = (uint32_t)isOn;
		m_pReceiverControlListener->setParams(m_params);
        //[/UserButtonCode_toggleButtonAgcMuForceTrack]
    }
    else if (buttonThatWasClicked == toggleButtonSTRLoopFilterForceTrack)
    {
        //[UserButtonCode_toggleButtonSTRLoopFilterForceTrack] -- add your button handler code here..
		m_params.str_loopfilter_coeff_index = (uint32_t)isOn;
		m_pReceiverControlListener->setParams(m_params);
        //[/UserButtonCode_toggleButtonSTRLoopFilterForceTrack]
    }
    else if (buttonThatWasClicked == toggleButtonCPRLoopFilterForceTrack)
    {
        //[UserButtonCode_toggleButtonCPRLoopFilterForceTrack] -- add your button handler code here..
		m_params.cpr_loopfilter_coeff_index = (uint32_t)isOn;
		m_pReceiverControlListener->setParams(m_params);
        //[/UserButtonCode_toggleButtonCPRLoopFilterForceTrack]
    }
    else if (buttonThatWasClicked == toggleButtonDfeAutoUpdateEnable)
    {
        //[UserButtonCode_toggleButtonDfeAutoUpdateEnable] -- add your button handler code here..
		m_params.dfeAutoUpdateEnable = isOn;
		m_pReceiverControlListener->setParams(m_params);
        //[/UserButtonCode_toggleButtonDfeAutoUpdateEnable]
    }
    else if (buttonThatWasClicked == m_buttonResetStatistic)
    {
        //[UserButtonCode_m_buttonResetStatistic] -- add your button handler code here..
		m_pReceiverControlListener->statisticsReset();
        //[/UserButtonCode_m_buttonResetStatistic]
    }
    else if (buttonThatWasClicked == m_buttonResetCPR)
    {
        //[UserButtonCode_m_buttonResetCPR] -- add your button handler code here..
		m_pReceiverControlListener->cprReset();
        //[/UserButtonCode_m_buttonResetCPR]
    }
    else if (buttonThatWasClicked == m_buttonResetStr)
    {
        //[UserButtonCode_m_buttonResetStr] -- add your button handler code here..
		m_pReceiverControlListener->strReset();
        //[/UserButtonCode_m_buttonResetStr]
    }
    else if (buttonThatWasClicked == toggleButtonCMAEnable)
    {
        //[UserButtonCode_toggleButtonCMAEnable] -- add your button handler code here..
		if (isOn)
		{
			m_params.eq_mode = eq_mode_cma;
		}
		else
		{
			m_params.eq_mode = eq_mode_disabled;
		}
		m_pReceiverControlListener->setParams(m_params);
        //[/UserButtonCode_toggleButtonCMAEnable]
    }

    //[UserbuttonClicked_Post]
    //[/UserbuttonClicked_Post]
}

void ControlComponent::sliderValueChanged (Slider* sliderThatWasMoved)
{
    //[UsersliderValueChanged_Pre]
    //[/UsersliderValueChanged_Pre]

    if (sliderThatWasMoved == m_sliderCarrierPhase)
    {
        //[UserSliderCode_m_sliderCarrierPhase] -- add your slider handling code here..
		m_params.CPR_phase = (float)sliderThatWasMoved->getValue();
		m_pReceiverControlListener->setParams(m_params);
        //[/UserSliderCode_m_sliderCarrierPhase]
    }

    //[UsersliderValueChanged_Post]
    //[/UsersliderValueChanged_Post]
}

void ControlComponent::comboBoxChanged (ComboBox* comboBoxThatHasChanged)
{
    //[UsercomboBoxChanged_Pre]
    //[/UsercomboBoxChanged_Pre]

    if (comboBoxThatHasChanged == comboBoxCmaMode)
    {
        //[UserComboBoxCode_comboBoxCmaMode] -- add your combo box handling code here..
		m_params.cmaType = (cma_type)(comboBoxThatHasChanged->getSelectedItemIndex());
		m_pReceiverControlListener->setParams(m_params);
        //[/UserComboBoxCode_comboBoxCmaMode]
    }

    //[UsercomboBoxChanged_Post]
    //[/UsercomboBoxChanged_Post]
}

void ControlComponent::mouseDown (const MouseEvent& e)
{
    //[UserCode_mouseDown] -- Add your code here...
	(void)e;
	m_buttonResetReset->grabKeyboardFocus();
    //[/UserCode_mouseDown]
}



//[MiscUserCode] You can add your own definitions of your custom methods or any other code here...
void ControlComponent::textEditorTextChanged (TextEditor &textEditor)
{
	m_userParamEntryinProgress = textEditor.isTextInputActive();
}

void ControlComponent::textEditorReturnKeyPressed (TextEditor &textEditor)
{
	(void)textEditor;

	m_buttonResetReset->grabKeyboardFocus();
}

void ControlComponent::textEditorFocusLost (TextEditor &textEditor)
{
	if (textEditor.getName() == m_entryCmaMu->getName())
	{
		m_params.eqMuCma = (float)1E-3*textEditor.getText().getFloatValue();
	}

	if (textEditor.getName() == m_entryDfeMu->getName())
	{
		m_params.eqMuDfe = (float)1E-3*textEditor.getText().getFloatValue();
	}

	if (textEditor.getName() == m_entryAgcMu_0->getName())
	{
		m_params.agcMu[0] = (float)1E-3*textEditor.getText().getFloatValue();
	}

	if (textEditor.getName() == m_entryAgcMu_1->getName())
	{
		m_params.agcMu[1] = (float)1E-3*textEditor.getText().getFloatValue();
	}

	if (textEditor.getName() == m_entryCPRLoopFilterLead_0->getName())
	{
		m_params.cpr_loopfilter_coeff[0].lead = (float)1E-6*textEditor.getText().getFloatValue();
	}
	if (textEditor.getName() == m_entryCPRLoopFilterLead_1->getName())
	{
		m_params.cpr_loopfilter_coeff[1].lead = (float)1E-6*textEditor.getText().getFloatValue();
	}

	if (textEditor.getName() == m_entryCPRLoopFilterLag_0->getName())
	{
		m_params.cpr_loopfilter_coeff[0].lag = (float)1E-6*textEditor.getText().getFloatValue();
	}
	if (textEditor.getName() == m_entryCPRLoopFilterLag_1->getName())
	{
		m_params.cpr_loopfilter_coeff[1].lag = (float)1E-6*textEditor.getText().getFloatValue();
	}

	if (textEditor.getName() == m_entrySTRLoopFilterLead_0->getName())
	{
		m_params.str_loopfilter_coeff[0].lead = (float)1E-6*textEditor.getText().getFloatValue();
	}
	if (textEditor.getName() == m_entrySTRLoopFilterLead_1->getName())
	{
		m_params.str_loopfilter_coeff[1].lead = (float)1E-6*textEditor.getText().getFloatValue();
	}

	if (textEditor.getName() == m_entrySTRLoopFilterLag_0->getName())
	{
		m_params.str_loopfilter_coeff[0].lag = (float)1E-6*textEditor.getText().getFloatValue();
	}
	if (textEditor.getName() == m_entrySTRLoopFilterLag_1->getName())
	{
		m_params.str_loopfilter_coeff[1].lag = (float)1E-6*textEditor.getText().getFloatValue();
	}

	if (textEditor.getName() == m_entryNumBitsPerSymbol->getName())
	{
		m_params.numBitsPerSymbol = textEditor.getText().getIntValue();
		m_pTransmitterControlListener->setNumBitPerSymbol(m_params.numBitsPerSymbol);
	}

	if (textEditor.getName() == m_entrySymbolRate->getName())
	{
		m_params.symbolrate = textEditor.getText().getFloatValue();
		m_pTransmitterControlListener->setSymbolRate(m_params.symbolrate);
	}

	if (textEditor.getName() == m_entryDdcFrequency->getName())
	{
		m_params.ddc_freq = textEditor.getText().getFloatValue();
		m_pTransmitterControlListener->setCarrierFrequency(m_params.ddc_freq);
	}

	m_pReceiverControlListener->setParams(m_params);
	m_userParamEntryinProgress = false;
}

void ControlComponent::receiverStatusChanged(ReceiverInterface *pReceiver)
{
	m_params = pReceiver->getParams();
	m_status = pReceiver->getStatus();

	sendChangeMessage();
}

void ControlComponent::changeListenerCallback(juce::ChangeBroadcaster* source)
{
	(void)source;

	comboBoxCmaMode->setSelectedItemIndex((int)m_params.cmaType, juce::NotificationType::dontSendNotification);

	toggleButtonDfeAutoUpdateEnable->setToggleState(m_params.dfeAutoUpdateEnable == true, juce::NotificationType::dontSendNotification);
	toggleButtonAgcMuForceTrack->setToggleState(m_params.agcMu_index == 1, juce::NotificationType::dontSendNotification);
	toggleButtonSTRLoopFilterForceTrack->setToggleState(m_params.str_loopfilter_coeff_index == 1, juce::NotificationType::dontSendNotification);
	toggleButtonCPRLoopFilterForceTrack->setToggleState(m_params.cpr_loopfilter_coeff_index == 1, juce::NotificationType::dontSendNotification);
	toggleButtonAgcEnable->setToggleState(m_params.agc_mode != agc_mode_disabled, juce::NotificationType::dontSendNotification);
	toggleButtonCPREnable->setToggleState(m_params.cpr_mode != cpr_mode_disabled, juce::NotificationType::dontSendNotification);
	toggleButtonSTREnable->setToggleState(m_params.str_mode != str_mode_disabled, juce::NotificationType::dontSendNotification);
	toggleButtonCMAEnable->setToggleState(m_params.eq_mode == eq_mode_cma, juce::NotificationType::dontSendNotification);
	toggleButtonDFEEnable->setToggleState(m_params.eq_mode == eq_mode_dfe, juce::NotificationType::dontSendNotification);
	toggleButtonCmaTrainingEnable->setToggleState(m_params.cmaMode != cma_mode_training_disabled, juce::NotificationType::dontSendNotification);
	toggleButtonDfeTrainingEnable->setToggleState(m_params.dfeMode == dfe_mode_training_enabled, juce::NotificationType::dontSendNotification);

	m_labelSymbolReceivedCount->setText(String(m_status.numSymbolsReceived), juce::NotificationType::dontSendNotification);
	m_labelFrameTotalCount->setText(String(m_status.frameStatRx.numTotalFrame), juce::NotificationType::dontSendNotification);
	m_labelFrameInvalidCount->setText(String(m_status.frameStatRx.numInvalidFrame), juce::NotificationType::dontSendNotification);
	m_labelFrameDataCount->setText(String(m_status.frameStatRx.numDataFrame), juce::NotificationType::dontSendNotification);
	m_labelFrameIdleCount->setText(String(m_status.frameStatRx.numIdleFrame), juce::NotificationType::dontSendNotification);
	m_labelFrameByteCount->setText(String(m_status.frameStatRx.numDataBytes), juce::NotificationType::dontSendNotification);

	m_labelNoiseStr->setText(String(m_status.noiseStr, 2), juce::NotificationType::dontSendNotification);
	m_labelNoiseCpr->setText(String(m_status.noiseCpr, 2), juce::NotificationType::dontSendNotification);

	if (!m_userParamEntryinProgress)
	{
		m_entryNumBitsPerSymbol->setText(String(m_params.numBitsPerSymbol), juce::NotificationType::dontSendNotification);
		m_entrySymbolRate->setText(String(m_params.symbolrate, 3), juce::NotificationType::dontSendNotification);
		m_entryDdcFrequency->setText(String(m_params.ddc_freq, 3), juce::NotificationType::dontSendNotification);
		m_entryCmaMu->setText(String((float)1E3*m_params.eqMuCma, 3), juce::NotificationType::dontSendNotification);
		m_entryDfeMu->setText(String((float)1E3*m_params.eqMuDfe, 3), juce::NotificationType::dontSendNotification);
		m_entryAgcMu_0->setText(String((float)1E3*m_params.agcMu[0], 3), juce::NotificationType::dontSendNotification);
		m_entryAgcMu_1->setText(String((float)1E3*m_params.agcMu[1], 3), juce::NotificationType::dontSendNotification);
		m_entryCPRLoopFilterLead_0->setText(String((float)1E6*m_params.cpr_loopfilter_coeff[0].lead, 3), juce::NotificationType::dontSendNotification);
		m_entryCPRLoopFilterLead_1->setText(String((float)1E6*m_params.cpr_loopfilter_coeff[1].lead, 3), juce::NotificationType::dontSendNotification);
		m_entryCPRLoopFilterLag_0->setText(String((float)1E6*m_params.cpr_loopfilter_coeff[0].lag, 3), juce::NotificationType::dontSendNotification);
		m_entryCPRLoopFilterLag_1->setText(String((float)1E6*m_params.cpr_loopfilter_coeff[1].lag, 3), juce::NotificationType::dontSendNotification);
		m_entrySTRLoopFilterLead_0->setText(String((float)1E6*m_params.str_loopfilter_coeff[0].lead, 3), juce::NotificationType::dontSendNotification);
		m_entrySTRLoopFilterLead_1->setText(String((float)1E6*m_params.str_loopfilter_coeff[1].lead, 3), juce::NotificationType::dontSendNotification);
		m_entrySTRLoopFilterLag_0->setText(String((float)1E6*m_params.str_loopfilter_coeff[0].lag, 3), juce::NotificationType::dontSendNotification);
		m_entrySTRLoopFilterLag_1->setText(String((float)1E6*m_params.str_loopfilter_coeff[1].lag, 3), juce::NotificationType::dontSendNotification);
	}
	m_labelDdcDeltaFreq->setText(String(m_status.deltaFrequencyCPR, 3), juce::NotificationType::dontSendNotification);
	m_labelStrDeltaFreq->setText(String(m_status.deltaFrequencySTR, 3), juce::NotificationType::dontSendNotification);

	m_labelPowerRF->setText(String(m_status.powerRF_dB, 2), juce::NotificationType::dontSendNotification);
	m_labelDdcMinI->setText(String(m_status.ddcMinMax.min.real, 2), juce::NotificationType::dontSendNotification);
	m_labelDdcMaxI->setText(String(m_status.ddcMinMax.max.real, 2), juce::NotificationType::dontSendNotification);
	m_labelDdcMinQ->setText(String(m_status.ddcMinMax.min.imag, 2), juce::NotificationType::dontSendNotification);
	m_labelDdcMaxQ->setText(String(m_status.ddcMinMax.max.imag, 2), juce::NotificationType::dontSendNotification);
	m_labelDdcMinMag->setText(String(m_status.ddcMinMax.magMin, 2), juce::NotificationType::dontSendNotification);
	m_labelDdcMaxMag->setText(String(m_status.ddcMinMax.magMax, 2), juce::NotificationType::dontSendNotification);
	m_labelDdcPhiMinI->setText(String(m_status.ddcMinMax.phiAtMinI, 2), juce::NotificationType::dontSendNotification);
	m_labelDdcPhiMaxI->setText(String(m_status.ddcMinMax.phiAtMaxI, 2), juce::NotificationType::dontSendNotification);
	m_labelDdcPhiMinQ->setText(String(m_status.ddcMinMax.phiAtMinQ, 2), juce::NotificationType::dontSendNotification);
	m_labelDdcPhiMaxQ->setText(String(m_status.ddcMinMax.phiAtMaxQ, 2), juce::NotificationType::dontSendNotification);

	m_labelPowerDDC->setText(String(m_status.powerDDC_dB, 2), juce::NotificationType::dontSendNotification);
	m_labelPowerMF->setText(String(m_status.powerMF_dB, 2), juce::NotificationType::dontSendNotification);
	m_labelPowerCPR->setText(String(m_status.powerCPR_dB, 2), juce::NotificationType::dontSendNotification);
	m_labelPowerAGC2->setText(String(m_status.powerAGC_dB, 2), juce::NotificationType::dontSendNotification);
	m_labelPowerEQ->setText(String(m_status.powerEQ_dB, 2), juce::NotificationType::dontSendNotification);
	m_labelPowerDecision->setText(String(m_status.powerDecison_dB, 2), juce::NotificationType::dontSendNotification);
	m_labelPowerDecisionMag->setText(String(m_status.powerMagDecision_dB, 2), juce::NotificationType::dontSendNotification);
	m_labelPowerDecisionPhase->setText(String(m_status.powerPhiDecision_dB, 2), juce::NotificationType::dontSendNotification);

	m_labelSnrCurrent->setText(String(m_status.snrCurrent_dB, 2), juce::NotificationType::dontSendNotification);
	m_labelSnrCma->setText(String(m_status.snrCma_dB, 2), juce::NotificationType::dontSendNotification);
	m_labelSnrDfeOn->setText(String(m_status.snrDfeOn_dB, 2), juce::NotificationType::dontSendNotification);
	m_labelSnrDfeOff->setText(String(m_status.snrDfeOff_dB, 2), juce::NotificationType::dontSendNotification);
	m_labelSnrSymbolMag->setText(String(m_status.snrSymbolMagnitude_dB, 2), juce::NotificationType::dontSendNotification);
	m_labelSnrSymbolPhase->setText(String(m_status.snrSymbolPhase_dB, 2), juce::NotificationType::dontSendNotification);
	m_labelEbN0->setText(String(m_status.EB_N0, 2), juce::NotificationType::dontSendNotification);

	if (m_params.strState == str_state_acquisition)
	{
		m_labelStrState->setText("Acquisition", juce::NotificationType::dontSendNotification);
		m_labelStrState->setColour (Label::backgroundColourId, juce::Colours::lightsalmon);
	}
	if (m_params.strState == str_state_track)
	{
		m_labelStrState->setText("Track", juce::NotificationType::dontSendNotification);
		m_labelStrState->setColour (Label::backgroundColourId, juce::Colours::lightgreen);
	}
	if (m_params.cprState == cpr_state_acquisition)
	{
		m_labelCprState->setText("Acquisition", juce::NotificationType::dontSendNotification);
		m_labelCprState->setColour (Label::backgroundColourId, juce::Colours::lightsalmon);
	}
	if (m_params.cprState == cpr_state_track)
	{
		m_labelCprState->setText("Track", juce::NotificationType::dontSendNotification);
		m_labelCprState->setColour (Label::backgroundColourId, juce::Colours::lightgreen);
	}
	if (m_params.agc_state == agc_state_acquisition)
	{
		m_labelAgcState->setText("Acquisition", juce::NotificationType::dontSendNotification);
		m_labelAgcState->setColour (Label::backgroundColourId, juce::Colours::lightsalmon);
	}
	if (m_params.agc_state == agc_state_track)
	{
		m_labelAgcState->setText("Track", juce::NotificationType::dontSendNotification);
		m_labelAgcState->setColour (Label::backgroundColourId, juce::Colours::lightgreen);
	}
}

//[/MiscUserCode]


//==============================================================================
#if 0
/*  -- Introjucer information section --

    This is where the Introjucer stores the metadata that describe this GUI layout, so
    make changes in here at your peril!

BEGIN_JUCER_METADATA

<JUCER_COMPONENT documentType="Component" className="ControlComponent" componentName=""
                 parentClasses="public Component, public TextEditor::Listener, public ChangeBroadcaster, public ChangeListener, public ButtonListener, public ReceiverStatusListener"
                 constructorParams="ReceiverInterface *pReceiverControlListener, TransmitterInterface *pTransmitterControlListener"
                 variableInitialisers="m_pReceiverControlListener(pReceiverControlListener),  m_pTransmitterControlListener(pTransmitterControlListener)"
                 snapPixels="8" snapActive="1" snapShown="1" overlayOpacity="0.330"
                 fixedSize="1" initialWidth="800" initialHeight="1000">
  <METHODS>
    <METHOD name="mouseDown (const MouseEvent&amp; e)"/>
  </METHODS>
  <BACKGROUND backgroundColour="ffffffff">
    <TEXT pos="31 78 209 24" fill="solid: ff000000" hasStroke="0" text="Loop Filter Acquisition [*1E-6]"
          fontname="Default font" fontsize="15" bold="0" italic="0" justification="33"/>
    <TEXT pos="348 472 156 24" fill="solid: ff000000" hasStroke="0" text="Current [dB]"
          fontname="Default font" fontsize="15" bold="0" italic="0" justification="33"/>
    <TEXT pos="348 496 156 24" fill="solid: ff000000" hasStroke="0" text="CMA [dB]"
          fontname="Default font" fontsize="15" bold="0" italic="0" justification="33"/>
    <TEXT pos="348 520 156 24" fill="solid: ff000000" hasStroke="0" text="DFE-on [dB]"
          fontname="Default font" fontsize="15" bold="0" italic="0" justification="33"/>
    <TEXT pos="348 544 156 24" fill="solid: ff000000" hasStroke="0" text="DFE-off [dB]"
          fontname="Default font" fontsize="15" bold="0" italic="0" justification="33"/>
    <TEXT pos="348 568 156 24" fill="solid: ff000000" hasStroke="0" text="Symbol Magnitude [dB]"
          fontname="Default font" fontsize="15" bold="0" italic="0" justification="33"/>
    <TEXT pos="348 592 156 24" fill="solid: ff000000" hasStroke="0" text="Symbol Phase [dB]"
          fontname="Default font" fontsize="15" bold="0" italic="0" justification="33"/>
    <TEXT pos="23 358 145 24" fill="solid: ff000000" hasStroke="0" text="Adaption Rate [*1E-3]"
          fontname="Default font" fontsize="15" bold="0" italic="0" justification="33"/>
    <TEXT pos="287 358 144 24" fill="solid: ff000000" hasStroke="0" text="Adaption Rate [*1E-3]"
          fontname="Default font" fontsize="15" bold="0" italic="0" justification="33"/>
    <TEXT pos="84 472 84 24" fill="solid: ff000000" hasStroke="0" text="RF [dB]"
          fontname="Default font" fontsize="15" bold="0" italic="0" justification="33"/>
    <TEXT pos="84 496 84 24" fill="solid: ff000000" hasStroke="0" text="DDC [dB]"
          fontname="Default font" fontsize="15" bold="0" italic="0" justification="33"/>
    <TEXT pos="84 520 84 24" fill="solid: ff000000" hasStroke="0" text="MF [dB]"
          fontname="Default font" fontsize="15" bold="0" italic="0" justification="33"/>
    <TEXT pos="84 544 84 24" fill="solid: ff000000" hasStroke="0" text="CPR [dB]"
          fontname="Default font" fontsize="15" bold="0" italic="0" justification="33"/>
    <TEXT pos="84 568 84 24" fill="solid: ff000000" hasStroke="0" text="AGC [dB]"
          fontname="Default font" fontsize="15" bold="0" italic="0" justification="33"/>
    <TEXT pos="84 592 84 24" fill="solid: ff000000" hasStroke="0" text="EQ [dB]"
          fontname="Default font" fontsize="15" bold="0" italic="0" justification="33"/>
    <TEXT pos="648 624 72 24" fill="solid: ff000000" hasStroke="0" text="STR [dB]"
          fontname="Default font" fontsize="15" bold="0" italic="0" justification="33"/>
    <TEXT pos="559 78 217 24" fill="solid: ff000000" hasStroke="0" text="Adaption Rate Acquisition [*1E-3]"
          fontname="Default font" fontsize="15" bold="0" italic="0" justification="33"/>
    <TEXT pos="356 736 140 24" fill="solid: ff000000" hasStroke="0" text="# Bits per Symbol"
          fontname="Default font" fontsize="15" bold="0" italic="0" justification="33"/>
    <TEXT pos="356 760 140 24" fill="solid: ff000000" hasStroke="0" text="Symbolrate"
          fontname="Default font" fontsize="15" bold="0" italic="0" justification="33"/>
    <TEXT pos="356 782 140 24" fill="solid: ff000000" hasStroke="0" text="DDC Frequency"
          fontname="Default font" fontsize="15" bold="0" italic="0" justification="33"/>
    <TEXT pos="119 206 124 26" fill="solid: ff000000" hasStroke="0" text="dF [Hz]"
          fontname="Default font" fontsize="15" bold="0" italic="0" justification="33"/>
    <TEXT pos="383 206 124 26" fill="solid: ff000000" hasStroke="0" text="dF [sym/s]"
          fontname="Default font" fontsize="15" bold="0" italic="0" justification="33"/>
    <TEXT pos="348 820 36 20" fill="solid: ff000000" hasStroke="0" text="min"
          fontname="Default font" fontsize="15" bold="0" italic="0" justification="36"/>
    <TEXT pos="428 820 36 20" fill="solid: ff000000" hasStroke="0" text="max"
          fontname="Default font" fontsize="15" bold="0" italic="0" justification="36"/>
    <TEXT pos="300 844 44 20" fill="solid: ff000000" hasStroke="0" text="I"
          fontname="Default font" fontsize="15" bold="0" italic="0" justification="36"/>
    <TEXT pos="300 868 44 20" fill="solid: ff000000" hasStroke="0" text="Q"
          fontname="Default font" fontsize="15" bold="0" italic="0" justification="36"/>
    <TEXT pos="300 892 44 20" fill="solid: ff000000" hasStroke="0" text="Mag"
          fontname="Default font" fontsize="15" bold="0" italic="0" justification="36"/>
    <TEXT pos="300 916 44 20" fill="solid: ff000000" hasStroke="0" text="Phi I"
          fontname="Default font" fontsize="15" bold="0" italic="0" justification="36"/>
    <TEXT pos="300 940 44 20" fill="solid: ff000000" hasStroke="0" text="Phi Q"
          fontname="Default font" fontsize="15" bold="0" italic="0" justification="36"/>
    <TEXT pos="104 104 36 24" fill="solid: ff000000" hasStroke="0" text="Lead"
          fontname="Default font" fontsize="15" bold="0" italic="0" justification="33"/>
    <TEXT pos="224 104 32 24" fill="solid: ff000000" hasStroke="0" text="Lag"
          fontname="Default font" fontsize="15" bold="0" italic="0" justification="33"/>
    <TEXT pos="31 142 209 24" fill="solid: ff000000" hasStroke="0" text="Loop Filter Tracking [*1E-6]"
          fontname="Default font" fontsize="15" bold="0" italic="0" justification="33"/>
    <TEXT pos="104 168 36 24" fill="solid: ff000000" hasStroke="0" text="Lead"
          fontname="Default font" fontsize="15" bold="0" italic="0" justification="33"/>
    <TEXT pos="224 168 32 24" fill="solid: ff000000" hasStroke="0" text="Lag"
          fontname="Default font" fontsize="15" bold="0" italic="0" justification="33"/>
    <TEXT pos="295 78 209 24" fill="solid: ff000000" hasStroke="0" text="Loop Filter Acquisition [*1E-6]"
          fontname="Default font" fontsize="15" bold="0" italic="0" justification="33"/>
    <TEXT pos="368 104 36 24" fill="solid: ff000000" hasStroke="0" text="Lead"
          fontname="Default font" fontsize="15" bold="0" italic="0" justification="33"/>
    <TEXT pos="488 104 32 24" fill="solid: ff000000" hasStroke="0" text="Lag"
          fontname="Default font" fontsize="15" bold="0" italic="0" justification="33"/>
    <TEXT pos="295 142 209 24" fill="solid: ff000000" hasStroke="0" text="Loop Filter Tracking [*1E-6]"
          fontname="Default font" fontsize="15" bold="0" italic="0" justification="33"/>
    <TEXT pos="368 168 36 24" fill="solid: ff000000" hasStroke="0" text="Lead"
          fontname="Default font" fontsize="15" bold="0" italic="0" justification="33"/>
    <TEXT pos="488 168 32 24" fill="solid: ff000000" hasStroke="0" text="Lag"
          fontname="Default font" fontsize="15" bold="0" italic="0" justification="33"/>
    <TEXT pos="559 142 217 24" fill="solid: ff000000" hasStroke="0" text="Adaption Rate Tracking [*1E-3]"
          fontname="Default font" fontsize="15" bold="0" italic="0" justification="33"/>
    <TEXT pos="348 616 156 24" fill="solid: ff000000" hasStroke="0" text="EB/N0 [dB]"
          fontname="Default font" fontsize="15" bold="0" italic="0" justification="33"/>
    <TEXT pos="640 288 120 24" fill="solid: ff000000" hasStroke="0" text="# Symbols"
          fontname="Default font" fontsize="15" bold="0" italic="0" justification="33"/>
    <TEXT pos="640 312 120 24" fill="solid: ff000000" hasStroke="0" text="# Frames"
          fontname="Default font" fontsize="15" bold="0" italic="0" justification="33"/>
    <TEXT pos="640 360 120 24" fill="solid: ff000000" hasStroke="0" text="# Data Frames"
          fontname="Default font" fontsize="15" bold="0" italic="0" justification="33"/>
    <TEXT pos="640 384 120 24" fill="solid: ff000000" hasStroke="0" text="# Idle Frames"
          fontname="Default font" fontsize="15" bold="0" italic="0" justification="33"/>
    <TEXT pos="640 408 120 24" fill="solid: ff000000" hasStroke="0" text="# Bytes"
          fontname="Default font" fontsize="15" bold="0" italic="0" justification="33"/>
    <TEXT pos="640 336 120 24" fill="solid: ff000000" hasStroke="0" text="# Invalid Frames"
          fontname="Default font" fontsize="15" bold="0" italic="0" justification="33"/>
    <TEXT pos="84 616 84 24" fill="solid: ff000000" hasStroke="0" text="Decision [dB]"
          fontname="Default font" fontsize="15" bold="0" italic="0" justification="33"/>
    <TEXT pos="84 640 164 24" fill="solid: ff000000" hasStroke="0" text="Decision Magnitude [dB]"
          fontname="Default font" fontsize="15" bold="0" italic="0" justification="33"/>
    <TEXT pos="84 664 164 24" fill="solid: ff000000" hasStroke="0" text="Decision Phase [dB]"
          fontname="Default font" fontsize="15" bold="0" italic="0" justification="33"/>
    <TEXT pos="647 646 72 24" fill="solid: ff000000" hasStroke="0" text="CPR [dB]"
          fontname="Default font" fontsize="15" bold="0" italic="0" justification="33"/>
  </BACKGROUND>
  <GROUPCOMPONENT name="new group" id="e341830ba20141ff" memberName="groupComponent3"
                  virtualName="" explicitFocusOrder="0" pos="536 272 256 168" title="Statistics"/>
  <GROUPCOMPONENT name="Symbol Timing Recovery group" id="2ec48a1ece4b7941" memberName="m_GroupSymbolTimingRecovery2"
                  virtualName="" explicitFocusOrder="0" pos="536 8 256 256" title="AGC"/>
  <GROUPCOMPONENT name="new group" id="bfa951679b46051b" memberName="groupComponent"
                  virtualName="" explicitFocusOrder="0" pos="16 448 248 248" title="Powers"/>
  <GROUPCOMPONENT name="DFE group" id="90cfbec7da7afbe0" memberName="groupDFE"
                  virtualName="" explicitFocusOrder="0" pos="272 272 256 168" title="Decision Feedback Equalizer"/>
  <GROUPCOMPONENT name="CMA group" id="4161d268fce551c4" memberName="groupCMA"
                  virtualName="" explicitFocusOrder="0" pos="8 272 256 168" title="Blind CMA Equalizer"/>
  <GROUPCOMPONENT name="Carrier Phase Recovery group" id="36ff007adcc2d54c" memberName="groupCarrierPhaseRecovery"
                  virtualName="" explicitFocusOrder="0" pos="8 8 256 256" title="Carrier Phase Recovery"/>
  <GROUPCOMPONENT name="Symbol Timing Recovery group" id="70b1db0cefa1062f" memberName="m_GroupSymbolTimingRecovery"
                  virtualName="" explicitFocusOrder="0" pos="272 8 256 256" title="Symbol Timing Recovery"/>
  <TOGGLEBUTTON name="CPR Button" id="b55a837b81cc6249" memberName="toggleButtonCPREnable"
                virtualName="" explicitFocusOrder="0" pos="192 24 48 24" tooltip="CPR Enable"
                buttonText="On" connectedEdges="0" needsCallback="1" radioGroupId="0"
                state="0"/>
  <TOGGLEBUTTON name="DFE Button" id="202522ec085d8faa" memberName="toggleButtonDFEEnable"
                virtualName="" explicitFocusOrder="0" pos="280 296 64 24" buttonText="On"
                connectedEdges="0" needsCallback="1" radioGroupId="0" state="0"/>
  <TOGGLEBUTTON name="STR Button" id="eaf43cde2df20d26" memberName="toggleButtonSTREnable"
                virtualName="" explicitFocusOrder="0" pos="456 24 48 24" tooltip="STR Enable"
                buttonText="On" connectedEdges="0" needsCallback="1" radioGroupId="0"
                state="0"/>
  <TEXTEDITOR name="STRLoopFilterLead 0" id="ce76fb8e6f4ceb7a" memberName="m_entrySTRLoopFilterLead_0"
              virtualName="" explicitFocusOrder="0" pos="288 104 72 24" tooltip="STRLoopFilterLead 0"
              initialText="1000.000" multiline="0" retKeyStartsLine="0" readonly="0"
              scrollbars="0" caret="1" popupmenu="1"/>
  <TEXTEDITOR name="STRLoopFilterLag 0" id="203d9bede9fe5e8f" memberName="m_entrySTRLoopFilterLag_0"
              virtualName="" explicitFocusOrder="0" pos="408 104 72 24" tooltip="STRLoopFilterLag 0"
              initialText="1000.000" multiline="0" retKeyStartsLine="0" readonly="0"
              scrollbars="0" caret="1" popupmenu="1"/>
  <TEXTEDITOR name="CPRLoopFilterLead 0" id="1fbc588ede4f172e" memberName="m_entryCPRLoopFilterLead_0"
              virtualName="" explicitFocusOrder="0" pos="24 104 72 24" tooltip="CPRLoopFilterLead 0"
              initialText="1000.000" multiline="0" retKeyStartsLine="0" readonly="0"
              scrollbars="0" caret="1" popupmenu="1"/>
  <TEXTEDITOR name="CPRLoopFilterLag 0" id="546e55f664ce3f34" memberName="m_entryCPRLoopFilterLag_0"
              virtualName="" explicitFocusOrder="0" pos="144 104 72 24" tooltip="CPRLoopFilterLag 0"
              initialText="1000.000" multiline="0" retKeyStartsLine="0" readonly="0"
              scrollbars="0" caret="1" popupmenu="1"/>
  <TEXTBUTTON name="DFE-off =&gt; DFE-on Update button" id="a63b2127df24d866"
              memberName="m_buttonDfeOnUpdateFromDfeOff" virtualName="" explicitFocusOrder="0"
              pos="448 296 64 24" tooltip="DFE-off =&gt; DFE-on Update" buttonText="Update"
              connectedEdges="0" needsCallback="1" radioGroupId="0"/>
  <TEXTBUTTON name="DFE Reset button" id="8a04302604dfce14" memberName="m_buttonResetDFE"
              virtualName="" explicitFocusOrder="0" pos="456 408 64 24" buttonText="Reset"
              connectedEdges="0" needsCallback="1" radioGroupId="0"/>
  <TEXTBUTTON name="CMA Reset button" id="ffbc53ffbe3ed302" memberName="m_buttonResetCMA"
              virtualName="" explicitFocusOrder="0" pos="192 408 64 24" buttonText="Reset"
              connectedEdges="0" needsCallback="1" radioGroupId="0"/>
  <GROUPCOMPONENT name="new group" id="4d597af6ad272b9d" memberName="groupComponent2"
                  virtualName="" explicitFocusOrder="0" pos="272 448 256 232" title="SNR"/>
  <TEXTEDITOR name="CMA Adaption Rate" id="102dfd74a599cd75" memberName="m_entryCmaMu"
              virtualName="" explicitFocusOrder="0" pos="24 384 88 24" initialText=""
              multiline="0" retKeyStartsLine="0" readonly="0" scrollbars="1"
              caret="1" popupmenu="1"/>
  <TEXTEDITOR name="DFE Adaption Rate" id="f37da3cf6bfa204a" memberName="m_entryDfeMu"
              virtualName="" explicitFocusOrder="0" pos="288 384 88 24" initialText=""
              multiline="0" retKeyStartsLine="0" readonly="0" scrollbars="1"
              caret="1" popupmenu="1"/>
  <LABEL name="RF-Power" id="7508da0d4c602971" memberName="m_labelPowerRF"
         virtualName="" explicitFocusOrder="0" pos="24 472 58 24" tooltip="RF-Power"
         edTextCol="ff000000" edBkgCol="0" labelText="-120" editableSingleClick="0"
         editableDoubleClick="0" focusDiscardsChanges="0" fontname="Default font"
         fontsize="15" bold="0" italic="0" justification="34"/>
  <LABEL name="DDC-Power" id="4dfc840f2fcc23dd" memberName="m_labelPowerDDC"
         virtualName="" explicitFocusOrder="0" pos="24 496 58 24" tooltip="DDC-Power"
         edTextCol="ff000000" edBkgCol="0" labelText="-120" editableSingleClick="0"
         editableDoubleClick="0" focusDiscardsChanges="0" fontname="Default font"
         fontsize="15" bold="0" italic="0" justification="34"/>
  <LABEL name="MF-Power" id="d8b493b6dd08d5fa" memberName="m_labelPowerMF"
         virtualName="" explicitFocusOrder="0" pos="24 520 58 24" tooltip="MF-Power"
         edTextCol="ff000000" edBkgCol="0" labelText="-120" editableSingleClick="0"
         editableDoubleClick="0" focusDiscardsChanges="0" fontname="Default font"
         fontsize="15" bold="0" italic="0" justification="34"/>
  <LABEL name="CPR-Power" id="7f9e87cea20da501" memberName="m_labelPowerCPR"
         virtualName="" explicitFocusOrder="0" pos="24 544 58 24" tooltip="CPR-Power"
         edTextCol="ff000000" edBkgCol="0" labelText="-120" editableSingleClick="0"
         editableDoubleClick="0" focusDiscardsChanges="0" fontname="Default font"
         fontsize="15" bold="0" italic="0" justification="34"/>
  <LABEL name="AGC-2-Power" id="326c8aff67b59e23" memberName="m_labelPowerAGC2"
         virtualName="" explicitFocusOrder="0" pos="24 568 58 24" tooltip="AGC-2-Power"
         edTextCol="ff000000" edBkgCol="0" labelText="-120" editableSingleClick="0"
         editableDoubleClick="0" focusDiscardsChanges="0" fontname="Default font"
         fontsize="15" bold="0" italic="0" justification="34"/>
  <LABEL name="EQ-Power" id="be73699a453f3302" memberName="m_labelPowerEQ"
         virtualName="" explicitFocusOrder="0" pos="24 592 58 24" tooltip="EQ-Power"
         edTextCol="ff000000" edBkgCol="0" labelText="-120" editableSingleClick="0"
         editableDoubleClick="0" focusDiscardsChanges="0" fontname="Default font"
         fontsize="15" bold="0" italic="0" justification="34"/>
  <LABEL name="SNR Current" id="e4cb9f9502a6c962" memberName="m_labelSnrCurrent"
         virtualName="" explicitFocusOrder="0" pos="280 472 58 24" tooltip="SNR Current"
         edTextCol="ff000000" edBkgCol="0" labelText="-120" editableSingleClick="0"
         editableDoubleClick="0" focusDiscardsChanges="0" fontname="Default font"
         fontsize="15" bold="0" italic="0" justification="34"/>
  <LABEL name="SNR CMA" id="5b66c2d4baee1220" memberName="m_labelSnrCma"
         virtualName="" explicitFocusOrder="0" pos="280 496 58 24" tooltip="SNR CMA"
         edTextCol="ff000000" edBkgCol="0" labelText="-120" editableSingleClick="0"
         editableDoubleClick="0" focusDiscardsChanges="0" fontname="Default font"
         fontsize="15" bold="0" italic="0" justification="34"/>
  <LABEL name="SNR-DEF-On" id="b19acdaa7a0d5b62" memberName="m_labelSnrDfeOn"
         virtualName="" explicitFocusOrder="0" pos="280 520 58 24" tooltip="SNR-DEF-On"
         edTextCol="ff000000" edBkgCol="0" labelText="-120" editableSingleClick="0"
         editableDoubleClick="0" focusDiscardsChanges="0" fontname="Default font"
         fontsize="15" bold="0" italic="0" justification="34"/>
  <LABEL name="SNR-DEF-Off" id="58b90d9e946b520f" memberName="m_labelSnrDfeOff"
         virtualName="" explicitFocusOrder="0" pos="280 544 58 24" tooltip="SNR-DEF-Off"
         edTextCol="ff000000" edBkgCol="0" labelText="-120" editableSingleClick="0"
         editableDoubleClick="0" focusDiscardsChanges="0" fontname="Default font"
         fontsize="15" bold="0" italic="0" justification="34"/>
  <LABEL name="SNR Symbol Magnitude" id="5e5eba71128ae681" memberName="m_labelSnrSymbolMag"
         virtualName="" explicitFocusOrder="0" pos="280 568 58 24" tooltip="SNR Symbol Magnitude"
         edTextCol="ff000000" edBkgCol="0" labelText="-120" editableSingleClick="0"
         editableDoubleClick="0" focusDiscardsChanges="0" fontname="Default font"
         fontsize="15" bold="0" italic="0" justification="34"/>
  <LABEL name="SNR Symbol Phase" id="8489795f5a664879" memberName="m_labelSnrSymbolPhase"
         virtualName="" explicitFocusOrder="0" pos="280 592 58 24" tooltip="SNR Symbol Phase"
         edTextCol="ff000000" edBkgCol="0" labelText="-120" editableSingleClick="0"
         editableDoubleClick="0" focusDiscardsChanges="0" fontname="Default font"
         fontsize="15" bold="0" italic="0" justification="34"/>
  <LABEL name="SNR STR" id="a35a50a5ebe92e53" memberName="m_labelNoiseStr"
         virtualName="" explicitFocusOrder="0" pos="576 624 58 24" tooltip="SNR STR"
         edTextCol="ff000000" edBkgCol="0" labelText="-120" editableSingleClick="0"
         editableDoubleClick="0" focusDiscardsChanges="0" fontname="Default font"
         fontsize="15" bold="0" italic="0" justification="34"/>
  <LABEL name="Number of Symbols Received" id="c683e05608311d53" memberName="m_labelSymbolReceivedCount"
         virtualName="" explicitFocusOrder="0" pos="544 288 90 24" tooltip="Number of Symbols Received"
         edTextCol="ff000000" edBkgCol="0" labelText="0" editableSingleClick="0"
         editableDoubleClick="0" focusDiscardsChanges="0" fontname="Default font"
         fontsize="15" bold="0" italic="0" justification="34"/>
  <TEXTBUTTON name="Receiver Reset" id="3a07c8fdcac1cdb4" memberName="m_buttonResetReset"
              virtualName="" explicitFocusOrder="0" pos="512 792 64 24" tooltip="Receiver Reset"
              buttonText="Reset" connectedEdges="0" needsCallback="1" radioGroupId="0"/>
  <TEXTEDITOR name="AGC Adaption Rate 0" id="65b28b9a22c1857c" memberName="m_entryAgcMu_0"
              virtualName="" explicitFocusOrder="0" pos="560 104 64 24" tooltip="AGC Adaption Rate 0"
              initialText="0.000001" multiline="0" retKeyStartsLine="0" readonly="0"
              scrollbars="0" caret="1" popupmenu="1"/>
  <TOGGLEBUTTON name="CMA Enable Training" id="478772c356a26dc" memberName="toggleButtonCmaTrainingEnable"
                virtualName="" explicitFocusOrder="0" pos="24 320 64 24" tooltip="CMA Enable Training"
                buttonText="Learn" connectedEdges="0" needsCallback="1" radioGroupId="0"
                state="0"/>
  <TOGGLEBUTTON name="DFE Enable Training" id="957b1ee61dd6bdbe" memberName="toggleButtonDfeTrainingEnable"
                virtualName="" explicitFocusOrder="0" pos="280 320 64 24" tooltip="DFE Enable Training"
                buttonText="Learn" connectedEdges="0" needsCallback="1" radioGroupId="0"
                state="0"/>
  <TEXTBUTTON name="CMA =&gt; DFE-off Update button" id="646b69680955e25c"
              memberName="m_buttonDfeOffUpdateFromCma" virtualName="" explicitFocusOrder="0"
              pos="184 296 64 24" tooltip="CMA =&gt; DFE-off Update" buttonText="=&gt; DFE"
              connectedEdges="0" needsCallback="1" radioGroupId="0"/>
  <TEXTEDITOR name="NumBitsPerSymbol" id="80569f26a3fbf2a0" memberName="m_entryNumBitsPerSymbol"
              virtualName="" explicitFocusOrder="0" pos="320 736 32 24" tooltip="NumBitsPerSymbol"
              initialText="2" multiline="0" retKeyStartsLine="0" readonly="0"
              scrollbars="0" caret="1" popupmenu="1"/>
  <TEXTEDITOR name="Symbolrate" id="a4cc5d71384cd9d7" memberName="m_entrySymbolRate"
              virtualName="" explicitFocusOrder="0" pos="264 760 88 24" tooltip="Symbolrate"
              initialText="192000.000" multiline="0" retKeyStartsLine="0" readonly="0"
              scrollbars="0" caret="1" popupmenu="1"/>
  <TEXTEDITOR name="DDC Frequency" id="ee29c942e6880b59" memberName="m_entryDdcFrequency"
              virtualName="" explicitFocusOrder="0" pos="264 784 88 24" tooltip="DDC Frequency"
              initialText="192000.000" multiline="0" retKeyStartsLine="0" readonly="0"
              scrollbars="0" caret="1" popupmenu="1"/>
  <LABEL name="DDC Frequency Offset" id="64a59b588615d9" memberName="m_labelDdcDeltaFreq"
         virtualName="" explicitFocusOrder="0" pos="16 208 98 24" tooltip="DDC Frequency Offset"
         edTextCol="ff000000" edBkgCol="0" labelText="-999.000000" editableSingleClick="0"
         editableDoubleClick="0" focusDiscardsChanges="0" fontname="Default font"
         fontsize="15" bold="0" italic="0" justification="34"/>
  <LABEL name="STR Frequency Offset" id="7a0082e89666d3a6" memberName="m_labelStrDeltaFreq"
         virtualName="" explicitFocusOrder="0" pos="280 208 98 24" tooltip="STR Frequency Offset"
         edTextCol="ff000000" edBkgCol="0" labelText="-999.000000" editableSingleClick="0"
         editableDoubleClick="0" focusDiscardsChanges="0" fontname="Default font"
         fontsize="15" bold="0" italic="0" justification="34"/>
  <LABEL name="CPR state" id="cf1e5549373bef7d" memberName="m_labelCprState"
         virtualName="" explicitFocusOrder="0" pos="24 32 112 24" tooltip="CPR state"
         bkgCol="ffffffff" edTextCol="ff000000" edBkgCol="0" labelText="Tracking"
         editableSingleClick="0" editableDoubleClick="0" focusDiscardsChanges="0"
         fontname="Default font" fontsize="15" bold="1" italic="0" justification="36"/>
  <LABEL name="STR state" id="fcfca51e8781527d" memberName="m_labelStrState"
         virtualName="" explicitFocusOrder="0" pos="288 32 112 24" tooltip="STR state"
         bkgCol="ffffffff" edTextCol="ff000000" edBkgCol="0" labelText="Tracking"
         editableSingleClick="0" editableDoubleClick="0" focusDiscardsChanges="0"
         fontname="Default font" fontsize="15" bold="1" italic="0" justification="36"/>
  <TOGGLEBUTTON name="AGC Enable" id="16f17a5a34bb4ffe" memberName="toggleButtonAgcEnable"
                virtualName="" explicitFocusOrder="0" pos="720 24 48 24" tooltip="AGC Enable"
                buttonText="On" connectedEdges="0" needsCallback="1" radioGroupId="0"
                state="0"/>
  <LABEL name="AGC state" id="6414c54c251b07d" memberName="m_labelAgcState"
         virtualName="" explicitFocusOrder="0" pos="552 32 112 24" tooltip="AGC state"
         bkgCol="ffffffff" edTextCol="ff000000" edBkgCol="0" labelText="Tracking"
         editableSingleClick="0" editableDoubleClick="0" focusDiscardsChanges="0"
         fontname="Default font" fontsize="15" bold="1" italic="0" justification="36"/>
  <TOGGLEBUTTON name="AGC Force Track" id="4309a35e2c30900c" memberName="toggleButtonAgcMuForceTrack"
                virtualName="" explicitFocusOrder="0" pos="720 48 64 24" tooltip="AGC Force Tracking Mode"
                buttonText="Track" connectedEdges="0" needsCallback="1" radioGroupId="0"
                state="0"/>
  <LABEL name="Ddc-Minimum" id="6c82689e4e122071" memberName="m_labelDdcMinI"
         virtualName="" explicitFocusOrder="0" pos="320 840 58 24" tooltip="Ddc-Minimum"
         edTextCol="ff000000" edBkgCol="0" labelText="-1" editableSingleClick="0"
         editableDoubleClick="0" focusDiscardsChanges="0" fontname="Default font"
         fontsize="15" bold="0" italic="0" justification="34"/>
  <LABEL name="DDC-Maximum" id="22ffc21c173db082" memberName="m_labelDdcMaxI"
         virtualName="" explicitFocusOrder="0" pos="408 840 58 24" tooltip="DDC-Maximum"
         edTextCol="ff000000" edBkgCol="0" labelText="-120" editableSingleClick="0"
         editableDoubleClick="0" focusDiscardsChanges="0" fontname="Default font"
         fontsize="15" bold="0" italic="0" justification="34"/>
  <LABEL name="Ddc-Minimum" id="ac26a25e5d4bc147" memberName="m_labelDdcMinQ"
         virtualName="" explicitFocusOrder="0" pos="320 864 58 24" tooltip="Ddc-Minimum"
         edTextCol="ff000000" edBkgCol="0" labelText="-1" editableSingleClick="0"
         editableDoubleClick="0" focusDiscardsChanges="0" fontname="Default font"
         fontsize="15" bold="0" italic="0" justification="34"/>
  <LABEL name="DDC-Maximum" id="5def54378bce59ad" memberName="m_labelDdcMaxQ"
         virtualName="" explicitFocusOrder="0" pos="408 864 58 24" tooltip="DDC-Maximum"
         edTextCol="ff000000" edBkgCol="0" labelText="-120" editableSingleClick="0"
         editableDoubleClick="0" focusDiscardsChanges="0" fontname="Default font"
         fontsize="15" bold="0" italic="0" justification="34"/>
  <LABEL name="Ddc-Minimum" id="f8045cbc23b55689" memberName="m_labelDdcMinMag"
         virtualName="" explicitFocusOrder="0" pos="320 888 58 24" tooltip="Ddc-Minimum"
         edTextCol="ff000000" edBkgCol="0" labelText="-1" editableSingleClick="0"
         editableDoubleClick="0" focusDiscardsChanges="0" fontname="Default font"
         fontsize="15" bold="0" italic="0" justification="34"/>
  <LABEL name="DDC-Maximum" id="ea56e23ebf6526a5" memberName="m_labelDdcMaxMag"
         virtualName="" explicitFocusOrder="0" pos="408 888 58 24" tooltip="DDC-Maximum"
         edTextCol="ff000000" edBkgCol="0" labelText="-120" editableSingleClick="0"
         editableDoubleClick="0" focusDiscardsChanges="0" fontname="Default font"
         fontsize="15" bold="0" italic="0" justification="34"/>
  <LABEL name="Ddc-Minimum" id="20e988862c635775" memberName="m_labelDdcPhiMinI"
         virtualName="" explicitFocusOrder="0" pos="320 912 58 24" tooltip="Ddc-Minimum"
         edTextCol="ff000000" edBkgCol="0" labelText="-1" editableSingleClick="0"
         editableDoubleClick="0" focusDiscardsChanges="0" fontname="Default font"
         fontsize="15" bold="0" italic="0" justification="34"/>
  <LABEL name="DDC-Maximum" id="497df376450d3ca8" memberName="m_labelDdcPhiMaxI"
         virtualName="" explicitFocusOrder="0" pos="408 912 58 24" tooltip="DDC-Maximum"
         edTextCol="ff000000" edBkgCol="0" labelText="-120" editableSingleClick="0"
         editableDoubleClick="0" focusDiscardsChanges="0" fontname="Default font"
         fontsize="15" bold="0" italic="0" justification="34"/>
  <LABEL name="Ddc-Minimum" id="be9911efc0082fd8" memberName="m_labelDdcPhiMinQ"
         virtualName="" explicitFocusOrder="0" pos="320 936 58 24" tooltip="Ddc-Minimum"
         edTextCol="ff000000" edBkgCol="0" labelText="-1" editableSingleClick="0"
         editableDoubleClick="0" focusDiscardsChanges="0" fontname="Default font"
         fontsize="15" bold="0" italic="0" justification="34"/>
  <LABEL name="DDC-Maximum" id="ddba7e2b245e6211" memberName="m_labelDdcPhiMaxQ"
         virtualName="" explicitFocusOrder="0" pos="408 936 58 24" tooltip="DDC-Maximum"
         edTextCol="ff000000" edBkgCol="0" labelText="-120" editableSingleClick="0"
         editableDoubleClick="0" focusDiscardsChanges="0" fontname="Default font"
         fontsize="15" bold="0" italic="0" justification="34"/>
  <TEXTEDITOR name="AGC Adaption Rate 1" id="cdcc3286afeae56d" memberName="m_entryAgcMu_1"
              virtualName="" explicitFocusOrder="0" pos="560 168 64 24" tooltip="AGC Adaption Rate 1"
              initialText="0.000001" multiline="0" retKeyStartsLine="0" readonly="0"
              scrollbars="0" caret="1" popupmenu="1"/>
  <TEXTEDITOR name="CPRLoopFilterLead 1" id="f71fd172af939aa4" memberName="m_entryCPRLoopFilterLead_1"
              virtualName="" explicitFocusOrder="0" pos="24 168 72 24" tooltip="CPRLoopFilterLead 1"
              initialText="1000.000" multiline="0" retKeyStartsLine="0" readonly="0"
              scrollbars="0" caret="1" popupmenu="1"/>
  <TEXTEDITOR name="CPRLoopFilterLag 1" id="5cfbc61e4302693f" memberName="m_entryCPRLoopFilterLag_1"
              virtualName="" explicitFocusOrder="0" pos="144 168 72 24" tooltip="CPRLoopFilterLag 1"
              initialText="1000.000" multiline="0" retKeyStartsLine="0" readonly="0"
              scrollbars="0" caret="1" popupmenu="1"/>
  <TEXTEDITOR name="STRLoopFilterLead 1" id="e98e3a0a1e440f2d" memberName="m_entrySTRLoopFilterLead_1"
              virtualName="" explicitFocusOrder="0" pos="288 168 72 24" tooltip="STRLoopFilterLead 1"
              initialText="1000.000" multiline="0" retKeyStartsLine="0" readonly="0"
              scrollbars="0" caret="1" popupmenu="1"/>
  <TEXTEDITOR name="STRLoopFilterLag 1" id="7b5faeacc39dce6a" memberName="m_entrySTRLoopFilterLag_1"
              virtualName="" explicitFocusOrder="0" pos="408 168 72 24" tooltip="STRLoopFilterLag 1"
              initialText="1000.000" multiline="0" retKeyStartsLine="0" readonly="0"
              scrollbars="0" caret="1" popupmenu="1"/>
  <TOGGLEBUTTON name="STR Track" id="8f0b130af5b1d9aa" memberName="toggleButtonSTRLoopFilterForceTrack"
                virtualName="" explicitFocusOrder="0" pos="456 48 64 24" tooltip="STR Force Tracking Mode"
                buttonText="Track" connectedEdges="0" needsCallback="1" radioGroupId="0"
                state="0"/>
  <TOGGLEBUTTON name="CPR Track" id="75c8964a7853d5e2" memberName="toggleButtonCPRLoopFilterForceTrack"
                virtualName="" explicitFocusOrder="0" pos="192 48 64 24" tooltip="STR Force Tracking Mode"
                buttonText="Track" connectedEdges="0" needsCallback="1" radioGroupId="0"
                state="0"/>
  <TOGGLEBUTTON name="DFE Enable Training" id="5d666fa09a8f1fac" memberName="toggleButtonDfeAutoUpdateEnable"
                virtualName="" explicitFocusOrder="0" pos="352 296 88 24" tooltip="DFE Enable Training"
                buttonText="Auto Upd." connectedEdges="0" needsCallback="1" radioGroupId="0"
                state="0"/>
  <LABEL name="SNR STR" id="c0975bf98b280ec0" memberName="m_labelEbN0"
         virtualName="" explicitFocusOrder="0" pos="280 616 58 24" tooltip="SNR STR"
         edTextCol="ff000000" edBkgCol="0" labelText="-120" editableSingleClick="0"
         editableDoubleClick="0" focusDiscardsChanges="0" fontname="Default font"
         fontsize="15" bold="0" italic="0" justification="34"/>
  <LABEL name="FrameTotalCount" id="95e51b38d606308b" memberName="m_labelFrameTotalCount"
         virtualName="" explicitFocusOrder="0" pos="544 312 90 24" tooltip="Number of Frames Received"
         edTextCol="ff000000" edBkgCol="0" labelText="0" editableSingleClick="0"
         editableDoubleClick="0" focusDiscardsChanges="0" fontname="Default font"
         fontsize="15" bold="0" italic="0" justification="34"/>
  <LABEL name="FrameDataCount" id="cc7c04e4f0b7ee8e" memberName="m_labelFrameDataCount"
         virtualName="" explicitFocusOrder="0" pos="544 360 90 24" tooltip="Number of Data Frames Received"
         edTextCol="ff000000" edBkgCol="0" labelText="0" editableSingleClick="0"
         editableDoubleClick="0" focusDiscardsChanges="0" fontname="Default font"
         fontsize="15" bold="0" italic="0" justification="34"/>
  <LABEL name="FrameIdleCount" id="dded30398df933fa" memberName="m_labelFrameIdleCount"
         virtualName="" explicitFocusOrder="0" pos="544 384 90 24" tooltip="Number of Idle Frames Received"
         edTextCol="ff000000" edBkgCol="0" labelText="0" editableSingleClick="0"
         editableDoubleClick="0" focusDiscardsChanges="0" fontname="Default font"
         fontsize="15" bold="0" italic="0" justification="34"/>
  <LABEL name="FrameInvalidCount" id="89e6ad64c4f0925b" memberName="m_labelFrameInvalidCount"
         virtualName="" explicitFocusOrder="0" pos="544 336 90 24" tooltip="Number of Invalid Frames Received"
         edTextCol="ff000000" edBkgCol="0" labelText="0" editableSingleClick="0"
         editableDoubleClick="0" focusDiscardsChanges="0" fontname="Default font"
         fontsize="15" bold="0" italic="0" justification="34"/>
  <LABEL name="FrameByteCount" id="c7fac4575b75ab4c" memberName="m_labelFrameByteCount"
         virtualName="" explicitFocusOrder="0" pos="544 408 90 24" tooltip="Number of bytes  Received"
         edTextCol="ff000000" edBkgCol="0" labelText="0" editableSingleClick="0"
         editableDoubleClick="0" focusDiscardsChanges="0" fontname="Default font"
         fontsize="15" bold="0" italic="0" justification="34"/>
  <TEXTBUTTON name="Statistic Reset button" id="5942ada1101c566e" memberName="m_buttonResetStatistic"
              virtualName="" explicitFocusOrder="0" pos="720 408 64 24" buttonText="Reset"
              connectedEdges="0" needsCallback="1" radioGroupId="0"/>
  <SLIDER name="CarrierPhaseSlider" id="b4edfd1dcd6a20c6" memberName="m_sliderCarrierPhase"
          virtualName="" explicitFocusOrder="0" pos="568 480 150 24" min="-3.1415926535900000616"
          max="3.1415926535900000616" int="0.0010000000000000000208" style="RotaryVerticalDrag"
          textBoxPos="TextBoxLeft" textBoxEditable="1" textBoxWidth="80"
          textBoxHeight="20" skewFactor="1"/>
  <TEXTBUTTON name="CPR Reset button" id="42a7b272b9dba592" memberName="m_buttonResetCPR"
              virtualName="" explicitFocusOrder="0" pos="192 232 64 24" buttonText="Reset"
              connectedEdges="0" needsCallback="1" radioGroupId="0"/>
  <TEXTBUTTON name="STR Reset button" id="559ecd0a391b701a" memberName="m_buttonResetStr"
              virtualName="" explicitFocusOrder="0" pos="456 232 64 24" buttonText="Reset"
              connectedEdges="0" needsCallback="1" radioGroupId="0"/>
  <COMBOBOX name="CmaMode" id="db33fac568ead021" memberName="comboBoxCmaMode"
            virtualName="" explicitFocusOrder="0" pos="96 296 72 24" editable="0"
            layout="33" items="CMA&#10;MMA&#10;S-MMA" textWhenNonSelected=""
            textWhenNoItems="(no choices)"/>
  <TOGGLEBUTTON name="CMA Button" id="a2ed8ac8b0095004" memberName="toggleButtonCMAEnable"
                virtualName="" explicitFocusOrder="0" pos="24 296 64 24" buttonText="On"
                connectedEdges="0" needsCallback="1" radioGroupId="0" state="0"/>
  <LABEL name="Slicer-Power" id="3d78759f532bcf8a" memberName="m_labelPowerDecision"
         virtualName="" explicitFocusOrder="0" pos="24 616 58 24" tooltip="Slicer-Power"
         edTextCol="ff000000" edBkgCol="0" labelText="-120" editableSingleClick="0"
         editableDoubleClick="0" focusDiscardsChanges="0" fontname="Default font"
         fontsize="15" bold="0" italic="0" justification="34"/>
  <LABEL name="Slicer-Power Magnitude" id="ad28d19c17174ef1" memberName="m_labelPowerDecisionMag"
         virtualName="" explicitFocusOrder="0" pos="24 640 58 24" tooltip="Slicer-Power Magnitude"
         edTextCol="ff000000" edBkgCol="0" labelText="-120" editableSingleClick="0"
         editableDoubleClick="0" focusDiscardsChanges="0" fontname="Default font"
         fontsize="15" bold="0" italic="0" justification="34"/>
  <LABEL name="Slicer-Power Phase" id="8feeab6819df076b" memberName="m_labelPowerDecisionPhase"
         virtualName="" explicitFocusOrder="0" pos="24 664 58 24" tooltip="Slicer-Power Phase"
         edTextCol="ff000000" edBkgCol="0" labelText="-120" editableSingleClick="0"
         editableDoubleClick="0" focusDiscardsChanges="0" fontname="Default font"
         fontsize="15" bold="0" italic="0" justification="34"/>
  <LABEL name="SNR CPR" id="ca34160cd013b5bc" memberName="m_labelNoiseCpr"
         virtualName="" explicitFocusOrder="0" pos="576 648 58 24" tooltip="SNR CPR"
         edTextCol="ff000000" edBkgCol="0" labelText="-120" editableSingleClick="0"
         editableDoubleClick="0" focusDiscardsChanges="0" fontname="Default font"
         fontsize="15" bold="0" italic="0" justification="34"/>
</JUCER_COMPONENT>

END_JUCER_METADATA
*/
#endif


//[EndFile] You can add extra defines here...
//[/EndFile]
