mirror of
				https://github.com/saitohirga/WSJT-X.git
				synced 2025-10-26 02:20:20 -04:00 
			
		
		
		
	Starting to add EME Echo mode. (Not yet functional!)
git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@5522 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
This commit is contained in:
		
							parent
							
								
									786e53efee
								
							
						
					
					
						commit
						39b3b6cb0e
					
				| @ -230,6 +230,8 @@ set (wsjtx_CXXSRCS | |||||||
|   signalmeter.cpp |   signalmeter.cpp | ||||||
|   plotter.cpp |   plotter.cpp | ||||||
|   widegraph.cpp |   widegraph.cpp | ||||||
|  |   echograph.cpp | ||||||
|  |   echoplot.cpp | ||||||
|   about.cpp |   about.cpp | ||||||
|   astro.cpp |   astro.cpp | ||||||
|   messageaveraging.cpp |   messageaveraging.cpp | ||||||
| @ -394,6 +396,7 @@ set (wsjtx_UISRCS | |||||||
|   mainwindow.ui |   mainwindow.ui | ||||||
|   about.ui |   about.ui | ||||||
|   astro.ui |   astro.ui | ||||||
|  |   echograph.ui | ||||||
|   messageaveraging.ui |   messageaveraging.ui | ||||||
|   widegraph.ui |   widegraph.ui | ||||||
|   logqso.ui |   logqso.ui | ||||||
|  | |||||||
| @ -13,6 +13,7 @@ namespace | |||||||
|       "JT9W-1", |       "JT9W-1", | ||||||
|       "JT4", |       "JT4", | ||||||
|       "WSPR", |       "WSPR", | ||||||
|  |       "Echo", | ||||||
|     }; |     }; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -20,6 +20,7 @@ public: | |||||||
|     JT9W_1, |     JT9W_1, | ||||||
|     JT4, |     JT4, | ||||||
|     WSPR, |     WSPR, | ||||||
|  |     Echo, | ||||||
|   }; |   }; | ||||||
| 
 | 
 | ||||||
|   explicit Modes (QObject * parent = nullptr); |   explicit Modes (QObject * parent = nullptr); | ||||||
|  | |||||||
							
								
								
									
										84
									
								
								echograph.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										84
									
								
								echograph.cpp
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,84 @@ | |||||||
|  | //#include "commons.h"
 | ||||||
|  | #include "echoplot.h" | ||||||
|  | #include "echograph.h" | ||||||
|  | #include "ui_echograph.h" | ||||||
|  | 
 | ||||||
|  | #define NSMAX2 1366 | ||||||
|  | 
 | ||||||
