1 ///////////////////////////////////////////////////////////////////////////
2 // Some code in this file and accompanying files is based on work by
3 // Moe Wheatley, AE4Y, released under the "Simplified BSD License".
4 // For more details see the accompanying file LICENSE_WHEATLEY.TXT
5 ///////////////////////////////////////////////////////////////////////////
6 
7 #ifndef PLOTTER_H
8 #define PLOTTER_H
9 
10 #include <QtGui>
11 #include <QFrame>
12 #include <QImage>
13 #include <QToolTip>
14 #include <cstring>
15 #include "commons.h"
16 
17 #define VERT_DIVS 7	//specify grid screen divisions
18 #define HORZ_DIVS 20
19 
20 class CPlotter : public QFrame
21 {
22   Q_OBJECT
23 public:
24   explicit CPlotter(QWidget *parent = 0);
25   ~CPlotter();
26 
27   QSize minimumSizeHint() const override;
28   QSize sizeHint() const override;
29   QColor  m_ColorTbl[256];
30   bool    m_bDecodeFinished;
31   int     m_plotZero;
32   int     m_plotGain;
33   float   m_fSpan;
34   qint32  m_nSpan;
35   qint32  m_binsPerPixel;
36   qint32  m_fQSO;
37   qint32  m_DF;
38   qint32  m_tol;
39   qint32  m_fCal;
40 
41   void draw(float sw[], int i0, float splot[]);		//Update the waterfalls
42   void SetRunningState(bool running);
43   void setPlotZero(int plotZero);
44   int  getPlotZero();
45   void setPlotGain(int plotGain);
46   int  getPlotGain();
47   void SetCenterFreq(int f);
48   qint64 centerFreq();
49   void SetStartFreq(quint64 f);
50   qint64 startFreq();
51   void SetFreqOffset(quint64 f);
52   qint64 freqOffset();
53   int  plotWidth();
54   void setNSpan(int n);
55   void UpdateOverlay();
56   void setDataFromDisk(bool b);
57   void setTol(int n);
58   void setBinsPerPixel(int n);
59   int  binsPerPixel();
60   void setFQSO(int n, bool bf);
61   void setFcal(int n);
62   void setNkhz(int n);
63   void DecodeFinished();
64   void DrawOverlay();
65   int  fQSO();
66   int  DF();
67   int  autoZero();
68   void setPalette(QString palette);
69   void setFsample(int n);
70   void setMode65(int n);
71   void set2Dspec(bool b);
72   double fGreen();
73   void setLockTxRx(bool b);
74   double rxFreq();
75   double txFreq();
76 //  void updateFreqLabel();
77 
78 signals:
79   void freezeDecode0(int n);
80   void freezeDecode1(int n);
81 
82 protected:
83   //re-implemented widget event handlers
84   void paintEvent(QPaintEvent *event) override;
85   void resizeEvent(QResizeEvent* event) override;
86   void mouseMoveEvent(QMouseEvent * event) override;
87 
88 private:
89 
90   void MakeFrequencyStrs();
91   void UTCstr();
92   int XfromFreq(float f);
93   float FreqfromX(int x);
94   qint64 RoundFreq(qint64 freq, int resolution);
95 
96   QPixmap m_WaterfallPixmap;
97   QPixmap m_ZoomWaterfallPixmap;
98   QPixmap m_2DPixmap;
99   unsigned char m_zwf[32768*400];
100   QPixmap m_ScalePixmap;
101   QPixmap m_ZoomScalePixmap;
102   QSize   m_Size;
103   QString m_Str;
104   QString m_HDivText[483];
105   bool    m_Running;
106   bool    m_paintEventBusy;
107   bool    m_2Dspec;
108   bool    m_paintAllZoom;
109   bool    m_bLockTxRx;
110   double  m_CenterFreq;
111   double  m_fGreen;
112   double  m_TXfreq;
113   qint64  m_StartFreq;
114   qint64  m_ZoomStartFreq;
115   qint64  m_FreqOffset;
116   qint32  m_dBStepSize;
117   qint32  m_FreqUnits;
118   qint32  m_hdivs;
119   bool    m_dataFromDisk;
120   QString m_sutc;
121   qint32  m_line;
122   qint32  m_hist1[256];
123   qint32  m_hist2[256];
124   qint32  m_z1;
125   qint32  m_z2;
126   qint32  m_nkhz;
127   qint32  m_fSample;
128   qint32  m_mode65;
129   qint32  m_i0;
130   qint32  m_xClick;
131   qint32  m_TXkHz;
132   qint32  m_TxDF;
133 
134 private slots:
135   void mousePressEvent(QMouseEvent *event) override;
136   void mouseDoubleClickEvent(QMouseEvent *event) override;
137 };
138 
139 #endif // PLOTTER_H
140