int SpectrumDisplayForm::_openGLWaterfall3DFlag = -1;
-SpectrumDisplayForm::SpectrumDisplayForm(QWidget* parent)
+SpectrumDisplayForm::SpectrumDisplayForm(bool useOpenGL, QWidget* parent)
: QWidget(parent)
{
setupUi(this);
+ _useOpenGL = useOpenGL;
_systemSpecifiedFlag = false;
_intValidator = new QIntValidator(this);
_intValidator->setBottom(0);
_frequencyDisplayPlot = new FrequencyDisplayPlot(FrequencyPlotDisplayFrame);
_waterfallDisplayPlot = new WaterfallDisplayPlot(WaterfallPlotDisplayFrame);
- _waterfall3DDisplayPlot = new Waterfall3DDisplayPlot(Waterfall3DPlotDisplayFrame);
+
_timeDomainDisplayPlot = new TimeDomainDisplayPlot(TimeDomainDisplayFrame);
_constellationDisplayPlot = new ConstellationDisplayPlot(ConstellationDisplayFrame);
_numRealDataPoints = 1024;
_averagedValues = new double[_numRealDataPoints];
_historyVector = new std::vector<double*>;
- AvgLineEdit->setValidator(_intValidator);
- PowerLineEdit->setValidator(_intValidator);
+ AvgLineEdit->setRange(0, 500); // Set range of Average box value from 0 to 500
MinHoldCheckBox_toggled( false );
MaxHoldCheckBox_toggled( false );
WaterfallMinimumIntensityWheel->setTickCnt(50);
WaterfallMinimumIntensityWheel->setValue(-200);
- Waterfall3DMaximumIntensityWheel->setRange(-200, 0);
- Waterfall3DMaximumIntensityWheel->setTickCnt(50);
- Waterfall3DMinimumIntensityWheel->setRange(-200, 0);
- Waterfall3DMinimumIntensityWheel->setTickCnt(50);
- Waterfall3DMinimumIntensityWheel->setValue(-200);
-
_peakFrequency = 0;
_peakAmplitude = -HUGE_VAL;
ToggleTabFrequency(false);
ToggleTabWaterfall(false);
- ToggleTabWaterfall3D(false);
ToggleTabTime(false);
ToggleTabConstellation(false);
+
+ // Create a timer to update plots at the specified rate
+ displayTimer = new QTimer(this);
+ connect(displayTimer, SIGNAL(timeout()), this, SLOT(UpdateGuiTimer()));
}
SpectrumDisplayForm::~SpectrumDisplayForm()
// Qt deletes children when parent is deleted
// Don't worry about deleting Display Plots - they are deleted when parents are deleted
- /* delete _intValidator; */
+ delete _intValidator;
delete[] _realFFTDataPoints;
delete[] _averagedValues;
}
delete _historyVector;
+
+ displayTimer->stop();
+ delete displayTimer;
}
void
void
SpectrumDisplayForm::newFrequencyData( const SpectrumUpdateEvent* spectrumUpdateEvent)
{
+ //_lastSpectrumEvent = (SpectrumUpdateEvent)(*spectrumUpdateEvent);
const std::complex<float>* complexDataPoints = spectrumUpdateEvent->getFFTPoints();
const uint64_t numFFTDataPoints = spectrumUpdateEvent->getNumFFTDataPoints();
const double* realTimeDomainDataPoints = spectrumUpdateEvent->getRealTimeDomainPoints();
const double* imagTimeDomainDataPoints = spectrumUpdateEvent->getImagTimeDomainPoints();
const uint64_t numTimeDomainDataPoints = spectrumUpdateEvent->getNumTimeDomainDataPoints();
- const double timePerFFT = spectrumUpdateEvent->getTimePerFFT();
- const timespec dataTimestamp = spectrumUpdateEvent->getDataTimestamp();;
+ const timespec dataTimestamp = spectrumUpdateEvent->getDataTimestamp();
const bool repeatDataFlag = spectrumUpdateEvent->getRepeatDataFlag();
const bool lastOfMultipleUpdatesFlag = spectrumUpdateEvent->getLastOfMultipleUpdateFlag();
const timespec generatedTimestamp = spectrumUpdateEvent->getEventGeneratedTimestamp();
ResizeBuffers(numFFTDataPoints, numTimeDomainDataPoints);
// Calculate the Magnitude of the complex point
- const std::complex<float>* complexDataPointsPtr = complexDataPoints;
+ const std::complex<float>* complexDataPointsPtr = complexDataPoints+numFFTDataPoints/2;
double* realFFTDataPointsPtr = _realFFTDataPoints;
- for(uint64_t point = 0; point < numFFTDataPoints; point++){
- // Calculate dBm
- // 50 ohm load assumption
- // 10 * log10 (v^2 / (2 * 50.0 * .001)) = 10 * log10( v^2 * 10)
- // 75 ohm load assumption
- // 10 * log10 (v^2 / (2 * 75.0 * .001)) = 10 * log10( v^2 * 15)
+
+ double sumMean = 0.0;
+ double localPeakAmplitude = -HUGE_VAL;
+ double localPeakFrequency = 0.0;
+ const double fftBinSize = (_stopFrequency-_startFrequency) /
+ static_cast<double>(numFFTDataPoints);
+
+ // Run this twice to perform the fftshift operation on the data here as well
+ std::complex<float> scaleFactor = std::complex<float>((float)numFFTDataPoints);
+ for(uint64_t point = 0; point < numFFTDataPoints/2; point++){
+ std::complex<float> pt = (*complexDataPointsPtr) / scaleFactor;
+ *realFFTDataPointsPtr = 10.0*log10((pt.real() * pt.real() + pt.imag()*pt.imag()) + 1e-20);
+
+ if(*realFFTDataPointsPtr > localPeakAmplitude) {
+ localPeakFrequency = static_cast<float>(point) * fftBinSize;
+ localPeakAmplitude = *realFFTDataPointsPtr;
+ }
+ sumMean += *realFFTDataPointsPtr;
- *realFFTDataPointsPtr = 10.0*log10((((*complexDataPointsPtr).real() * (*complexDataPointsPtr).real()) +
- ((*complexDataPointsPtr).imag()*(*complexDataPointsPtr).imag())) + 1e-20);
+ complexDataPointsPtr++;
+ realFFTDataPointsPtr++;
+ }
+
+ // This loop takes the first half of the input data and puts it in the
+ // second half of the plotted data
+ complexDataPointsPtr = complexDataPoints;
+ for(uint64_t point = 0; point < numFFTDataPoints/2; point++){
+ std::complex<float> pt = (*complexDataPointsPtr) / scaleFactor;
+ *realFFTDataPointsPtr = 10.0*log10((pt.real() * pt.real() + pt.imag()*pt.imag()) + 1e-20);
+
+ if(*realFFTDataPointsPtr > localPeakAmplitude) {
+ localPeakFrequency = static_cast<float>(point) * fftBinSize;
+ localPeakAmplitude = *realFFTDataPointsPtr;
+ }
+ sumMean += *realFFTDataPointsPtr;
complexDataPointsPtr++;
realFFTDataPointsPtr++;
}
-
- int tabindex = SpectrumTypeTab->currentIndex();
// Don't update the averaging history if this is repeated data
if(!repeatDataFlag){
_AverageHistory(_realFFTDataPoints);
- double sumMean;
- const double fft_bin_size = (_stopFrequency-_startFrequency) /
- static_cast<double>(numFFTDataPoints);
-
- // find the peak, sum (for mean), etc
- _peakAmplitude = -HUGE_VAL;
- sumMean = 0.0;
- for(uint64_t number = 0; number < numFFTDataPoints; number++){
- // find peak
- if(_realFFTDataPoints[number] > _peakAmplitude){
- _peakFrequency = (static_cast<float>(number) * fft_bin_size); // Calculate the frequency relative to the local bw, adjust for _startFrequency later
- _peakAmplitude = _realFFTDataPoints[number];
- // _peakBin = number;
- }
- // sum (for mean)
- sumMean += _realFFTDataPoints[number];
- }
+ // Only use the local info if we are not repeating data
+ _peakAmplitude = localPeakAmplitude;
+ _peakFrequency = localPeakFrequency;
// calculate the spectral mean
// +20 because for the comparison below we only want to throw out bins
}
if(lastOfMultipleUpdatesFlag){
+ int tabindex = SpectrumTypeTab->currentIndex();
if(tabindex == d_plot_fft) {
_frequencyDisplayPlot->PlotNewData(_averagedValues, numFFTDataPoints,
_noiseFloorAmplitude, _peakFrequency,
- _peakAmplitude);
+ _peakAmplitude, d_update_time);
}
if(tabindex == d_plot_time) {
_timeDomainDisplayPlot->PlotNewData(realTimeDomainDataPoints,
imagTimeDomainDataPoints,
- numTimeDomainDataPoints);
+ numTimeDomainDataPoints,
+ d_update_time);
}
if(tabindex == d_plot_constellation) {
_constellationDisplayPlot->PlotNewData(realTimeDomainDataPoints,
imagTimeDomainDataPoints,
- numTimeDomainDataPoints);
+ numTimeDomainDataPoints,
+ d_update_time);
}
// Don't update the repeated data for the waterfall
if(!repeatDataFlag){
if(tabindex == d_plot_waterfall) {
_waterfallDisplayPlot->PlotNewData(_realFFTDataPoints, numFFTDataPoints,
- timePerFFT, dataTimestamp,
+ d_update_time, dataTimestamp,
spectrumUpdateEvent->getDroppedFFTFrames());
}
- if( _openGLWaterfall3DFlag == 1 && (tabindex == d_plot_waterfall3d)) {
- _waterfall3DDisplayPlot->PlotNewData(_realFFTDataPoints, numFFTDataPoints,
- timePerFFT, dataTimestamp,
- spectrumUpdateEvent->getDroppedFFTFrames());
- }
}
+
// Tell the system the GUI has been updated
if(_systemSpecifiedFlag){
_system->SetLastGUIUpdateTime(generatedTimestamp);
void
SpectrumDisplayForm::resizeEvent( QResizeEvent *e )
{
- // Let the actual window resize its width, but not its height
- QSize newSize(e->size().width(), e->oldSize().height());
- QResizeEvent et(newSize, e->oldSize());
- QWidget::resizeEvent(&et);
+ QSize s;
+ s.setWidth(FrequencyPlotDisplayFrame->width());
+ s.setHeight(FrequencyPlotDisplayFrame->height());
+ emit _frequencyDisplayPlot->resizeSlot(&s);
- // Tell the Tab Window to Resize
- SpectrumTypeTab->resize( e->size().width(), e->size().height()-60);
+ s.setWidth(TimeDomainDisplayFrame->width());
+ s.setHeight(TimeDomainDisplayFrame->height());
+ emit _timeDomainDisplayPlot->resizeSlot(&s);
- // Tell the TabXFreqDisplay to resize
- FrequencyPlotDisplayFrame->resize(e->size().width()-4,
- e->size().height()-140);
- _frequencyDisplayPlot->resize( FrequencyPlotDisplayFrame->width()-4,
- e->size().height()-140);
-
- // Move the Power Lbl and Line Edit
- PowerLabel->move(e->size().width()-(415-324) - PowerLabel->width(),
- e->size().height()-135);
- PowerLineEdit->move(e->size().width()-(415-318) - PowerLineEdit->width(),
- e->size().height()-115);
-
- // Move the Avg Lbl and Line Edit
- AvgLabel->move(e->size().width()-(415-406) - AvgLabel->width(),
- e->size().height()-135);
- AvgLineEdit->move(e->size().width()-(415-400) - AvgLineEdit->width(),
- e->size().height()-115);
-
- // Move Max and Min check boxes
- MaxHoldCheckBox->move(MaxHoldCheckBox->x(),
- e->size().height()-135);
- MaxHoldResetBtn->move(MaxHoldResetBtn->x(),
- e->size().height()-135);
- MinHoldCheckBox->move(MinHoldCheckBox->x(),
- e->size().height()-115);
- MinHoldResetBtn->move(MinHoldResetBtn->x(),
- e->size().height()-115);
-
- WaterfallPlotDisplayFrame->resize(e->size().width()-4,
- e->size().height()-140);
- _waterfallDisplayPlot->resize( WaterfallPlotDisplayFrame->width()-4,
- e->size().height()-140);
-
- // Move the IntensityWheels and Labels
- WaterfallMaximumIntensityLabel->move(width() - 5 -
- WaterfallMaximumIntensityLabel->width(),
- WaterfallMaximumIntensityLabel->y());
- WaterfallMaximumIntensityWheel->resize(WaterfallMaximumIntensityLabel->x() - 5 -
- WaterfallMaximumIntensityWheel->x(),
- WaterfallMaximumIntensityWheel->height());
-
- WaterfallMinimumIntensityLabel->move(width() - 5 -
- WaterfallMinimumIntensityLabel->width(),
- height() - 115);
- WaterfallMinimumIntensityWheel->resize(WaterfallMinimumIntensityLabel->x() - 5 -
- WaterfallMinimumIntensityWheel->x(),
- WaterfallMaximumIntensityWheel->height());
- WaterfallMinimumIntensityWheel->move(WaterfallMinimumIntensityWheel->x(),
- height() - 115);
- WaterfallAutoScaleBtn->move(WaterfallAutoScaleBtn->x(),
- e->size().height()-115);
-
- Waterfall3DPlotDisplayFrame->resize(e->size().width()-4,
- e->size().height()-140);
- _waterfall3DDisplayPlot->resize( Waterfall3DPlotDisplayFrame->width()-4,
- e->size().height()-140);
-
- Waterfall3DMaximumIntensityLabel->move(width() - 5 -
- Waterfall3DMaximumIntensityLabel->width(),
- Waterfall3DMaximumIntensityLabel->y());
- Waterfall3DMaximumIntensityWheel->resize(Waterfall3DMaximumIntensityLabel->x() - 5 -
- Waterfall3DMaximumIntensityWheel->x(),
- Waterfall3DMaximumIntensityWheel->height());
- Waterfall3DMinimumIntensityLabel->move(width() - 5 -
- Waterfall3DMinimumIntensityLabel->width(),
- height() - 115);
- Waterfall3DMinimumIntensityWheel->resize(Waterfall3DMinimumIntensityLabel->x() - 5 -
- Waterfall3DMinimumIntensityWheel->x(),
- Waterfall3DMaximumIntensityWheel->height());
- Waterfall3DMinimumIntensityWheel->move(Waterfall3DMinimumIntensityWheel->x(),
- height() - 115);
- Waterfall3DAutoScaleBtn->move(WaterfallAutoScaleBtn->x(),
- e->size().height()-115);
-
- TimeDomainDisplayFrame->resize(e->size().width()-4,
- e->size().height()-140);
- _timeDomainDisplayPlot->resize( TimeDomainDisplayFrame->width()-4,
- e->size().height()-140);
-
- ConstellationDisplayFrame->resize(e->size().width()-4,
- e->size().height()-140);
- _constellationDisplayPlot->resize( TimeDomainDisplayFrame->width()-4,
- e->size().height()-140);
-
- // Move the FFT Size Combobox and label
- FFTSizeComboBox->move(width() - 5 - FFTSizeComboBox->width(),
- height()-50);
- FFTSizeLabel->move(width() - 10 - FFTSizeComboBox->width() - FFTSizeLabel->width(),
- height()-50);
-
- // Move the lower check and combo boxes
- UseRFFrequenciesCheckBox->move(UseRFFrequenciesCheckBox->x(), height()-50);
- WindowLbl->move(WindowLbl->x(), height()-25);
- WindowComboBox->move(WindowComboBox->x(), height()-25);
-}
+ s.setWidth(WaterfallPlotDisplayFrame->width());
+ s.setHeight(WaterfallPlotDisplayFrame->height());
+ emit _waterfallDisplayPlot->resizeSlot(&s);
+ s.setWidth(ConstellationDisplayFrame->width());
+ s.setHeight(ConstellationDisplayFrame->height());
+ emit _constellationDisplayPlot->resizeSlot(&s);
+}
void
SpectrumDisplayForm::customEvent( QEvent * e)
WindowComboBox->setCurrentIndex(_system->GetWindowType());
FFTSizeComboBox->setCurrentIndex(_system->GetFFTSizeIndex());
//FFTSizeComboBox->setCurrentIndex(1);
- PowerLineEdit_textChanged(PowerLineEdit->text());
}
waterfallMinimumIntensityChangedCB(WaterfallMinimumIntensityWheel->value());
waterfallMaximumIntensityChangedCB(WaterfallMaximumIntensityWheel->value());
- waterfall3DMinimumIntensityChangedCB(Waterfall3DMinimumIntensityWheel->value());
- waterfall3DMaximumIntensityChangedCB(Waterfall3DMaximumIntensityWheel->value());
-
- // If the video card doesn't support OpenGL then don't display the 3D Waterfall
- if(QGLFormat::hasOpenGL()){
- // Check for Hardware Acceleration of the OpenGL
- if(!_waterfall3DDisplayPlot->format().directRendering()){
- // Only ask this once while the program is running...
- if(_openGLWaterfall3DFlag == -1){
- _openGLWaterfall3DFlag = 0;
- if(QMessageBox::warning(this, "OpenGL Direct Rendering NOT Supported", "<center>The system's video card hardware or current drivers do not support direct hardware rendering of the OpenGL modules.</center><br><center>Software rendering is VERY processor intensive.</center><br><center>Do you want to use software rendering?</center>", QMessageBox::Yes, QMessageBox::No | QMessageBox::Default | QMessageBox::Escape) == QMessageBox::Yes){
- _openGLWaterfall3DFlag = 1;
- }
- }
- }
- else{
- _openGLWaterfall3DFlag = 1;
- }
- }
-
- if(_openGLWaterfall3DFlag != 1){
- ToggleTabWaterfall3D(false);
- }
-
// Clear any previous display
Reset();
}
}
void
-SpectrumDisplayForm::AvgLineEdit_textChanged( const QString &valueString )
+SpectrumDisplayForm::UpdateGuiTimer()
{
- if(!valueString.isEmpty()){
- int value = valueString.toInt();
- if(value > 500){
- value = 500;
- AvgLineEdit->setText("500");
- }
- SetAverageCount(value);
- }
+ // This is called by the displayTimer and redraws the canvases of
+ // all of the plots.
+ _frequencyDisplayPlot->canvas()->update();
+ _waterfallDisplayPlot->canvas()->update();
+ _timeDomainDisplayPlot->canvas()->update();
+ _constellationDisplayPlot->canvas()->update();
+}
+
+
+void
+SpectrumDisplayForm::AvgLineEdit_valueChanged( int value )
+{
+ SetAverageCount(value);
}
void
-SpectrumDisplayForm::PowerLineEdit_textChanged( const QString &valueString )
+SpectrumDisplayForm::TabChanged(int index)
{
- if(_systemSpecifiedFlag){
- if(!valueString.isEmpty()){
- double value = valueString.toDouble();
- if(value < 1.0){
- value = 1.0;
- PowerLineEdit->setText("1");
- }
- _system->SetPowerValue(value);
- }
-
- if(_system->GetPowerValue() > 1){
- UseRFFrequenciesCheckBox->setChecked(false);
- UseRFFrequenciesCheckBox->setEnabled(false);
- UseRFFrequenciesCB(false);
- }
- else{
- UseRFFrequenciesCheckBox->setEnabled(true);
- }
- }
+ // This might be dangerous to call this with NULL
+ resizeEvent(NULL);
}
void
-SpectrumDisplayForm::SetFrequencyRange(const double newStartFrequency,
- const double newStopFrequency,
- const double newCenterFrequency)
+SpectrumDisplayForm::SetFrequencyRange(const double newCenterFrequency,
+ const double newStartFrequency,
+ const double newStopFrequency)
{
- double fdiff = abs(newStartFrequency - newStopFrequency);
+ double fdiff;
+ if(UseRFFrequenciesCheckBox->isChecked()) {
+ fdiff = newCenterFrequency;
+ }
+ else {
+ fdiff = std::max(fabs(newStartFrequency), fabs(newStopFrequency));
+ }
if(fdiff > 0) {
std::string strunits[4] = {"Hz", "kHz", "MHz", "GHz"};
+ std::string strtime[4] = {"sec", "ms", "us", "ns"};
double units10 = floor(log10(fdiff));
- double units3 = floor(units10 / 3.0);
- double units = pow(10, units10);
+ double units3 = std::max(floor(units10 / 3.0), 0.0);
+ double units = pow(10, (units10-fmod(units10, 3.0)));
int iunit = static_cast<int>(units3);
- _frequencyDisplayPlot->SetFrequencyRange(newStartFrequency,
- newStopFrequency,
- newCenterFrequency,
+ _startFrequency = newStartFrequency;
+ _stopFrequency = newStopFrequency;
+ _centerFrequency = newCenterFrequency;
+
+ _frequencyDisplayPlot->SetFrequencyRange(_startFrequency,
+ _stopFrequency,
+ _centerFrequency,
UseRFFrequenciesCheckBox->isChecked(),
units, strunits[iunit]);
- _waterfallDisplayPlot->SetFrequencyRange(newStartFrequency,
- newStopFrequency,
- newCenterFrequency,
+ _waterfallDisplayPlot->SetFrequencyRange(_startFrequency,
+ _stopFrequency,
+ _centerFrequency,
UseRFFrequenciesCheckBox->isChecked(),
units, strunits[iunit]);
- _waterfall3DDisplayPlot->SetFrequencyRange(newStartFrequency,
- newStopFrequency,
- newCenterFrequency,
- UseRFFrequenciesCheckBox->isChecked(),
- units, strunits[iunit]);
+ _timeDomainDisplayPlot->SetSampleRate(_stopFrequency - _startFrequency,
+ units, strtime[iunit]);
}
}
AverageDataReset();
_waterfallDisplayPlot->Reset();
- _waterfall3DDisplayPlot->Reset();
}
void
SpectrumDisplayForm::UseRFFrequenciesCB( bool useRFFlag )
{
- if(useRFFlag){
- SetFrequencyRange(_startFrequency, _stopFrequency, _centerFrequency);
- }
- else{
- SetFrequencyRange(_startFrequency, _stopFrequency, 0.0 );
- }
+ SetFrequencyRange(_centerFrequency, _startFrequency, _stopFrequency);
}
WaterfallMaximumIntensityWheel->value());
}
-void
-SpectrumDisplayForm::waterfall3DMaximumIntensityChangedCB( double newValue )
-{
- if(newValue > Waterfall3DMinimumIntensityWheel->value()){
- Waterfall3DMaximumIntensityLabel->setText(QString("%1 dB").arg(newValue, 0, 'f', 0));
- }
- else{
- Waterfall3DMaximumIntensityWheel->setValue(Waterfall3DMinimumIntensityWheel->value());
- }
-
- _waterfall3DDisplayPlot->SetIntensityRange(Waterfall3DMinimumIntensityWheel->value(),
- Waterfall3DMaximumIntensityWheel->value());
-}
-
-
-void
-SpectrumDisplayForm::waterfall3DMinimumIntensityChangedCB( double newValue )
-{
- if(newValue < Waterfall3DMaximumIntensityWheel->value()){
- Waterfall3DMinimumIntensityLabel->setText(QString("%1 dB").arg(newValue, 0, 'f', 0));
- }
- else{
- Waterfall3DMinimumIntensityWheel->setValue(Waterfall3DMaximumIntensityWheel->value());
- }
-
- _waterfall3DDisplayPlot->SetIntensityRange(Waterfall3DMinimumIntensityWheel->value(),
- Waterfall3DMaximumIntensityWheel->value());
-}
-
-
void
SpectrumDisplayForm::FFTComboBoxSelectedCB( const QString &fftSizeString )
{
waterfallMaximumIntensityChangedCB(maximumIntensity);
}
-void
-SpectrumDisplayForm::Waterfall3DAutoScaleBtnCB()
-{
- double minimumIntensity = _noiseFloorAmplitude - 5;
- if(minimumIntensity < Waterfall3DMinimumIntensityWheel->minValue()){
- minimumIntensity = Waterfall3DMinimumIntensityWheel->minValue();
- }
- Waterfall3DMinimumIntensityWheel->setValue(minimumIntensity);
- double maximumIntensity = _peakAmplitude + 10;
- if(maximumIntensity > Waterfall3DMaximumIntensityWheel->maxValue()){
- maximumIntensity = Waterfall3DMaximumIntensityWheel->maxValue();
- }
- Waterfall3DMaximumIntensityWheel->setValue(maximumIntensity);
- waterfallMaximumIntensityChangedCB(maximumIntensity);
-}
-
void
SpectrumDisplayForm::WaterfallIntensityColorTypeChanged( int newType )
{
_waterfallDisplayPlot->SetIntensityColorMapType(newType, lowIntensityColor, highIntensityColor);
}
-void
-SpectrumDisplayForm::Waterfall3DIntensityColorTypeChanged( int newType )
-{
- QColor lowIntensityColor;
- QColor highIntensityColor;
- if(newType == Waterfall3DDisplayPlot::INTENSITY_COLOR_MAP_TYPE_USER_DEFINED){
- // Select the Low Intensity Color
- lowIntensityColor = _waterfallDisplayPlot->GetUserDefinedLowIntensityColor();
- if(!lowIntensityColor.isValid()){
- lowIntensityColor = Qt::black;
- }
- QMessageBox::information(this, "Low Intensity Color Selection", "In the next window, select the low intensity color for the waterfall display", QMessageBox::Ok);
- lowIntensityColor = QColorDialog::getColor(lowIntensityColor, this);
-
- // Select the High Intensity Color
- highIntensityColor = _waterfallDisplayPlot->GetUserDefinedHighIntensityColor();
- if(!highIntensityColor.isValid()){
- highIntensityColor = Qt::white;
- }
- QMessageBox::information(this, "High Intensity Color Selection", "In the next window, select the high intensity color for the waterfall display", QMessageBox::Ok);
- highIntensityColor = QColorDialog::getColor(highIntensityColor, this);
- }
- _waterfall3DDisplayPlot->SetIntensityColorMapType(newType, lowIntensityColor,
- highIntensityColor);
-}
-
-
void
SpectrumDisplayForm::ToggleTabFrequency(const bool state)
{
}
}
-void
-SpectrumDisplayForm::ToggleTabWaterfall3D(const bool state)
-{
- if(state == true) {
- if(d_plot_waterfall3d == -1) {
- SpectrumTypeTab->addTab(Waterfall3DPage, "3D Waterfall Display");
- d_plot_waterfall3d = SpectrumTypeTab->count()-1;
- }
- }
- else {
- SpectrumTypeTab->removeTab(SpectrumTypeTab->indexOf(Waterfall3DPage));
- d_plot_waterfall3d = -1;
- }
-}
-
void
SpectrumDisplayForm::ToggleTabTime(const bool state)
{
{
_constellationDisplayPlot->set_axis(xmin, xmax, ymin, ymax);
}
+
+void
+SpectrumDisplayForm::SetConstellationPenSize(int size)
+{
+ _constellationDisplayPlot->set_pen_size( size );
+}
+
+void
+SpectrumDisplayForm::SetFrequencyAxis(double min, double max)
+{
+ _frequencyDisplayPlot->set_yaxis(min, max);
+}
+
+void
+SpectrumDisplayForm::SetUpdateTime(double t)
+{
+ d_update_time = t;
+ // QTimer class takes millisecond input
+ displayTimer->start(d_update_time*1000);
+}