|  | EchoGraph::EchoGraph(QWidget *parent) : | ||||||
|  |   QDialog(parent), | ||||||
|  |   ui(new Ui::EchoGraph) | ||||||
|  | { | ||||||
|  |   ui->setupUi(this); | ||||||
|  |   this->setWindowFlags(Qt::Dialog); | ||||||
|  |   this->installEventFilter(parent);                   //Installing the filter
 | ||||||
|  |   ui->echoPlot->setCursor(Qt::CrossCursor); | ||||||
|  |   this->setMaximumWidth(2048); | ||||||
|  |   this->setMaximumHeight(880); | ||||||
|  |   ui->echoPlot->setMaximumHeight(800); | ||||||
|  | 
 | ||||||
|  | //Restore user's settings
 | ||||||
|  |   QString inifile(QApplication::applicationDirPath()); | ||||||
|  |   inifile += "/emecho.ini"; | ||||||
|  |   QSettings settings(inifile, QSettings::IniFormat); | ||||||
|  | 
 | ||||||
|  |   settings.beginGroup("EchoGraph"); | ||||||
|  |   ui->echoPlot->setPlotZero(settings.value("PlotZero", 0).toInt()); | ||||||
|  |   ui->echoPlot->setPlotGain(settings.value("PlotGain", 0).toInt()); | ||||||
|  |   ui->zeroSlider->setValue(ui->echoPlot->getPlotZero()); | ||||||
|  |   ui->gainSlider->setValue(ui->echoPlot->getPlotGain()); | ||||||
|  |   ui->smoothSpinBox->setValue(settings.value("Smooth",0).toInt()); | ||||||
|  |   ui->echoPlot->m_blue=settings.value("BlueCurve",false).toBool(); | ||||||
|  |   ui->cbBlue->setChecked(ui->echoPlot->m_blue); | ||||||
|  |   settings.endGroup(); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | EchoGraph::~EchoGraph() | ||||||
|  | { | ||||||
|  |   saveSettings(); | ||||||
|  |   delete ui; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void EchoGraph::saveSettings() | ||||||
|  | { | ||||||
|  | //Save user's settings
 | ||||||
|  |   QString inifile(QApplication::applicationDirPath()); | ||||||
|  |   inifile += "/emecho.ini"; | ||||||
|  |   QSettings settings(inifile, QSettings::IniFormat); | ||||||
|  | 
 | ||||||
|  |   settings.beginGroup("EchoGraph"); | ||||||
|  |   settings.setValue("PlotZero",ui->echoPlot->m_plotZero); | ||||||
|  |   settings.setValue("PlotGain",ui->echoPlot->m_plotGain); | ||||||
|  |   settings.setValue("Smooth",ui->echoPlot->m_smooth); | ||||||
|  |   settings.setValue("BlueCurve",ui->echoPlot->m_blue); | ||||||
|  |   settings.endGroup(); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void EchoGraph::plotSpec() | ||||||
|  | { | ||||||
|  |   ui->echoPlot->draw(); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void EchoGraph::on_smoothSpinBox_valueChanged(int n) | ||||||
|  | { | ||||||
|  |   ui->echoPlot->setSmooth(n); | ||||||
|  |   ui->echoPlot->draw(); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void EchoGraph::on_cbBlue_toggled(bool checked) | ||||||
|  | { | ||||||
|  |   ui->echoPlot->m_blue=checked; | ||||||
|  |   ui->echoPlot->draw(); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void EchoGraph::on_gainSlider_valueChanged(int value) | ||||||
|  | { | ||||||
|  |   ui->echoPlot->setPlotGain(value); | ||||||
|  |   ui->echoPlot->draw(); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void EchoGraph::on_zeroSlider_valueChanged(int value) | ||||||
|  | { | ||||||
|  |   ui->echoPlot->setPlotZero(value); | ||||||
|  |   ui->echoPlot->draw(); | ||||||
|  | } | ||||||
							
								
								
									
										31
									
								
								echograph.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								echograph.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,31 @@ | |||||||
|  | #ifndef ECHOGRAPH_H | ||||||
|  | #define ECHOGRAPH_H | ||||||
|  | #include <QDialog> | ||||||
|  | 
 | ||||||
|  | namespace Ui { | ||||||
|  |   class EchoGraph; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | class EchoGraph : public QDialog | ||||||
|  | { | ||||||
|  |   Q_OBJECT | ||||||
|  | 
 | ||||||
|  | public: | ||||||
|  |   explicit EchoGraph(QWidget *parent = 0); | ||||||
|  |   ~EchoGraph(); | ||||||
|  | 
 | ||||||
|  |   void   plotSpec(); | ||||||
|  |   void   saveSettings(); | ||||||
|  | 
 | ||||||
|  | private slots: | ||||||
|  |   void on_smoothSpinBox_valueChanged(int n); | ||||||
|  |   void on_cbBlue_toggled(bool checked); | ||||||
|  |   void on_gainSlider_valueChanged(int value); | ||||||
|  |   void on_zeroSlider_valueChanged(int value); | ||||||
|  | 
 | ||||||
|  | private: | ||||||
|  | 
 | ||||||
|  |   Ui::EchoGraph *ui; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | #endif // ECHOGRAPH_H
 | ||||||
							
								
								
									
										233
									
								
								echograph.ui
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										233
									
								
								echograph.ui
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,233 @@ | |||||||
|  | <?xml version="1.0" encoding="UTF-8"?> | ||||||
|  | <ui version="4.0"> | ||||||
|  |  <class>EchoGraph</class> | ||||||
|  |  <widget class="QDialog" name="EchoGraph"> | ||||||
|  |   <property name="geometry"> | ||||||
|  |    <rect> | ||||||
|  |     <x>0</x> | ||||||
|  |     <y>0</y> | ||||||
|  |     <width>625</width> | ||||||
|  |     <height>336</height> | ||||||
|  |    </rect> | ||||||
|  |   </property> | ||||||
|  |   <property name="sizePolicy"> | ||||||
|  |    <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> | ||||||
|  |     <horstretch>0</horstretch> | ||||||
|  |     <verstretch>0</verstretch> | ||||||
|  |    </sizepolicy> | ||||||
|  |   </property> | ||||||
|  |   <property name="minimumSize"> | ||||||
|  |    <size> | ||||||
|  |     <width>570</width> | ||||||
|  |     <height>0</height> | ||||||
|  |    </size> | ||||||
|  |   </property> | ||||||
|  |   <property name="windowTitle"> | ||||||
|  |    <string>Echo Graph</string> | ||||||
|  |   </property> | ||||||
|  |   <layout class="QVBoxLayout" name="verticalLayout_2"> | ||||||
|  |    <property name="spacing"> | ||||||
|  |     <number>2</number> | ||||||
|  |    </property> | ||||||
|  |    <property name="topMargin"> | ||||||
|  |     <number>2</number> | ||||||
|  |    </property> | ||||||
|  |    <property name="bottomMargin"> | ||||||
|  |     <number>2</number> | ||||||
|  |    </property> | ||||||
|  |    <item> | ||||||
|  |     <layout class="QVBoxLayout" name="verticalLayout"> | ||||||
|  |      <property name="spacing"> | ||||||
|  |       <number>2</number> | ||||||
|  |      </property> | ||||||
|  |      <item> | ||||||
|  |       <widget class="EPlotter" name="echoPlot"> | ||||||
|  |        <property name="enabled"> | ||||||
|  |         <bool>true</bool> | ||||||
|  |        </property> | ||||||
|  |        <property name="sizePolicy"> | ||||||
|  |         <sizepolicy hsizetype="Expanding" vsizetype="Expanding"> | ||||||
|  |          <horstretch>0</horstretch> | ||||||
|  |          <verstretch>0</verstretch> | ||||||
|  |         </sizepolicy> | ||||||
|  |        </property> | ||||||
|  |        <property name="minimumSize"> | ||||||
|  |         <size> | ||||||
|  |          <width>273</width> | ||||||
|  |          <height>200</height> | ||||||
|  |         </size> | ||||||
|  |        </property> | ||||||
|  |        <property name="frameShape"> | ||||||
|  |         <enum>QFrame::StyledPanel</enum> | ||||||
|  |        </property> | ||||||
|  |        <property name="frameShadow"> | ||||||
|  |         <enum>QFrame::Sunken</enum> | ||||||
|  |        </property> | ||||||
|  |        <property name="lineWidth"> | ||||||
|  |         <number>1</number> | ||||||
|  |        </property> | ||||||
|  |       </widget> | ||||||
|  |      </item> | ||||||
|  |      <item> | ||||||
|  |       <layout class="QHBoxLayout" name="horizontalLayout_3"> | ||||||
|  |        <property name="spacing"> | ||||||
|  |         <number>6</number> | ||||||
|  |        </property> | ||||||
|  |        <item> | ||||||
|  |         <spacer name="horizontalSpacer_2"> | ||||||
|  |          <property name="orientation"> | ||||||
|  |           <enum>Qt::Horizontal</enum> | ||||||
|  |          </property> | ||||||
|  |          <property name="sizeType"> | ||||||
|  |           <enum>QSizePolicy::Expanding</enum> | ||||||
|  |          </property> | ||||||
|  |          <property name="sizeHint" stdset="0"> | ||||||
|  |           <size> | ||||||
|  |            <width>20</width> | ||||||
|  |            <height>20</height> | ||||||
|  |           </size> | ||||||
|  |          </property> | ||||||
|  |         </spacer> | ||||||
|  |        </item> | ||||||
|  |        <item> | ||||||
|  |         <widget class="QLabel" name="label_4"> | ||||||
|  |          <property name="text"> | ||||||
|  |           <string>Gain</string> | ||||||
|  |          </property> | ||||||
|  |         </widget> | ||||||
|  |        </item> | ||||||
|  |        <item> | ||||||
|  |         <widget class="QSlider" name="gainSlider"> | ||||||
|  |          <property name="minimum"> | ||||||
|  |           <number>-20</number> | ||||||
|  |          </property> | ||||||
|  |          <property name="maximum"> | ||||||
|  |           <number>20</number> | ||||||
|  |          </property> | ||||||
|  |          <property name="orientation"> | ||||||
|  |           <enum>Qt::Horizontal</enum> | ||||||
|  |          </property> | ||||||
|  |         </widget> | ||||||
|  |        </item> | ||||||
|  |        <item> | ||||||
|  |         <spacer name="horizontalSpacer_7"> | ||||||
|  |          <property name="orientation"> | ||||||
|  |           <enum>Qt::Horizontal</enum> | ||||||
|  |          </property> | ||||||
|  |          <property name="sizeType"> | ||||||
|  |           <enum>QSizePolicy::Preferred</enum> | ||||||
|  |          </property> | ||||||
|  |          <property name="sizeHint" stdset="0"> | ||||||
|  |           <size> | ||||||
|  |            <width>20</width> | ||||||
|  |            <height>20</height> | ||||||
|  |           </size> | ||||||
|  |          </property> | ||||||
|  |         </spacer> | ||||||
|  |        </item> | ||||||
|  |        <item> | ||||||
|  |         <widget class="QLabel" name="label"> | ||||||
|  |          <property name="text"> | ||||||
|  |           <string>Zero</string> | ||||||
|  |          </property> | ||||||
|  |         </widget> | ||||||
|  |        </item> | ||||||
|  |        <item> | ||||||
|  |         <widget class="QSlider" name="zeroSlider"> | ||||||
|  |          <property name="minimum"> | ||||||
|  |           <number>-100</number> | ||||||
|  |          </property> | ||||||
|  |          <property name="maximum"> | ||||||
|  |           <number>100</number> | ||||||
|  |          </property> | ||||||
|  |          <property name="orientation"> | ||||||
|  |           <enum>Qt::Horizontal</enum> | ||||||
|  |          </property> | ||||||
|  |         </widget> | ||||||
|  |        </item> | ||||||
|  |        <item> | ||||||
|  |         <spacer name="horizontalSpacer"> | ||||||
|  |          <property name="orientation"> | ||||||
|  |           <enum>Qt::Horizontal</enum> | ||||||
|  |          </property> | ||||||
|  |          <property name="sizeType"> | ||||||
|  |           <enum>QSizePolicy::Preferred</enum> | ||||||
|  |          </property> | ||||||
|  |          <property name="sizeHint" stdset="0"> | ||||||
|  |           <size> | ||||||
|  |            <width>20</width> | ||||||
|  |            <height>20</height> | ||||||
|  |           </size> | ||||||
|  |          </property> | ||||||
|  |         </spacer> | ||||||
|  |        </item> | ||||||
|  |        <item> | ||||||
|  |         <widget class="QLabel" name="label_2"> | ||||||
|  |          <property name="text"> | ||||||
|  |           <string>Smooth</string> | ||||||
|  |          </property> | ||||||
|  |         </widget> | ||||||
|  |        </item> | ||||||
|  |        <item> | ||||||
|  |         <widget class="QSpinBox" name="smoothSpinBox"> | ||||||
|  |          <property name="maximum"> | ||||||
|  |           <number>20</number> | ||||||
|  |          </property> | ||||||
|  |         </widget> | ||||||
|  |        </item> | ||||||
|  |        <item> | ||||||
|  |         <spacer name="horizontalSpacer_3"> | ||||||
|  |          <property name="orientation"> | ||||||
|  |           <enum>Qt::Horizontal</enum> | ||||||
|  |          </property> | ||||||
|  |          <property name="sizeType"> | ||||||
|  |           <enum>QSizePolicy::Preferred</enum> | ||||||
|  |          </property> | ||||||
|  |          <property name="sizeHint" stdset="0"> | ||||||
|  |           <size> | ||||||
|  |            <width>20</width> | ||||||
|  |            <height>20</height> | ||||||
|  |           </size> | ||||||
|  |          </property> | ||||||
|  |         </spacer> | ||||||
|  |        </item> | ||||||
|  |        <item> | ||||||
|  |         <widget class="QCheckBox" name="cbBlue"> | ||||||
|  |          <property name="text"> | ||||||
|  |           <string>Blue</string> | ||||||
|  |          </property> | ||||||
|  |         </widget> | ||||||
|  |        </item> | ||||||
|  |        <item> | ||||||
|  |         <spacer name="horizontalSpacer_5"> | ||||||
|  |          <property name="orientation"> | ||||||
|  |           <enum>Qt::Horizontal</enum> | ||||||
|  |          </property> | ||||||
|  |          <property name="sizeType"> | ||||||
|  |           <enum>QSizePolicy::Expanding</enum> | ||||||
|  |          </property> | ||||||
|  |          <property name="sizeHint" stdset="0"> | ||||||
|  |           <size> | ||||||
|  |            <width>20</width> | ||||||
|  |            <height>20</height> | ||||||
|  |           </size> | ||||||
|  |          </property> | ||||||
|  |         </spacer> | ||||||
|  |        </item> | ||||||
|  |       </layout> | ||||||
|  |      </item> | ||||||
|  |     </layout> | ||||||
|  |    </item> | ||||||
|  |   </layout> | ||||||
|  |  </widget> | ||||||
|  |  <customwidgets> | ||||||
|  |   <customwidget> | ||||||
|  |    <class>EPlotter</class> | ||||||
|  |    <extends>QFrame</extends> | ||||||
|  |    <header>plotter.h</header> | ||||||
|  |    <container>1</container> | ||||||
|  |   </customwidget> | ||||||
|  |  </customwidgets> | ||||||
|  |  <resources/> | ||||||
|  |  <connections/> | ||||||
|  | </ui> | ||||||
							
								
								
									
										292
									
								
								echoplot.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										292
									
								
								echoplot.cpp
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,292 @@ | |||||||
|  | #include "echoplot.h" | ||||||
|  | //#include "commons.h"
 | ||||||
|  | #include <math.h> | ||||||
|  | #include <QDebug> | ||||||
|  | #include "moc_echoplot.cpp" | ||||||
|  | 
 | ||||||
|  | #define MAX_SCREENSIZE 2048 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | EPlotter::EPlotter(QWidget *parent) :                  //EPlotter Constructor
 | ||||||
|  |   QFrame(parent) | ||||||
|  | { | ||||||
|  |   setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); | ||||||
|  |   setFocusPolicy(Qt::StrongFocus); | ||||||
|  |   setAttribute(Qt::WA_PaintOnScreen,false); | ||||||
|  |   setAutoFillBackground(false); | ||||||
|  |   setAttribute(Qt::WA_OpaquePaintEvent, false); | ||||||
|  |   setAttribute(Qt::WA_NoSystemBackground, true); | ||||||
|  | 
 | ||||||
|  |   m_StartFreq = -200; | ||||||
|  |   m_fftBinWidth=48000.0/131072.0; | ||||||
|  |   m_fSpan=1000.0; | ||||||
|  |   m_hdivs = HORZ_DIVS; | ||||||
|  |   m_Running = false; | ||||||
|  |   m_paintEventBusy=false; | ||||||
|  |   m_2DPixmap = QPixmap(0,0); | ||||||
|  |   m_ScalePixmap = QPixmap(0,0); | ||||||
|  |   m_OverlayPixmap = QPixmap(0,0); | ||||||
|  |   m_Size = QSize(0,0); | ||||||
|  |   m_TxFreq = 1500; | ||||||
|  |   m_line = 0; | ||||||
|  |   m_dBStepSize=10; | ||||||
|  |   m_Percent2DScreen = 89;	//percent of screen used for 2D display
 | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | EPlotter::~EPlotter() { }                                      // Destructor
 | ||||||
|  | 
 | ||||||
|  | QSize EPlotter::minimumSizeHint() const | ||||||
|  | { | ||||||
|  |   return QSize(50, 50); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | QSize EPlotter::sizeHint() const | ||||||
|  | { | ||||||
|  |   return QSize(180, 180); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void EPlotter::resizeEvent(QResizeEvent* )                    //resizeEvent()
 | ||||||
|  | { | ||||||
|  |   if(!size().isValid()) return; | ||||||
|  |   if( m_Size != size() ) {  //if changed, resize pixmaps to new screensize
 | ||||||
|  |     m_Size = size(); | ||||||
|  |     m_w = m_Size.width(); | ||||||
|  |     m_h = m_Size.height(); | ||||||
|  |     m_h1 = (100-m_Percent2DScreen)*(m_Size.height())/100; | ||||||
|  |     m_h2 = (m_Percent2DScreen)*(m_Size.height())/100; | ||||||
|  | 
 | ||||||
|  |     m_2DPixmap = QPixmap(m_Size.width(), m_h2); | ||||||
|  |     m_2DPixmap.fill(Qt::black); | ||||||
|  |     m_OverlayPixmap = QPixmap(m_Size.width(), m_h2); | ||||||
|  |     m_OverlayPixmap.fill(Qt::black); | ||||||
|  | 
 | ||||||
|  |     m_2DPixmap.fill(Qt::black); | ||||||
|  |     m_ScalePixmap = QPixmap(m_w,30); | ||||||
|  |     m_ScalePixmap.fill(Qt::white); | ||||||
|  | 
 | ||||||
|  |     m_fSpan=m_w*m_fftBinWidth; | ||||||
|  |     m_StartFreq=50 * int((-0.5*m_fSpan)/50.0 - 0.5); | ||||||
|  |   } | ||||||
|  |   DrawOverlay(); | ||||||
|  |   draw(); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void EPlotter::paintEvent(QPaintEvent *)                    // paintEvent()
 | ||||||
|  | { | ||||||
|  |   if(m_paintEventBusy) return; | ||||||
|  |   m_paintEventBusy=true; | ||||||
|  |   QPainter painter(this); | ||||||
|  |   painter.drawPixmap(0,0,m_ScalePixmap); | ||||||
|  |   painter.drawPixmap(0,m_h1,m_2DPixmap); | ||||||
|  |   m_paintEventBusy=false; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void EPlotter::draw()                                       //draw()
 | ||||||
|  | { | ||||||
|  |   int i,j,y; | ||||||
|  |   float blue[2000],red[2000]; | ||||||
|  |   float gain = pow(10.0,(m_plotGain/20.0)); | ||||||
|  | 
 | ||||||
|  |   if(m_2DPixmap.size().width()==0) return; | ||||||
|  |   QPainter painter2D(&m_2DPixmap); | ||||||
|  |   QRect tmp(0,0,m_w,m_h2); | ||||||
|  |   painter2D.fillRect(tmp,Qt::black); | ||||||
|  | /*
 | ||||||
|  |   if(datcom_.nclearave==0) { | ||||||
|  |     QPoint LineBuf[MAX_SCREENSIZE]; | ||||||
|  |     QPen penBlue(QColor(0,255,255),1); | ||||||
|  |     QPen penRed(Qt::red,1); | ||||||
|  |     j=0; | ||||||
|  |     int i0=1000 + int(m_StartFreq/m_fftBinWidth); | ||||||
|  |     for(i=0; i<2000; i++) { | ||||||
|  |       blue[i]=datcom_.blue[i]; | ||||||
|  |       red[i]=datcom_.red[i]; | ||||||
|  |     } | ||||||
|  |     if(m_smooth>0) { | ||||||
|  |       for(i=0; i<m_smooth; i++) { | ||||||
|  |         int n2000=2000; | ||||||
|  |         smo121_(blue,&n2000); | ||||||
|  |         smo121_(red,&n2000); | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     if(m_blue) { | ||||||
|  |       painter2D.setPen(penBlue); | ||||||
|  |       j=0; | ||||||
|  |       for(i=0; i<m_w; i++) { | ||||||
|  |         y = 0.9*m_h2 - gain*(m_h/10.0)*(blue[i0+i]-1.0) - m_plotZero; | ||||||
|  |         LineBuf[j].setX(i); | ||||||
|  |         LineBuf[j].setY(y); | ||||||
|  |         j++; | ||||||
|  |       } | ||||||
|  |       painter2D.drawPolyline(LineBuf,j); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     painter2D.setPen(penRed); | ||||||
|  |     j=0; | ||||||
|  |     for(int i=0; i<m_w; i++) { | ||||||
|  |       y = 0.9*m_h2 - gain*(m_h/10.0)*(red[i0+i]-1.0) - m_plotZero; | ||||||
|  |       LineBuf[j].setX(i); | ||||||
|  |       LineBuf[j].setY(y); | ||||||
|  |       j++; | ||||||
|  |     } | ||||||
|  |     painter2D.drawPolyline(LineBuf,j); | ||||||
|  |   } | ||||||
|  |   */ | ||||||
|  |   update();                              //trigger a new paintEvent
 | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void EPlotter::DrawOverlay()                                 //DrawOverlay()
 | ||||||
|  | { | ||||||
|  |   if(m_OverlayPixmap.isNull() or m_2DPixmap.isNull()) return; | ||||||
|  | //  int w = m_WaterfallPixmap.width();
 | ||||||
|  |   int x,y; | ||||||
|  | 
 | ||||||
|  |   QRect rect; | ||||||
|  |   QPainter painter(&m_OverlayPixmap); | ||||||
|  |   painter.initFrom(this); | ||||||
|  |   QLinearGradient gradient(0, 0, 0 ,m_h2);  //fill background with gradient
 | ||||||
|  |   gradient.setColorAt(1, Qt::black); | ||||||
|  |   gradient.setColorAt(0, Qt::darkBlue); | ||||||
|  |   painter.setBrush(gradient); | ||||||
|  |   painter.drawRect(0, 0, m_w, m_h2); | ||||||
|  |   painter.setBrush(Qt::SolidPattern); | ||||||
|  | 
 | ||||||
|  |   m_fSpan = m_w*m_fftBinWidth; | ||||||
|  |   m_freqPerDiv=20; | ||||||
|  |   if(m_fSpan>250) m_freqPerDiv=50; | ||||||
|  |   float pixPerHdiv = m_freqPerDiv/m_fftBinWidth; | ||||||
|  |   float pixPerVdiv = float(m_h2)/float(VERT_DIVS); | ||||||
|  | 
 | ||||||
|  |   m_hdivs = m_w*m_fftBinWidth/m_freqPerDiv + 0.9999; | ||||||
|  | 
 | ||||||
|  |   painter.setPen(QPen(Qt::white, 1,Qt::DotLine)); | ||||||
|  |   for( int i=1; i<m_hdivs; i++)                   //draw vertical grids
 | ||||||
|  |   { | ||||||
|  |     x=int(i*pixPerHdiv); | ||||||
|  |     painter.drawLine(x,0,x,m_h2); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   for( int i=1; i<VERT_DIVS; i++)                 //draw horizontal grids
 | ||||||
|  |   { | ||||||
|  |     y = (int)( (float)i*pixPerVdiv ); | ||||||
|  |     painter.drawLine(0,y,m_w,y); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   QRect rect0; | ||||||
|  |   QPainter painter0(&m_ScalePixmap); | ||||||
|  |   painter0.initFrom(this); | ||||||
|  | 
 | ||||||
|  |   //create Font to use for scales
 | ||||||
|  |   QFont Font("Arial"); | ||||||
|  |   Font.setPointSize(12); | ||||||
|  |   QFontMetrics metrics(Font); | ||||||
|  |   Font.setWeight(QFont::Normal); | ||||||
|  |   painter0.setFont(Font); | ||||||
|  |   painter0.setPen(Qt::black); | ||||||
|  | 
 | ||||||
|  |   m_ScalePixmap.fill(Qt::white); | ||||||
|  |   painter0.drawRect(0, 0, m_w, 30); | ||||||
|  | 
 | ||||||
|  | //draw tick marks on upper scale
 | ||||||
|  |   for( int i=1; i<m_hdivs; i++) {         //major ticks
 | ||||||
|  |     x = (int)( (float)i*pixPerHdiv ); | ||||||
|  |     painter0.drawLine(x,18,x,30); | ||||||
|  |   } | ||||||
|  |   int minor=5; | ||||||
|  |   if(m_freqPerDiv==200) minor=4; | ||||||
|  |   for( int i=1; i<minor*m_hdivs; i++) {   //minor ticks
 | ||||||
|  |     x = i*pixPerHdiv/minor; | ||||||
|  |     painter0.drawLine(x,24,x,30); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  | //draw frequency values
 | ||||||
|  |   MakeFrequencyStrs(); | ||||||
|  |   for( int i=0; i<=m_hdivs; i++) { | ||||||
|  |     if(0==i) { | ||||||
|  |       //left justify the leftmost text
 | ||||||
|  |       x = (int)( (float)i*pixPerHdiv); | ||||||
|  |       rect0.setRect(x,0, (int)pixPerHdiv, 20); | ||||||
|  |       painter0.drawText(rect0, Qt::AlignLeft|Qt::AlignVCenter, | ||||||
|  |                        m_HDivText[i]); | ||||||
|  |     } | ||||||
|  |     else if(m_hdivs == i) { | ||||||
|  |       //right justify the rightmost text
 | ||||||
|  |       x = (int)( (float)i*pixPerHdiv - pixPerHdiv); | ||||||
|  |       rect0.setRect(x,0, (int)pixPerHdiv, 20); | ||||||
|  |       painter0.drawText(rect0, Qt::AlignRight|Qt::AlignVCenter, | ||||||
|  |                        m_HDivText[i]); | ||||||
|  |     } else { | ||||||
|  |       //center justify the rest of the text
 | ||||||
|  |       x = (int)( (float)i*pixPerHdiv - pixPerHdiv/2); | ||||||
|  |       rect0.setRect(x,0, (int)pixPerHdiv, 20); | ||||||
|  |       painter0.drawText(rect0, Qt::AlignHCenter|Qt::AlignVCenter, | ||||||
|  |                        m_HDivText[i]); | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   QPen pen1(Qt::red, 3);                         //Mark Tx Freq with red tick
 | ||||||
|  |   painter0.setPen(pen1); | ||||||
|  |   x = XfromFreq(m_TxFreq); | ||||||
|  |   painter0.drawLine(x,17,x,30); | ||||||
|  | 
 | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void EPlotter::MakeFrequencyStrs()                       //MakeFrequencyStrs
 | ||||||
|  | { | ||||||
|  |   float freq; | ||||||
|  |   for(int i=0; i<=m_hdivs; i++) { | ||||||
|  |     freq=m_StartFreq + i*m_freqPerDiv; | ||||||
|  |     m_HDivText[i].setNum((int)freq); | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | int EPlotter::XfromFreq(float f)                               //XfromFreq()
 | ||||||
|  | { | ||||||
|  |   int x = (int) m_w * (f - m_StartFreq)/m_fSpan; | ||||||
|  |   if(x<0 ) return 0; | ||||||
|  |   if(x>m_w) return m_w; | ||||||
|  |   return x; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | float EPlotter::FreqfromX(int x)                               //FreqfromX()
 | ||||||
|  | { | ||||||
|  |   return float(m_StartFreq + x*m_fftBinWidth); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void EPlotter::SetRunningState(bool running)              //SetRunningState()
 | ||||||
|  | { | ||||||
|  |   m_Running = running; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void EPlotter::setPlotZero(int plotZero)                  //setPlotZero()
 | ||||||
|  | { | ||||||
|  |   m_plotZero=plotZero; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | int EPlotter::getPlotZero()                               //getPlotZero()
 | ||||||
|  | { | ||||||
|  |   return m_plotZero; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void EPlotter::setPlotGain(int plotGain)                  //setPlotGain()
 | ||||||
|  | { | ||||||
|  |   m_plotGain=plotGain; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | int EPlotter::getPlotGain()                               //getPlotGain()
 | ||||||
|  | { | ||||||
|  |   return m_plotGain; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void EPlotter::setSmooth(int n)                               //setSmooth()
 | ||||||
|  | { | ||||||
|  |   m_smooth=n; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | int EPlotter::getSmooth()                                    //getSmooth()
 | ||||||
|  | { | ||||||
|  |   return m_smooth; | ||||||
|  | } | ||||||
|  | int EPlotter::plotWidth(){return m_2DPixmap.width();} | ||||||
|  | void EPlotter::UpdateOverlay() {DrawOverlay();} | ||||||
							
								
								
									
										92
									
								
								echoplot.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										92
									
								
								echoplot.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,92 @@ | |||||||
|  | ///////////////////////////////////////////////////////////////////////////
 | ||||||
|  | // Some code in this file and accompanying files is based on work by
 | ||||||
|  | // Moe Wheatley, AE4Y, released under the "Simplified BSD License".
 | ||||||
|  | // For more details see the accompanying file LICENSE_WHEATLEY.TXT
 | ||||||
|  | ///////////////////////////////////////////////////////////////////////////
 | ||||||
|  | 
 | ||||||
|  | #ifndef EPLOTTER_H | ||||||
|  | #define EPLOTTER_H | ||||||
|  | 
 | ||||||
|  | #include <QtWidgets> | ||||||
|  | #include <QFrame> | ||||||
|  | #include <QImage> | ||||||
|  | #include <cstring> | ||||||
|  | 
 | ||||||
|  | #define VERT_DIVS 7	//specify grid screen divisions
 | ||||||
|  | #define HORZ_DIVS 20 | ||||||
|  | 
 | ||||||
|  | class EPlotter : public QFrame | ||||||
|  | { | ||||||
|  |   Q_OBJECT | ||||||
|  | public: | ||||||
|  |   explicit EPlotter(QWidget *parent = 0); | ||||||
|  |   ~EPlotter(); | ||||||
|  | 
 | ||||||
|  |   QSize minimumSizeHint() const; | ||||||
|  |   QSize sizeHint() const; | ||||||
|  |   QColor  m_ColorTbl[256]; | ||||||
|  |   float   m_fSpan; | ||||||
|  |   qint32  m_TxFreq; | ||||||
|  |   qint32  m_w; | ||||||
|  |   qint32  m_plotZero; | ||||||
|  |   qint32  m_plotGain; | ||||||
|  |   qint32  m_smooth; | ||||||
|  |   bool    m_blue; | ||||||
|  | 
 | ||||||
|  |   void draw();		              //Update the waterfall
 | ||||||
|  |   void SetRunningState(bool running); | ||||||
|  |   void setPlotZero(int plotZero); | ||||||
|  |   int  getPlotZero(); | ||||||
|  |   void setPlotGain(int plotGain); | ||||||
|  |   int  getPlotGain(); | ||||||
|  |   int  plotWidth(); | ||||||
|  |   void UpdateOverlay(); | ||||||
|  |   void DrawOverlay(); | ||||||
|  |   void setSmooth(int n); | ||||||
|  |   int  getSmooth(); | ||||||
|  | 
 | ||||||
|  | //  void SetPercent2DScreen(int percent){m_Percent2DScreen=percent;}
 | ||||||
|  | 
 | ||||||
|  | protected: | ||||||
|  |   //re-implemented widget event handlers
 | ||||||
|  |   void paintEvent(QPaintEvent *event); | ||||||
|  |   void resizeEvent(QResizeEvent* event); | ||||||
|  | 
 | ||||||
|  | private: | ||||||
|  | 
 | ||||||
|  |   void MakeFrequencyStrs(); | ||||||
|  |   int XfromFreq(float f); | ||||||
|  |   float FreqfromX(int x); | ||||||
|  |   qint64 RoundFreq(qint64 freq, int resolution); | ||||||
|  | 
 | ||||||
|  |   QPixmap m_2DPixmap; | ||||||
|  |   QPixmap m_ScalePixmap; | ||||||
|  |   QPixmap m_OverlayPixmap; | ||||||
|  |   QSize   m_Size; | ||||||
|  |   QString m_Str; | ||||||
|  |   QString m_HDivText[483]; | ||||||
|  | 
 | ||||||
|  |   double  m_fftBinWidth; | ||||||
|  | 
 | ||||||
|  |   qint64  m_StartFreq; | ||||||
|  | 
 | ||||||
|  |   qint32  m_dBStepSize; | ||||||
|  |   qint32  m_hdivs; | ||||||
|  |   qint32  m_line; | ||||||
|  |   qint32  m_freqPerDiv; | ||||||
|  |   qint32  m_Percent2DScreen; | ||||||
|  |   qint32  m_h; | ||||||
|  |   qint32  m_h1; | ||||||
|  |   qint32  m_h2; | ||||||
|  | 
 | ||||||
|  |   bool    m_Running; | ||||||
|  |   bool    m_paintEventBusy; | ||||||
|  | 
 | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | extern "C" { | ||||||
|  | //--------------------------------------------------- C and Fortran routines
 | ||||||
|  | 
 | ||||||
|  | void smo121_(float x[], int* npts); | ||||||
|  | } | ||||||
|  | #endif // EPLOTTER_H
 | ||||||
| @ -20,6 +20,8 @@ | |||||||
| #include "revision_utils.hpp" | #include "revision_utils.hpp" | ||||||
| #include "soundout.h" | #include "soundout.h" | ||||||
| #include "plotter.h" | #include "plotter.h" | ||||||
|  | #include "echoplot.h" | ||||||
|  | #include "echograph.h" | ||||||
| #include "about.h" | #include "about.h" | ||||||
| #include "astro.h" | #include "astro.h" | ||||||
| #include "messageaveraging.h" | #include "messageaveraging.h" | ||||||
| @ -72,6 +74,7 @@ MainWindow::MainWindow(bool multiple, QSettings * settings, QSharedMemory *shdme | |||||||
|   m_config {settings, this}, |   m_config {settings, this}, | ||||||
|   m_WSPR_band_hopping {settings, &m_config, this}, |   m_WSPR_band_hopping {settings, &m_config, this}, | ||||||
|   m_wideGraph (new WideGraph (settings)), |   m_wideGraph (new WideGraph (settings)), | ||||||
|  |   m_echoGraph (new EchoGraph), | ||||||
|   m_logDlg (new LogQSO (program_title (), settings, this)), |   m_logDlg (new LogQSO (program_title (), settings, this)), | ||||||
|   m_dialFreq {std::numeric_limits<Radio::Frequency>::max ()}, |   m_dialFreq {std::numeric_limits<Radio::Frequency>::max ()}, | ||||||
|   m_detector (RX_SAMPLE_RATE, NTMAX, 6912 / 2, downSampleFactor), |   m_detector (RX_SAMPLE_RATE, NTMAX, 6912 / 2, downSampleFactor), | ||||||
| @ -218,6 +221,7 @@ MainWindow::MainWindow(bool multiple, QSettings * settings, QSharedMemory *shdme | |||||||
|   ui->actionJT4->setActionGroup(modeGroup); |   ui->actionJT4->setActionGroup(modeGroup); | ||||||
|   ui->actionWSPR_2->setActionGroup(modeGroup); |   ui->actionWSPR_2->setActionGroup(modeGroup); | ||||||
|   ui->actionWSPR_15->setActionGroup(modeGroup); |   ui->actionWSPR_15->setActionGroup(modeGroup); | ||||||
|  |   ui->actionEcho->setActionGroup(modeGroup); | ||||||
| 
 | 
 | ||||||
|   QActionGroup* saveGroup = new QActionGroup(this); |   QActionGroup* saveGroup = new QActionGroup(this); | ||||||
|   ui->actionNone->setActionGroup(saveGroup); |   ui->actionNone->setActionGroup(saveGroup); | ||||||
| @ -1276,6 +1280,11 @@ void MainWindow::on_actionWide_Waterfall_triggered()      //Display Waterfalls | |||||||
|   m_wideGraph->show(); |   m_wideGraph->show(); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | void MainWindow::on_actionEcho_Graph_triggered() | ||||||
|  | { | ||||||
|  |   m_echoGraph->show(); | ||||||
|  | } | ||||||
|  | 
 | ||||||
| void MainWindow::on_actionAstronomical_data_triggered() | void MainWindow::on_actionAstronomical_data_triggered() | ||||||
| { | { | ||||||
|   if (!m_astroWidget) |   if (!m_astroWidget) | ||||||
| @ -3159,6 +3168,13 @@ void MainWindow::on_actionWSPR_15_triggered() | |||||||
|   switch_mode (Modes::WSPR); |   switch_mode (Modes::WSPR); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | void MainWindow::on_actionEcho_triggered() | ||||||
|  | { | ||||||
|  |   m_mode="Echo"; | ||||||
|  |   switch_mode(Modes::Echo); | ||||||
|  |   if(!m_echoGraph->isVisible()) m_echoGraph->show(); | ||||||
|  | } | ||||||
|  | 
 | ||||||
| void MainWindow::switch_mode (Mode mode) | void MainWindow::switch_mode (Mode mode) | ||||||
| { | { | ||||||
|   auto f = m_dialFreq; |   auto f = m_dialFreq; | ||||||
| @ -4306,3 +4322,4 @@ void MainWindow::on_tabWidget_currentChanged (int new_value) | |||||||
|     m_nonWSPRTab = new_value; |     m_nonWSPRTab = new_value; | ||||||
|   } |   } | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | |||||||
| @ -54,6 +54,7 @@ class QSettings; | |||||||
| class QLineEdit; | class QLineEdit; | ||||||
| class QFont; | class QFont; | ||||||
| class QHostInfo; | class QHostInfo; | ||||||
|  | class EchoGraph; | ||||||
| class WideGraph; | class WideGraph; | ||||||
| class LogQSO; | class LogQSO; | ||||||
| class Transceiver; | class Transceiver; | ||||||
| @ -230,6 +231,10 @@ private slots: | |||||||
|   void on_pbTxNext_clicked(bool b); |   void on_pbTxNext_clicked(bool b); | ||||||
|   void on_tabWidget_currentChanged (int); |   void on_tabWidget_currentChanged (int); | ||||||
| 
 | 
 | ||||||
|  |   void on_actionEcho_Graph_triggered(); | ||||||
|  | 
 | ||||||
|  |   void on_actionEcho_triggered(); | ||||||
|  | 
 | ||||||
| private: | private: | ||||||
|   Q_SIGNAL void initializeAudioOutputStream (QAudioDeviceInfo, |   Q_SIGNAL void initializeAudioOutputStream (QAudioDeviceInfo, | ||||||
|       unsigned channels, unsigned msBuffered) const; |       unsigned channels, unsigned msBuffered) const; | ||||||
| @ -266,6 +271,7 @@ private: | |||||||
|   QMessageBox m_rigErrorMessageBox; |   QMessageBox m_rigErrorMessageBox; | ||||||
| 
 | 
 | ||||||
|   QScopedPointer<WideGraph> m_wideGraph; |   QScopedPointer<WideGraph> m_wideGraph; | ||||||
|  |   QScopedPointer<EchoGraph> m_echoGraph; | ||||||
|   QScopedPointer<LogQSO> m_logDlg; |   QScopedPointer<LogQSO> m_logDlg; | ||||||
|   QScopedPointer<Astro> m_astroWidget; |   QScopedPointer<Astro> m_astroWidget; | ||||||
|   QScopedPointer<QTextEdit> m_shortcuts; |   QScopedPointer<QTextEdit> m_shortcuts; | ||||||
|  | |||||||
| @ -910,7 +910,7 @@ | |||||||
|              <string>Check to add 2.5 s to expected propagation delay.</string> |              <string>Check to add 2.5 s to expected propagation delay.</string> | ||||||
|             </property> |             </property> | ||||||
|             <property name="text"> |             <property name="text"> | ||||||
|              <string>EME</string> |              <string>EME delay</string> | ||||||
|             </property> |             </property> | ||||||
|            </widget> |            </widget> | ||||||
|           </item> |           </item> | ||||||
| @ -2736,6 +2736,7 @@ QLabel[oob="true"] { | |||||||
|     <addaction name="actionWide_Waterfall"/> |     <addaction name="actionWide_Waterfall"/> | ||||||
|     <addaction name="actionAstronomical_data"/> |     <addaction name="actionAstronomical_data"/> | ||||||
|     <addaction name="actionMessage_averaging"/> |     <addaction name="actionMessage_averaging"/> | ||||||
|  |     <addaction name="actionEcho_Graph"/> | ||||||
|    </widget> |    </widget> | ||||||
|    <widget class="QMenu" name="menuDecode"> |    <widget class="QMenu" name="menuDecode"> | ||||||
|     <property name="title"> |     <property name="title"> | ||||||
| @ -2779,6 +2780,7 @@ QLabel[oob="true"] { | |||||||
|     <addaction name="actionJT4"/> |     <addaction name="actionJT4"/> | ||||||
|     <addaction name="actionWSPR_2"/> |     <addaction name="actionWSPR_2"/> | ||||||
|     <addaction name="actionWSPR_15"/> |     <addaction name="actionWSPR_15"/> | ||||||
|  |     <addaction name="actionEcho"/> | ||||||
|    </widget> |    </widget> | ||||||
|    <addaction name="menuFile"/> |    <addaction name="menuFile"/> | ||||||
|    <addaction name="menuView"/> |    <addaction name="menuView"/> | ||||||
| @ -3183,6 +3185,25 @@ QLabel[oob="true"] { | |||||||
|     <string>WSPR-15</string> |     <string>WSPR-15</string> | ||||||
|    </property> |    </property> | ||||||
|   </action> |   </action> | ||||||
|  |   <action name="actionEcho_Graph"> | ||||||
|  |    <property name="text"> | ||||||
|  |     <string>Echo Graph</string> | ||||||
|  |    </property> | ||||||
|  |    <property name="shortcut"> | ||||||
|  |     <string>F8</string> | ||||||
|  |    </property> | ||||||
|  |   </action> | ||||||
|  |   <action name="actionEcho"> | ||||||
|  |    <property name="checkable"> | ||||||
|  |     <bool>true</bool> | ||||||
|  |    </property> | ||||||
|  |    <property name="text"> | ||||||
|  |     <string>Echo</string> | ||||||
|  |    </property> | ||||||
|  |    <property name="toolTip"> | ||||||
|  |     <string>EME Echo mode</string> | ||||||
|  |    </property> | ||||||
|  |   </action> | ||||||
|  </widget> |  </widget> | ||||||
|  <layoutdefault spacing="6" margin="11"/> |  <layoutdefault spacing="6" margin="11"/> | ||||||
|  <customwidgets> |  <customwidgets> | ||||||
|  | |||||||
| @ -91,7 +91,8 @@ SOURCES += \ | |||||||
| 	main.cpp \ | 	main.cpp \ | ||||||
|   decodedtext.cpp \ |   decodedtext.cpp \ | ||||||
|   wsprnet.cpp \ |   wsprnet.cpp \ | ||||||
|   messageaveraging.cpp |   messageaveraging.cpp \ | ||||||
|  |   echoplot.cpp echograph.cpp Modes.cpp | ||||||
| 
 | 
 | ||||||
| HEADERS  += qt_helpers.hpp \ | HEADERS  += qt_helpers.hpp \ | ||||||
| 	    pimpl_h.hpp pimpl_impl.hpp \ | 	    pimpl_h.hpp pimpl_impl.hpp \ | ||||||
| @ -110,7 +111,8 @@ HEADERS  += qt_helpers.hpp \ | |||||||
|     logbook/countrydat.h \ |     logbook/countrydat.h \ | ||||||
|     logbook/countriesworked.h \ |     logbook/countriesworked.h \ | ||||||
|     logbook/adif.h \ |     logbook/adif.h \ | ||||||
|     messageaveraging.h |     messageaveraging.h \ | ||||||
|  |     echoplot.h echograph.h Modes.hpp | ||||||
| 
 | 
 | ||||||
| INCLUDEPATH += qmake_only | INCLUDEPATH += qmake_only | ||||||
| 
 | 
 | ||||||
| @ -121,7 +123,7 @@ HEADERS += OmniRigTransceiver.hpp | |||||||
| 
 | 
 | ||||||
| FORMS    += mainwindow.ui about.ui Configuration.ui widegraph.ui astro.ui \ | FORMS    += mainwindow.ui about.ui Configuration.ui widegraph.ui astro.ui \ | ||||||
|     logqso.ui wf_palette_design_dialog.ui \ |     logqso.ui wf_palette_design_dialog.ui \ | ||||||
|     messageaveraging.ui |     messageaveraging.ui echograph.ui | ||||||
| 
 | 
 | ||||||
| RC_FILE = wsjtx.rc | RC_FILE = wsjtx.rc | ||||||
| RESOURCES = wsjtx.qrc | RESOURCES = wsjtx.qrc | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user