mirror of
				https://github.com/saitohirga/WSJT-X.git
				synced 2025-11-03 13:30:52 -05:00 
			
		
		
		
	More progress on wide graph display. Mostly OK now... ??
Sometimes need to restart after mode change, etc. git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@2612 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
This commit is contained in:
		
							parent
							
								
									1645827849
								
							
						
					
					
						commit
						1fd3fb60fe
					
				
							
								
								
									
										75
									
								
								plotter.cpp
									
									
									
									
									
								
							
							
						
						
									
										75
									
								
								plotter.cpp
									
									
									
									
									
								
							@ -111,6 +111,7 @@ void CPlotter::draw(float swide[], int i0, float splot[])             //draw()
 | 
				
			|||||||
    m_hist2[i]=0;
 | 
					    m_hist2[i]=0;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//  qDebug() << "A" << m_binsPerPixel << m_nSpan << m_fSpan;
 | 
				
			||||||
  painter2D.setPen(Qt::green);
 | 
					  painter2D.setPen(Qt::green);
 | 
				
			||||||
  QRect tmp(0,0,w,h);
 | 
					  QRect tmp(0,0,w,h);
 | 
				
			||||||
  painter2D.fillRect(tmp,Qt::black);
 | 
					  painter2D.fillRect(tmp,Qt::black);
 | 
				
			||||||
@ -194,6 +195,7 @@ void CPlotter::DrawOverlay()                                 //DrawOverlay()
 | 
				
			|||||||
  if(m_WaterfallPixmap.isNull()) return;
 | 
					  if(m_WaterfallPixmap.isNull()) return;
 | 
				
			||||||
  int w = m_WaterfallPixmap.width();
 | 
					  int w = m_WaterfallPixmap.width();
 | 
				
			||||||
  int x,y;
 | 
					  int x,y;
 | 
				
			||||||
 | 
					  int nHzDiv[11]={0,50,100,200,200,200,500,500,500,500,500};
 | 
				
			||||||
  float pixperdiv;
 | 
					  float pixperdiv;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  QRect rect0;
 | 
					  QRect rect0;
 | 
				
			||||||
@ -209,18 +211,25 @@ void CPlotter::DrawOverlay()                                 //DrawOverlay()
 | 
				
			|||||||
  painter0.setPen(Qt::black);
 | 
					  painter0.setPen(Qt::black);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  double fftBinWidth=12000.0/m_nsps;
 | 
					  double fftBinWidth=12000.0/m_nsps;
 | 
				
			||||||
  m_binsPerPixel = (m_nSpan/fftBinWidth)/w + 0.5;
 | 
					 | 
				
			||||||
  if(m_binsPerPixel < 1) m_binsPerPixel=1;
 | 
					  if(m_binsPerPixel < 1) m_binsPerPixel=1;
 | 
				
			||||||
  double FreqPerDiv=50.0;
 | 
					 | 
				
			||||||
  double df = m_binsPerPixel*fftBinWidth;
 | 
					  double df = m_binsPerPixel*fftBinWidth;
 | 
				
			||||||
