#include "widegraph.h" #include #include #include #include "ui_widegraph.h" #include "commons.h" #include "Configuration.hpp" #include "MessageBox.hpp" #include "SettingsGroup.hpp" #include "moc_widegraph.cpp" namespace { auto user_defined = QObject::tr ("User Defined"); float swide[MAX_SCREENSIZE]; } WideGraph::WideGraph(QSettings * settings, QWidget *parent) : QDialog(parent), ui(new Ui::WideGraph), m_settings (settings), m_palettes_path {":/Palettes"}, m_ntr0 {0}, m_lockTxFreq {false}, m_bHaveTransmitted {false}, m_n {0} { ui->setupUi(this); setWindowTitle (QApplication::applicationName () + " - " + tr ("Wide Graph")); setWindowFlags (Qt::WindowCloseButtonHint | Qt::WindowMinimizeButtonHint); setMaximumWidth (MAX_SCREENSIZE); setMaximumHeight (880); ui->widePlot->setCursor(Qt::CrossCursor); ui->widePlot->setMaximumHeight(800); ui->widePlot->setCurrent(false); connect(ui->widePlot, SIGNAL(freezeDecode1(int)),this, SLOT(wideFreezeDecode(int))); connect(ui->widePlot, SIGNAL(setFreq1(int,int)),this, SLOT(setFreq2(int,int))); { //Restore user's settings SettingsGroup g {m_settings, "WideGraph"}; restoreGeometry (m_settings->value ("geometry", saveGeometry ()).toByteArray ()); ui->widePlot->setPlotZero(m_settings->value("PlotZero", 0).toInt()); ui->widePlot->setPlotGain(m_settings->value("PlotGain", 0).toInt()); ui->widePlot->setPlot2dGain(m_settings->value("Plot2dGain", 0).toInt()); ui->widePlot->setPlot2dZero(m_settings->value("Plot2dZero", 0).toInt()); ui->zeroSlider->setValue(ui->widePlot->plotZero()); ui->gainSlider->setValue(ui->widePlot->plotGain()); ui->gain2dSlider->setValue(ui->widePlot->plot2dGain()); ui->zero2dSlider->setValue(ui->widePlot->plot2dZero()); int n = m_settings->value("BinsPerPixel",2).toInt(); m_bFlatten=m_settings->value("Flatten",true).toBool(); m_bRef=m_settings->value("UseRef",false).toBool(); ui->cbFlatten->setChecked(m_bFlatten); ui->widePlot->setFlatten(m_bFlatten,m_bRef); ui->cbRef->setChecked(m_bRef); ui->widePlot->setBreadth(m_settings->value("PlotWidth",1000).toInt()); ui->bppSpinBox->setValue(n); m_nsmo=m_settings->value("SmoothYellow",1).toInt(); ui->smoSpinBox->setValue(m_nsmo); m_Percent2DScreen=m_settings->value("Percent2D",30).toInt(); ui->sbPercent2dPlot->setValue(m_Percent2DScreen); m_waterfallAvg = m_settings->value("WaterfallAvg",5).toInt(); ui->waterfallAvgSpinBox->setValue(m_waterfallAvg); ui->widePlot->setWaterfallAvg(m_waterfallAvg); ui->widePlot->setCurrent(m_settings->value("Current",false).toBool()); ui->widePlot->setCumulative(m_settings->value("Cumulative",true).toBool()); ui->widePlot->setLinearAvg(m_settings->value("LinearAvg",false).toBool()); ui->widePlot->setReference(m_settings->value("Reference",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); int nbpp=m_settings->value("BinsPerPixel",2).toInt(); ui->widePlot->setBinsPerPixel(nbpp); ui->widePlot->setStartFreq(m_settings->value("StartFreq",0).toInt()); ui->fStartSpinBox->setValue(ui->widePlot->startFreq()); m_waterfallPalette=m_settings->value("WaterfallPalette","Default").toString(); m_userPalette = WFPalette {m_settings->value("UserPalette").value ()}; int m_fMin = m_settings->value ("Fmin", 2500).toInt (); ui->fSplitSpinBox->setValue (m_fMin); setRxRange (); ui->controls_widget->setVisible(!m_settings->value("HideControls",false).toBool()); ui->cbControls->setChecked(!m_settings->value("HideControls",false).toBool()); } saveSettings (); // update config with defaults int index=0; for (QString const& file: m_palettes_path.entryList(QDir::NoDotAndDotDot | QDir::System | QDir::Hidden | QDir::AllDirs | QDir::Files, QDir::DirsFirst)) { QString t=file.mid(0,file.length()-4); ui->paletteComboBox->addItem(t); if(t==m_waterfallPalette) ui->paletteComboBox->setCurrentIndex(index); index++; } ui->paletteComboBox->addItem (user_defined); if (user_defined == m_waterfallPalette) ui->paletteComboBox->setCurrentIndex(index); readPalette (); } WideGraph::~WideGraph () { } void WideGraph::closeEvent (QCloseEvent * e) { saveSettings (); QDialog::closeEvent (e); } void WideGraph::saveSettings() //saveSettings { SettingsGroup g {m_settings, "WideGraph"}; m_settings->setValue ("geometry", saveGeometry ()); m_settings->setValue ("PlotZero", ui->widePlot->plotZero()); m_settings->setValue ("PlotGain", ui->widePlot->plotGain()); m_settings->setValue ("Plot2dGain", ui->widePlot->plot2dGain()); m_settings->setValue ("Plot2dZero", ui->widePlot->plot2dZero()); m_settings->setValue ("PlotWidth", ui->widePlot->plotWidth ()); m_settings->setValue ("BinsPerPixel", ui->bppSpinBox->value ()); m_settings->setValue ("SmoothYellow", ui->smoSpinBox->value ()); m_settings->setValue ("Percent2D",m_Percent2DScreen); m_settings->setValue ("WaterfallAvg", ui->waterfallAvgSpinBox->value ()); m_settings->setValue ("Current", ui->widePlot->current()); m_settings->setValue ("Cumulative", ui->widePlot->cumulative()); m_settings->setValue ("LinearAvg", ui->widePlot->linearAvg()); m_settings->setValue ("Reference", ui->widePlot->Reference()); m_settings->setValue ("BinsPerPixel", ui->widePlot->binsPerPixel ()); m_settings->setValue ("StartFreq", ui->widePlot->startFreq ()); m_settings->setValue ("WaterfallPalette", m_waterfallPalette); m_settings->setValue ("UserPalette", QVariant::fromValue (m_userPalette.colours ())); m_settings->setValue("Flatten",m_bFlatten); m_settings->setValue("UseRef",m_bRef); m_settings->setValue ("HideControls", ui->controls_widget->isHidden ()); } void WideGraph::drawRed(int ia, int ib) { ui->widePlot->drawRed(ia,ib,swide); } void WideGraph::dataSink2(float s[], float df3, int ihsym, int ndiskdata) //dataSink2 { static float splot[NSMAX]; int nbpp = ui->widePlot->binsPerPixel(); //Average spectra over specified number, m_waterfallAvg if (m_n==0) { for (int i=0; i=m_waterfallAvg) { for (int i=0; iwidePlot->startFreq()/df3 + 0.5); int jz=5000.0/(nbpp*df3); if(jz>MAX_SCREENSIZE) jz=MAX_SCREENSIZE; for (int j=0; jss) ss=splot[i]; i++; } swide[j]=nbpp*ss; } // Time according to this computer qint64 ms = QDateTime::currentMSecsSinceEpoch() % 86400000; int ntr = (ms/1000) % m_TRperiod; if((ndiskdata && ihsym <= m_waterfallAvg) || (!ndiskdata && ntrwidePlot->draw(swide,true,false); } } void WideGraph::on_bppSpinBox_valueChanged(int n) //bpp { ui->widePlot->setBinsPerPixel(n); } void WideGraph::on_waterfallAvgSpinBox_valueChanged(int n) //Navg { m_waterfallAvg = n; ui->widePlot->setWaterfallAvg(n); } void WideGraph::keyPressEvent(QKeyEvent *e) //F11, F12 { switch(e->key()) { int n; case Qt::Key_F11: n=11; if(e->modifiers() & Qt::ControlModifier) n+=100; emit f11f12(n); break; case Qt::Key_F12: n=12; if(e->modifiers() & Qt::ControlModifier) n+=100; emit f11f12(n); break; case Qt::Key_M: if(e->modifiers() & Qt::ControlModifier) { ui->controls_widget->setVisible(!ui->controls_widget->isVisible()); } break; default: QDialog::keyPressEvent (e); } } void WideGraph::setRxFreq(int n) //setRxFreq { ui->widePlot->setRxFreq(n); ui->widePlot->draw(swide,false,false); if(m_lockTxFreq) setTxFreq(n); } int WideGraph::rxFreq() //rxFreq { return ui->widePlot->rxFreq(); } int WideGraph::nStartFreq() //nStartFreq { return ui->widePlot->startFreq(); } void WideGraph::wideFreezeDecode(int n) //wideFreezeDecode { emit freezeDecode2(n); } void WideGraph::setRxRange () { ui->widePlot->setRxRange (Fmin ()); ui->widePlot->DrawOverlay(); ui->widePlot->update(); } int WideGraph::Fmin() //Fmin { return "60m" == m_rxBand ? 0 : m_fMin; } int WideGraph::Fmax() //Fmax { return std::min(5000,ui->widePlot->Fmax()); } int WideGraph::fSpan() { return ui->widePlot->fSpan (); } void WideGraph::setPeriod(int ntrperiod, int nsps) //SetPeriod { m_TRperiod=ntrperiod; m_nsps=nsps; ui->widePlot->setNsps(ntrperiod, nsps); } void WideGraph::setTxFreq(int n) //setTxFreq { emit setXIT2(n); ui->widePlot->setTxFreq(n); } void WideGraph::setMode(QString mode) //setMode { m_mode=mode; ui->fSplitSpinBox->setEnabled(m_mode=="JT9+JT65"); ui->widePlot->setMode(mode); ui->widePlot->DrawOverlay(); ui->widePlot->update(); } void WideGraph::setSubMode(int n) //setSubMode { m_nSubMode=n; ui->widePlot->setSubMode(n); ui->widePlot->DrawOverlay(); ui->widePlot->update(); } void WideGraph::setModeTx(QString modeTx) //setModeTx { m_modeTx=modeTx; ui->widePlot->setModeTx(modeTx); ui->widePlot->DrawOverlay(); ui->widePlot->update(); } //Current-Cumulative-Yellow void WideGraph::on_spec2dComboBox_currentIndexChanged(const QString &arg1) { ui->widePlot->setCurrent(false); ui->widePlot->setCumulative(false); ui->widePlot->setLinearAvg(false); ui->widePlot->setReference(false); ui->smoSpinBox->setEnabled(false); if(arg1=="Current") ui->widePlot->setCurrent(true); if(arg1=="Cumulative") ui->widePlot->setCumulative(true); if(arg1=="Linear Avg") { ui->widePlot->setLinearAvg(true); ui->smoSpinBox->setEnabled(true); } if(arg1=="Reference") { ui->widePlot->setReference(true); } if(ui->widePlot->m_bScaleOK) ui->widePlot->draw(swide,false,false); } void WideGraph::on_fSplitSpinBox_valueChanged(int n) //fSplit { if (m_rxBand != "60m") m_fMin=n; setRxRange (); } void WideGraph::setLockTxFreq(bool b) //LockTxFreq { m_lockTxFreq=b; ui->widePlot->setLockTxFreq(b); } void WideGraph::setFreq2(int rxFreq, int txFreq) //setFreq2 { emit setFreq3(rxFreq,txFreq); } void WideGraph::setDialFreq(double d) //setDialFreq { ui->widePlot->setDialFreq(d); } void WideGraph::setRxBand (QString const& band) { m_rxBand = band; if ("60m" == m_rxBand) { ui->fSplitSpinBox->setEnabled (false); ui->fSplitSpinBox->setValue (0); } else { ui->fSplitSpinBox->setValue (m_fMin); ui->fSplitSpinBox->setEnabled (true); } ui->widePlot->setRxBand(band); setRxRange (); } void WideGraph::on_fStartSpinBox_valueChanged(int n) //fStart { ui->widePlot->setStartFreq(n); } void WideGraph::readPalette () //readPalette { try { if (user_defined == m_waterfallPalette) { ui->widePlot->setColours (WFPalette {m_userPalette}.interpolate ()); } else { ui->widePlot->setColours (WFPalette {m_palettes_path.absoluteFilePath (m_waterfallPalette + ".pal")}.interpolate()); } } catch (std::exception const& e) { MessageBox::warning_message (this, tr ("Read Palette"), e.what ()); } } void WideGraph::on_paletteComboBox_activated (QString const& palette) //palette selector { m_waterfallPalette = palette; readPalette(); } void WideGraph::on_cbFlatten_toggled(bool b) //Flatten On/Off { m_bFlatten=b; if(m_bRef and m_bFlatten) { m_bRef=false; ui->cbRef->setChecked(false); } ui->widePlot->setFlatten(m_bFlatten,m_bRef); } void WideGraph::on_cbRef_toggled(bool b) { m_bRef=b; if(m_bRef and m_bFlatten) { m_bFlatten=false; ui->cbFlatten->setChecked(false); } ui->widePlot->setFlatten(m_bFlatten,m_bRef); } void WideGraph::on_cbControls_toggled(bool b) { ui->controls_widget->setVisible(b); } void WideGraph::on_adjust_palette_push_button_clicked (bool) //Adjust Palette { try { if (m_userPalette.design ()) { m_waterfallPalette = user_defined; ui->paletteComboBox->setCurrentText (m_waterfallPalette); readPalette (); } } catch (std::exception const& e) { MessageBox::warning_message (this, tr ("Read Palette"), e.what ()); } } bool WideGraph::flatten() //Flatten { return m_bFlatten; } bool WideGraph::useRef() //Flatten { return m_bRef; } void WideGraph::on_gainSlider_valueChanged(int value) //Gain { ui->widePlot->setPlotGain(value); } void WideGraph::on_zeroSlider_valueChanged(int value) //Zero { ui->widePlot->setPlotZero(value); } void WideGraph::on_gain2dSlider_valueChanged(int value) //Gain2 { ui->widePlot->setPlot2dGain(value); if(ui->widePlot->m_bScaleOK) { ui->widePlot->draw(swide,false,false); if(m_mode=="QRA64") ui->widePlot->draw(swide,false,true); } } void WideGraph::on_zero2dSlider_valueChanged(int value) //Zero2 { ui->widePlot->setPlot2dZero(value); if(ui->widePlot->m_bScaleOK) { ui->widePlot->draw(swide,false,false); if(m_mode=="QRA64") ui->widePlot->draw(swide,false,true); } } void WideGraph::setTol(int n) //setTol { ui->widePlot->setTol(n); ui->widePlot->DrawOverlay(); ui->widePlot->update(); } void WideGraph::on_smoSpinBox_valueChanged(int n) { m_nsmo=n; } int WideGraph::smoothYellow() { return m_nsmo; } void WideGraph::setWSPRtransmitted() { m_bHaveTransmitted=true; } void WideGraph::setVHF(bool bVHF) { ui->widePlot->setVHF(bVHF); } void WideGraph::on_sbPercent2dPlot_valueChanged(int n) { m_Percent2DScreen=n; ui->widePlot->SetPercent2DScreen(n); } void WideGraph::setRedFile(QString fRed) { ui->widePlot->setRedFile(fRed); }