diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index 29cccad88..75e8e9fe4 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -1531,7 +1531,7 @@ void MainWindow::dataSink(qint64 frames) if(m_ihsym <=0) return; if(ui) ui->signal_meter_widget->setValue(m_px,m_pxmax); // Update thermometer if(m_monitoring || m_diskData) { - m_wideGraph->dataSink2(s,m_df3,m_ihsym,m_diskData); + m_wideGraph->dataSink2(s,m_df3,m_ihsym,m_diskData,m_px); } if(m_mode=="MSK144") return; @@ -3166,6 +3166,7 @@ void MainWindow::on_ClrAvgButton_clicked() if(m_mode=="Echo") { echocom_.nsum=0; m_echoGraph->clearAvg(); + m_wideGraph->restartTotalPower(); } else { if(m_msgAvgWidget != NULL) { if(m_msgAvgWidget->isVisible()) m_msgAvgWidget->displayAvg(""); diff --git a/widgets/plotter.cpp b/widgets/plotter.cpp index afa512ff2..94d7e7446 100644 --- a/widgets/plotter.cpp +++ b/widgets/plotter.cpp @@ -167,6 +167,8 @@ void CPlotter::draw(float swide[], bool bScroll, bool bRed) static QPoint LineBuf[MAX_SCREENSIZE]; static QPoint LineBuf2[MAX_SCREENSIZE]; static QPoint LineBuf3[MAX_SCREENSIZE]; + static QPoint LineBuf4[MAX_SCREENSIZE]; + j=0; j0=int(m_startFreq/m_fftBinWidth + 0.5); int iz=XfromFreq(5000.0); @@ -231,7 +233,7 @@ void CPlotter::draw(float swide[], bool bScroll, bool bRed) } - if(i==iz-1 and !m_bQ65_Sync) { + if(i==iz-1 and !m_bQ65_Sync and !m_bTotalPower) { painter2D.drawPolyline(LineBuf,j); } LineBuf[j].setX(i); @@ -320,6 +322,17 @@ void CPlotter::draw(float swide[], bool bScroll, bool bRed) painter2D.drawText(m_w-100,m_h2/2,t); } } + + if(m_bTotalPower) { + painter2D.setPen(Qt::green); + int yy=m_h2 - 10*(m_pdB-20); + LineBuf4[m_x].setX(m_x); + LineBuf4[m_x].setY(yy); + painter2D.drawPolyline(LineBuf4,m_x); + m_x++; + if(m_x > m_w) m_x=0; + } + update(); //trigger a new paintEvent m_bScaleOK=true; } @@ -874,3 +887,13 @@ void CPlotter::setDiskUTC(int nutc) { m_nUTC=nutc; } + +void CPlotter::drawTotalPower(float pdB) +{ + m_pdB=pdB; +} + +void CPlotter::restartTotalPower() +{ + m_x=0; +} diff --git a/widgets/plotter.h b/widgets/plotter.h index d1aa064aa..2fb9ae22b 100644 --- a/widgets/plotter.h +++ b/widgets/plotter.h @@ -34,6 +34,7 @@ public: QSize sizeHint() const Q_DECL_OVERRIDE; void draw(float swide[], bool bScroll, bool bRed); //Update the waterfall + void drawTotalPower(float pdB); void replot(); void SetRunningState(bool running); void setPlotZero(int plotZero); @@ -81,12 +82,15 @@ public: bool Reference() const {return m_bReference;} void setQ65_Sync(bool b) {m_bQ65_Sync = b;} bool Q65_Sync() const {return m_bQ65_Sync;} + void setTotalPower(bool b) {m_bTotalPower = b;} + bool TotalPower() const {return m_bTotalPower;} void drawRed(int ia, int ib, float swide[]); void setVHF(bool bVHF); void setRedFile(QString fRed); void setFST4_FreqRange(int fLow,int fHigh); void setSingleDecode(bool b); void setDiskUTC(int nutc); + void restartTotalPower(); bool scaleOK () const {return m_bScaleOK;} signals: @@ -116,12 +120,14 @@ private: bool m_bReference; bool m_bReference0; bool m_bQ65_Sync; + bool m_bTotalPower; bool m_bVHF; bool m_bSingleDecode; bool m_bFirst=true; bool m_bResized; float m_fSpan; + float m_pdB; qint32 m_plotZero; qint32 m_plotGain; @@ -137,6 +143,7 @@ private: qint32 m_nfa; qint32 m_nfb; qint32 m_nUTC; + qint32 m_x=0; QPixmap m_WaterfallPixmap; QPixmap m_2DPixmap; diff --git a/widgets/widegraph.cpp b/widgets/widegraph.cpp index e1ad518ab..70380c38b 100644 --- a/widgets/widegraph.cpp +++ b/widgets/widegraph.cpp @@ -71,11 +71,13 @@ WideGraph::WideGraph(QSettings * settings, QWidget *parent) : ui->widePlot->setLinearAvg(m_settings->value("LinearAvg",false).toBool()); ui->widePlot->setReference(m_settings->value("Reference",false).toBool()); ui->widePlot->setQ65_Sync(m_settings->value("Q65_Sync",false).toBool()); + ui->widePlot->setTotalPower(m_settings->value("TotalPower",false).toBool()); if(ui->widePlot->current()) ui->spec2dComboBox->setCurrentIndex(0); if(ui->widePlot->cumulative()) ui->spec2dComboBox->setCurrentIndex(1); if(ui->widePlot->linearAvg()) ui->spec2dComboBox->setCurrentIndex(2); if(ui->widePlot->Reference()) ui->spec2dComboBox->setCurrentIndex(3); if(ui->widePlot->Q65_Sync()) ui->spec2dComboBox->setCurrentIndex(4); + if(ui->widePlot->TotalPower()) ui->spec2dComboBox->setCurrentIndex(5); int nbpp=m_settings->value("BinsPerPixel",2).toInt(); ui->widePlot->setBinsPerPixel(nbpp); ui->sbPercent2dPlot->setValue(m_Percent2DScreen); @@ -133,6 +135,7 @@ void WideGraph::saveSettings() //saveS m_settings->setValue ("LinearAvg", ui->widePlot->linearAvg()); m_settings->setValue ("Reference", ui->widePlot->Reference()); m_settings->setValue ("Q65_Sync", ui->widePlot->Q65_Sync()); + m_settings->setValue ("TotalPower", ui->widePlot->TotalPower()); m_settings->setValue ("BinsPerPixel", ui->widePlot->binsPerPixel ()); m_settings->setValue ("StartFreq", ui->widePlot->startFreq ()); m_settings->setValue ("WaterfallPalette", m_waterfallPalette); @@ -148,11 +151,12 @@ void WideGraph::drawRed(int ia, int ib) ui->widePlot->drawRed(ia,ib,m_swide); } -void WideGraph::dataSink2(float s[], float df3, int ihsym, int ndiskdata) //dataSink2 +void WideGraph::dataSink2(float s[], float df3, int ihsym, int ndiskdata, float pdB) //dataSink2 { static float splot[NSMAX]; int nbpp = ui->widePlot->binsPerPixel(); + if(ui->widePlot->TotalPower()) ui->widePlot->drawTotalPower(pdB); //Average spectra over specified number, m_waterfallAvg if (m_n==0) { for (int i=0; iwidePlot->setLinearAvg(false); ui->widePlot->setReference(false); ui->widePlot->setQ65_Sync(false); + ui->widePlot->setTotalPower(false); ui->smoSpinBox->setEnabled(false); switch (index) { @@ -332,7 +337,10 @@ void WideGraph::on_spec2dComboBox_currentIndexChanged(int index) case 4: ui->widePlot->setQ65_Sync(true); break; - } + case 5: + ui->widePlot->setTotalPower(true); + break; + } replot(); } @@ -540,3 +548,8 @@ void WideGraph::setDiskUTC(int nutc) { ui->widePlot->setDiskUTC(nutc); } + +void WideGraph::restartTotalPower() +{ + ui->widePlot->restartTotalPower(); +} diff --git a/widgets/widegraph.h b/widgets/widegraph.h index 9043f691f..795031a46 100644 --- a/widgets/widegraph.h +++ b/widgets/widegraph.h @@ -26,7 +26,7 @@ public: explicit WideGraph(QSettings *, QWidget *parent = 0); ~WideGraph (); - void dataSink2(float s[], float df3, int ihsym, int ndiskdata); + void dataSink2(float s[], float df3, int ihsym, int ndiskdata, float pdB); void setRxFreq(int n); int rxFreq(); int nStartFreq(); @@ -51,6 +51,7 @@ public: void setFST4_FreqRange(int fLow,int fHigh); void setSingleDecode(bool b); void setDiskUTC(int nutc); + void restartTotalPower(); signals: void freezeDecode2(int n); diff --git a/widgets/widegraph.ui b/widgets/widegraph.ui index 758cad8c4..7259dd8c7 100644 --- a/widgets/widegraph.ui +++ b/widgets/widegraph.ui @@ -340,6 +340,11 @@ Q65_Sync + + + Total power (dB) + +