//  qDebug() << "A" << fftBinWidth << m_binsPerPixel << df;
 | 
					 | 
				
			||||||
  m_hdivs = w*df/FreqPerDiv + 0.9999;
 | 
					 | 
				
			||||||
  m_fSpan = w*df;
 | 
					  m_fSpan = w*df;
 | 
				
			||||||
 | 
					//  m_freqPerDiv=50*m_binsPerPixel;
 | 
				
			||||||
 | 
					//  m_freqPerDiv=nHzDiv[m_binsPerPixel];
 | 
				
			||||||
 | 
					  int n=m_fSpan/10;
 | 
				
			||||||
 | 
					  m_freqPerDiv=10;
 | 
				
			||||||
 | 
					  if(n>25) m_freqPerDiv=50;
 | 
				
			||||||
 | 
					  if(n>70) m_freqPerDiv=100;
 | 
				
			||||||
 | 
					  if(n>250) m_freqPerDiv=500;
 | 
				
			||||||
 | 
					  m_hdivs = w*df/m_freqPerDiv + 0.9999;
 | 
				
			||||||
 | 
					  qDebug() << "B" << m_binsPerPixel << df << m_freqPerDiv << pixperdiv
 | 
				
			||||||
 | 
					           << m_hdivs << m_fSpan;
 | 
				
			||||||
  m_ScalePixmap.fill(Qt::white);
 | 
					  m_ScalePixmap.fill(Qt::white);
 | 
				
			||||||
  painter0.drawRect(0, 0, w, 30);
 | 
					  painter0.drawRect(0, 0, w, 30);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  //draw tick marks on wideband (upper) scale
 | 
					  //draw tick marks on wideband (upper) scale
 | 
				
			||||||
  pixperdiv = FreqPerDiv/df;
 | 
					//  pixperdiv = m_binsPerPixel*m_freqPerDiv/df;
 | 
				
			||||||
 | 
					  pixperdiv = m_freqPerDiv/df;
 | 
				
			||||||
  for( int i=1; i<m_hdivs; i++) {     //major ticks
 | 
					  for( int i=1; i<m_hdivs; i++) {     //major ticks
 | 
				
			||||||
    x = (int)( (float)i*pixperdiv );
 | 
					    x = (int)( (float)i*pixperdiv );
 | 
				
			||||||
    painter0.drawLine(x,18,x,30);
 | 
					    painter0.drawLine(x,18,x,30);
 | 
				
			||||||
@ -274,14 +283,13 @@ void CPlotter::DrawOverlay()                                 //DrawOverlay()
 | 
				
			|||||||
  painter3.setFont(Font);
 | 
					  painter3.setFont(Font);
 | 
				
			||||||
  painter3.setPen(Qt::black);
 | 
					  painter3.setPen(Qt::black);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  FreqPerDiv=100;
 | 
					 | 
				
			||||||
  df = 12000.0/m_nsps;
 | 
					  df = 12000.0/m_nsps;
 | 
				
			||||||
  m_hdivs = 4400*df/FreqPerDiv + 0.9999;
 | 
					  m_hdivs = 4400*df/m_freqPerDiv + 0.9999;
 | 
				
			||||||
  int nlabs=df*w/FreqPerDiv + 1.0;
 | 
					  int nlabs=df*w/m_freqPerDiv + 1.0;
 | 
				
			||||||
  m_ZoomScalePixmap.fill(Qt::white);
 | 
					  m_ZoomScalePixmap.fill(Qt::white);
 | 
				
			||||||
  painter3.drawRect(0, 0, w, 30);
 | 
					  painter3.drawRect(0, 0, w, 30);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  pixperdiv = FreqPerDiv/df;
 | 
					  pixperdiv = m_freqPerDiv/df;
 | 
				
			||||||
  for( int i=0; i<10*nlabs; i++) {
 | 
					  for( int i=0; i<10*nlabs; i++) {
 | 
				
			||||||
    x = i*pixperdiv/10;
 | 
					    x = i*pixperdiv/10;
 | 
				
			||||||
    y=24;
 | 
					    y=24;
 | 
				
			||||||
@ -297,36 +305,17 @@ void CPlotter::DrawOverlay()                                 //DrawOverlay()
 | 
				
			|||||||
    painter3.drawText(rect1, Qt::AlignHCenter|Qt::AlignVCenter,
 | 
					    painter3.drawText(rect1, Qt::AlignHCenter|Qt::AlignVCenter,
 | 
				
			||||||
                      m_HDivText[i]);
 | 
					                      m_HDivText[i]);
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					 | 
				
			||||||
  df=m_fSample/32768.0;
 | 
					 | 
				
			||||||
  x = (m_DF + m_mode65*66*11025.0/4096.0 - m_ZoomStartFreq)/df;
 | 
					 | 
				
			||||||
  QPen pen2(Qt::red, 3);            //Mark top JT65B tone with red tick
 | 
					 | 
				
			||||||
  painter3.setPen(pen2);
 | 
					 | 
				
			||||||
  painter3.drawLine(x,15,x,30);
 | 
					 | 
				
			||||||
  x = (m_DF - m_ZoomStartFreq)/df;
 | 
					 | 
				
			||||||
  QPen pen1(Qt::green, 3);                //Mark DF with a green tick
 | 
					 | 
				
			||||||
  painter3.setPen(pen1);
 | 
					 | 
				
			||||||
  painter3.drawLine(x,15,x,30);
 | 
					 | 
				
			||||||
  for(int i=2; i<5; i++) {                //Mark the shorthand freqs
 | 
					 | 
				
			||||||
    x = (m_DF + m_mode65*10*i*11025.0/4096.0 - m_ZoomStartFreq)/df;
 | 
					 | 
				
			||||||
    painter3.drawLine(x,20,x,30);
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
  int x1=(m_DF - m_tol - m_ZoomStartFreq)/df;
 | 
					 | 
				
			||||||
  int x2=(m_DF + m_tol - m_ZoomStartFreq)/df;
 | 
					 | 
				
			||||||
  pen1.setWidth(6);
 | 
					 | 
				
			||||||
  painter3.drawLine(x1,28,x2,28);
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void CPlotter::MakeFrequencyStrs()                       //MakeFrequencyStrs
 | 
					void CPlotter::MakeFrequencyStrs()                       //MakeFrequencyStrs
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  float freq;
 | 
					  float freq;
 | 
				
			||||||
  int i,j;
 | 
					  int i,j;
 | 
				
			||||||
  int FreqPerDiv=50;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  for(int i=0; i<=m_hdivs; i++) {
 | 
					  for(int i=0; i<=m_hdivs; i++) {
 | 
				
			||||||
    freq = m_StartFreq + i*FreqPerDiv;
 | 
					    freq = m_StartFreq + i*m_freqPerDiv;
 | 
				
			||||||
    m_HDivText[i].setNum((int)freq);
 | 
					    m_HDivText[i].setNum((int)freq);
 | 
				
			||||||
    //      StartFreq += FreqPerDiv;
 | 
					    //      StartFreq += m_freqPerDiv;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -402,7 +391,12 @@ void CPlotter::setTol(int n)                                 //setTol()
 | 
				
			|||||||
  DrawOverlay();
 | 
					  DrawOverlay();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void CPlotter::setBinsPerPixel(int n) {m_binsPerPixel = n;}  //set nbpp
 | 
					void CPlotter::setBinsPerPixel(int n)                       // set nbpp
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  m_binsPerPixel = n;
 | 
				
			||||||
 | 
					  DrawOverlay();                         //Redraw scales and ticks
 | 
				
			||||||
 | 
					  update();                              //trigger a new paintEvent}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int CPlotter::binsPerPixel(){return m_binsPerPixel;}         //get nbpp
 | 
					int CPlotter::binsPerPixel(){return m_binsPerPixel;}         //get nbpp
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -582,18 +576,6 @@ void CPlotter::setPalette(QString palette)                      //setPalette()
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void CPlotter::setFsample(int n)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
  m_fSample=n;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void CPlotter::setMode65(int n)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
  m_mode65=n;
 | 
					 | 
				
			||||||
  DrawOverlay();                         //Redraw scales and ticks
 | 
					 | 
				
			||||||
  update();                              //trigger a new paintEvent
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void CPlotter::set2Dspec(bool b)
 | 
					void CPlotter::set2Dspec(bool b)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
//  m_2Dspec=b;
 | 
					//  m_2Dspec=b;
 | 
				
			||||||
@ -606,3 +588,10 @@ double CPlotter::fGreen()
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
  return m_fGreen;
 | 
					  return m_fGreen;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void CPlotter::setNsps(int n)                                  //setNSpan()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  m_nsps=n;
 | 
				
			||||||
 | 
					  DrawOverlay();                         //Redraw scales and ticks
 | 
				
			||||||
 | 
					  update();                              //trigger a new paintEvent}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -35,7 +35,6 @@ public:
 | 
				
			|||||||
  qint32  m_DF;
 | 
					  qint32  m_DF;
 | 
				
			||||||
  qint32  m_tol;
 | 
					  qint32  m_tol;
 | 
				
			||||||
  qint32  m_fCal;
 | 
					  qint32  m_fCal;
 | 
				
			||||||
  qint32  m_nsps;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  void draw(float sw[], int i0, float splot[]);		//Update the waterfalls
 | 
					  void draw(float sw[], int i0, float splot[]);		//Update the waterfalls
 | 
				
			||||||
  void SetRunningState(bool running);
 | 
					  void SetRunningState(bool running);
 | 
				
			||||||
@ -63,8 +62,8 @@ public:
 | 
				
			|||||||
  int  autoZero();
 | 
					  int  autoZero();
 | 
				
			||||||
  void setPalette(QString palette);
 | 
					  void setPalette(QString palette);
 | 
				
			||||||
  void setFsample(int n);
 | 
					  void setFsample(int n);
 | 
				
			||||||
  void setMode65(int n);
 | 
					 | 
				
			||||||
  void set2Dspec(bool b);
 | 
					  void set2Dspec(bool b);
 | 
				
			||||||
 | 
					  void setNsps(int n);
 | 
				
			||||||
  double fGreen();
 | 
					  double fGreen();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
signals:
 | 
					signals:
 | 
				
			||||||
@ -113,9 +112,10 @@ private:
 | 
				
			|||||||
  qint32  m_z2;
 | 
					  qint32  m_z2;
 | 
				
			||||||
  qint32  m_nkhz;
 | 
					  qint32  m_nkhz;
 | 
				
			||||||
  qint32  m_fSample;
 | 
					  qint32  m_fSample;
 | 
				
			||||||
  qint32  m_mode65;
 | 
					 | 
				
			||||||
  qint32  m_i0;
 | 
					  qint32  m_i0;
 | 
				
			||||||
  qint32  m_xClick;
 | 
					  qint32  m_xClick;
 | 
				
			||||||
 | 
					  qint32  m_freqPerDiv;
 | 
				
			||||||
 | 
					  qint32  m_nsps;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
private slots:
 | 
					private slots:
 | 
				
			||||||
  void mousePressEvent(QMouseEvent *event);
 | 
					  void mousePressEvent(QMouseEvent *event);
 | 
				
			||||||
 | 
				
			|||||||
@ -87,7 +87,7 @@ void WideGraph::dataSink2(float s[], int nkhz, int ihsym, int ndiskdata,
 | 
				
			|||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  //Average spectra over specified number, m_waterfallAvg
 | 
					  //Average spectra over specified number, m_waterfallAvg
 | 
				
			||||||
//  qDebug() << "A" << ihsym << NSMAX << df << nbpp;
 | 
					//  qDebug() << "C" << ihsym << NSMAX << df << nbpp;
 | 
				
			||||||
  if (n==0) {
 | 
					  if (n==0) {
 | 
				
			||||||
    for (int i=0; i<NSMAX; i++)
 | 
					    for (int i=0; i<NSMAX; i++)
 | 
				
			||||||
      splot[i]=s[i];
 | 
					      splot[i]=s[i];
 | 
				
			||||||
@ -108,7 +108,7 @@ void WideGraph::dataSink2(float s[], int nkhz, int ihsym, int ndiskdata,
 | 
				
			|||||||
//        1000.0/df + 0.5;
 | 
					//        1000.0/df + 0.5;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    int i0=0;                            //###
 | 
					    int i0=0;                            //###
 | 
				
			||||||
    nbpp=1;                          //###
 | 
					//    nbpp=1;                          //###
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    int i=i0;
 | 
					    int i=i0;
 | 
				
			||||||
    for (int j=0; j<2048; j++) {
 | 
					    for (int j=0; j<2048; j++) {
 | 
				
			||||||
@ -149,13 +149,7 @@ void WideGraph::dataSink2(float s[], int nkhz, int ihsym, int ndiskdata,
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
void WideGraph::on_freqSpanSpinBox_valueChanged(int n)
 | 
					void WideGraph::on_freqSpanSpinBox_valueChanged(int n)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  ui->widePlot->setNSpan(n);
 | 
					  ui->widePlot->setBinsPerPixel(n);
 | 
				
			||||||
  int w = ui->widePlot->plotWidth();
 | 
					 | 
				
			||||||
  int nbpp = n * 32768.0/(w*96.0) + 0.5;
 | 
					 | 
				
			||||||
  if(nbpp < 1) nbpp=1;
 | 
					 | 
				
			||||||
  if(w > 0) {
 | 
					 | 
				
			||||||
    ui->widePlot->setBinsPerPixel(nbpp);
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void WideGraph::on_waterfallAvgSpinBox_valueChanged(int n)
 | 
					void WideGraph::on_waterfallAvgSpinBox_valueChanged(int n)
 | 
				
			||||||
@ -254,17 +248,6 @@ void WideGraph::setPalette(QString palette)
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
  ui->widePlot->setPalette(palette);
 | 
					  ui->widePlot->setPalette(palette);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
void WideGraph::setFsample(int n)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
  m_fSample=n;
 | 
					 | 
				
			||||||
  ui->widePlot->setFsample(n);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void WideGraph::setMode65(int n)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
  m_mode65=n;
 | 
					 | 
				
			||||||
  ui->widePlot->setMode65(n);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
void WideGraph::on_fCenterLineEdit_editingFinished()
 | 
					void WideGraph::on_fCenterLineEdit_editingFinished()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
@ -284,5 +267,5 @@ void WideGraph::setPeriod(int ntrperiod, int nsps)
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
  m_TRperiod=ntrperiod;
 | 
					  m_TRperiod=ntrperiod;
 | 
				
			||||||
  m_nsps=nsps;
 | 
					  m_nsps=nsps;
 | 
				
			||||||
  ui->widePlot->m_nsps=nsps;
 | 
					  ui->widePlot->setNsps(nsps);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -30,7 +30,6 @@ public:
 | 
				
			|||||||
  void   setFcal(int n);
 | 
					  void   setFcal(int n);
 | 
				
			||||||
  void   setPalette(QString palette);
 | 
					  void   setPalette(QString palette);
 | 
				
			||||||
  void   setFsample(int n);
 | 
					  void   setFsample(int n);
 | 
				
			||||||
  void   setMode65(int n);
 | 
					 | 
				
			||||||
  void   setPeriod(int ntrperiod, int nsps);
 | 
					  void   setPeriod(int ntrperiod, int nsps);
 | 
				
			||||||
  double fGreen();
 | 
					  double fGreen();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -60,7 +59,6 @@ private:
 | 
				
			|||||||
  qint32 m_waterfallAvg;
 | 
					  qint32 m_waterfallAvg;
 | 
				
			||||||
  qint32 m_fCal;
 | 
					  qint32 m_fCal;
 | 
				
			||||||
  qint32 m_fSample;
 | 
					  qint32 m_fSample;
 | 
				
			||||||
  qint32 m_mode65;
 | 
					 | 
				
			||||||
  qint32 m_TRperiod;
 | 
					  qint32 m_TRperiod;
 | 
				
			||||||
  qint32 m_nsps;
 | 
					  qint32 m_nsps;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user