Added scroll wheel support for waterfall. Added hover indicator to make selection of signal easier
This commit is contained in:
		
							parent
							
								
									d1b239201c
								
							
						
					
					
						commit
						63739b9d31
					
				
							
								
								
									
										71
									
								
								plotter.cpp
									
									
									
									
									
								
							
							
						
						
									
										71
									
								
								plotter.cpp
									
									
									
									
									
								
							@ -50,6 +50,8 @@ CPlotter::CPlotter(QWidget *parent) :                  //CPlotter Constructor
 | 
				
			|||||||
  setAttribute(Qt::WA_NoSystemBackground, true);
 | 
					  setAttribute(Qt::WA_NoSystemBackground, true);
 | 
				
			||||||
  m_bReplot=false;
 | 
					  m_bReplot=false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  setMouseTracking(true);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // contextual pop up menu
 | 
					  // contextual pop up menu
 | 
				
			||||||
  setContextMenuPolicy (Qt::CustomContextMenu);
 | 
					  setContextMenuPolicy (Qt::CustomContextMenu);
 | 
				
			||||||
  connect (this, &QWidget::customContextMenuRequested, [this] (QPoint const& pos) {
 | 
					  connect (this, &QWidget::customContextMenuRequested, [this] (QPoint const& pos) {
 | 
				
			||||||
@ -91,8 +93,10 @@ void CPlotter::resizeEvent(QResizeEvent* )                    //resizeEvent()
 | 
				
			|||||||
    m_h1=m_h-m_h2;
 | 
					    m_h1=m_h-m_h2;
 | 
				
			||||||
//    m_line=0;
 | 
					//    m_line=0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    m_FullOverlayPixmap = QPixmap(m_Size.width(), m_h);
 | 
					    m_DialOverlayPixmap = QPixmap(m_Size.width(), m_h);
 | 
				
			||||||
    m_FullOverlayPixmap.fill(Qt::transparent);
 | 
					    m_DialOverlayPixmap.fill(Qt::transparent);
 | 
				
			||||||
 | 
					    m_HoverOverlayPixmap = QPixmap(m_Size.width(), m_h);
 | 
				
			||||||
 | 
					    m_HoverOverlayPixmap.fill(Qt::transparent);
 | 
				
			||||||
    m_2DPixmap = QPixmap(m_Size.width(), m_h2);
 | 
					    m_2DPixmap = QPixmap(m_Size.width(), m_h2);
 | 
				
			||||||
    m_2DPixmap.fill(Qt::black);
 | 
					    m_2DPixmap.fill(Qt::black);
 | 
				
			||||||
    m_WaterfallPixmap = QPixmap(m_Size.width(), m_h1);
 | 
					    m_WaterfallPixmap = QPixmap(m_Size.width(), m_h1);
 | 
				
			||||||
@ -117,7 +121,12 @@ void CPlotter::paintEvent(QPaintEvent *)                                // paint
 | 
				
			|||||||
  painter.drawPixmap(0,m_h1,m_2DPixmap);
 | 
					  painter.drawPixmap(0,m_h1,m_2DPixmap);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  int x = XfromFreq(m_rxFreq);
 | 
					  int x = XfromFreq(m_rxFreq);
 | 
				
			||||||
  painter.drawPixmap(x,0,m_FullOverlayPixmap);
 | 
					  painter.drawPixmap(x,0,m_DialOverlayPixmap);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if(m_lastMouseX >= 0 && m_lastMouseX != x){
 | 
				
			||||||
 | 
					    painter.drawPixmap(m_lastMouseX, 0, m_HoverOverlayPixmap);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  m_paintEventBusy=false;
 | 
					  m_paintEventBusy=false;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -568,7 +577,7 @@ void CPlotter::DrawOverlay()                   //DrawOverlay()
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  if(m_mode=="FT8"){
 | 
					  if(m_mode=="FT8"){
 | 
				
			||||||
      int fwidth=XfromFreq(m_rxFreq+bw)-XfromFreq(m_rxFreq);
 | 
					      int fwidth=XfromFreq(m_rxFreq+bw)-XfromFreq(m_rxFreq);
 | 
				
			||||||
      QPainter overPainter(&m_FullOverlayPixmap);
 | 
					      QPainter overPainter(&m_DialOverlayPixmap);
 | 
				
			||||||
      overPainter.initFrom(this);
 | 
					      overPainter.initFrom(this);
 | 
				
			||||||
      overPainter.setCompositionMode(QPainter::CompositionMode_Source);
 | 
					      overPainter.setCompositionMode(QPainter::CompositionMode_Source);
 | 
				
			||||||
      overPainter.fillRect(0, 0, m_Size.width(), m_h, Qt::transparent);
 | 
					      overPainter.fillRect(0, 0, m_Size.width(), m_h, Qt::transparent);
 | 
				
			||||||
@ -580,6 +589,20 @@ void CPlotter::DrawOverlay()                   //DrawOverlay()
 | 
				
			|||||||
      overPainter.setPen(penRed);
 | 
					      overPainter.setPen(penRed);
 | 
				
			||||||
      overPainter.drawLine(0, 26, fwidth, 26);
 | 
					      overPainter.drawLine(0, 26, fwidth, 26);
 | 
				
			||||||
      overPainter.drawLine(0, 28, fwidth, 28);
 | 
					      overPainter.drawLine(0, 28, fwidth, 28);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      QPainter hoverPainter(&m_HoverOverlayPixmap);
 | 
				
			||||||
 | 
					      hoverPainter.initFrom(this);
 | 
				
			||||||
 | 
					      hoverPainter.setCompositionMode(QPainter::CompositionMode_Source);
 | 
				
			||||||
 | 
					      hoverPainter.fillRect(0, 0, m_Size.width(), m_h, Qt::transparent);
 | 
				
			||||||
 | 
					      hoverPainter.setPen(QPen(Qt::white));
 | 
				
			||||||
 | 
					      hoverPainter.drawLine(0, 30, 0, m_h);
 | 
				
			||||||
 | 
					      hoverPainter.drawLine(fwidth+1, 30, fwidth+1, m_h);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if DRAW_FREQ_OVERLAY
 | 
				
			||||||
 | 
					      int f = FreqfromX(m_lastMouseX);
 | 
				
			||||||
 | 
					      hoverPainter.setFont(Font);
 | 
				
			||||||
 | 
					      hoverPainter.drawText(fwidth + 5, m_h, QString("%1").arg(f));
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -701,6 +724,46 @@ void CPlotter::setRxFreq (int x)                               //setRxFreq
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
int CPlotter::rxFreq() {return m_rxFreq;}                      //rxFreq
 | 
					int CPlotter::rxFreq() {return m_rxFreq;}                      //rxFreq
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void CPlotter::leaveEvent(QEvent *event)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    m_lastMouseX = -1;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void CPlotter::wheelEvent(QWheelEvent *event){
 | 
				
			||||||
 | 
					    auto delta = event->angleDelta();
 | 
				
			||||||
 | 
					    if(delta.isNull()){
 | 
				
			||||||
 | 
					        event->ignore();
 | 
				
			||||||
 | 
					        return;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    int newFreq = rxFreq();
 | 
				
			||||||
 | 
					    int dir = delta.y() > 0 ? 1 : -1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    bool ctrl = (event->modifiers() & Qt::ControlModifier);
 | 
				
			||||||
 | 
					    if(ctrl){
 | 
				
			||||||
 | 
					        newFreq += dir;
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					        newFreq = newFreq/10*10 + dir*10;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    emit setFreq1 (newFreq, newFreq);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void CPlotter::mouseMoveEvent (QMouseEvent * event)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    int x = event->x();
 | 
				
			||||||
 | 
					    if(x < 0) x = 0;
 | 
				
			||||||
 | 
					    if(x>m_Size.width()) x = m_Size.width();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    m_lastMouseX = x;
 | 
				
			||||||
 | 
					#if DRAW_FREQ_OVERLAY
 | 
				
			||||||
 | 
					    DrawOverlay();
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					    update();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    event->ignore();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void CPlotter::mouseReleaseEvent (QMouseEvent * event)
 | 
					void CPlotter::mouseReleaseEvent (QMouseEvent * event)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  if (Qt::LeftButton == event->button ()) {
 | 
					  if (Qt::LeftButton == event->button ()) {
 | 
				
			||||||
 | 
				
			|||||||
@ -95,6 +95,9 @@ protected:
 | 
				
			|||||||
  //re-implemented widget event handlers
 | 
					  //re-implemented widget event handlers
 | 
				
			||||||
  void paintEvent(QPaintEvent *event) override;
 | 
					  void paintEvent(QPaintEvent *event) override;
 | 
				
			||||||
  void resizeEvent(QResizeEvent* event) override;
 | 
					  void resizeEvent(QResizeEvent* event) override;
 | 
				
			||||||
 | 
					  void leaveEvent(QEvent *event) override;
 | 
				
			||||||
 | 
					  void wheelEvent(QWheelEvent *event) override;
 | 
				
			||||||
 | 
					  void mouseMoveEvent(QMouseEvent * event) override;
 | 
				
			||||||
  void mouseReleaseEvent (QMouseEvent * event) override;
 | 
					  void mouseReleaseEvent (QMouseEvent * event) override;
 | 
				
			||||||
  void mouseDoubleClickEvent (QMouseEvent * event) override;
 | 
					  void mouseDoubleClickEvent (QMouseEvent * event) override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -128,7 +131,8 @@ private:
 | 
				
			|||||||
  qint32  m_ia;
 | 
					  qint32  m_ia;
 | 
				
			||||||
  qint32  m_ib;
 | 
					  qint32  m_ib;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  QPixmap m_FullOverlayPixmap;
 | 
					  QPixmap m_DialOverlayPixmap;
 | 
				
			||||||
 | 
					  QPixmap m_HoverOverlayPixmap;
 | 
				
			||||||
  QPixmap m_WaterfallPixmap;
 | 
					  QPixmap m_WaterfallPixmap;
 | 
				
			||||||
  QPixmap m_2DPixmap;
 | 
					  QPixmap m_2DPixmap;
 | 
				
			||||||
  QPixmap m_ScalePixmap;
 | 
					  QPixmap m_ScalePixmap;
 | 
				
			||||||
@ -174,6 +178,7 @@ private:
 | 
				
			|||||||
  qint32  m_startFreq;
 | 
					  qint32  m_startFreq;
 | 
				
			||||||
  qint32  m_tol;
 | 
					  qint32  m_tol;
 | 
				
			||||||
  qint32  m_j;
 | 
					  qint32  m_j;
 | 
				
			||||||
 | 
					  qint32  m_lastMouseX;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  char    m_sutc[6];
 | 
					  char    m_sutc[6];
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user