| 
									
										
										
										
											2017-01-29 19:51:45 +01:00
										 |  |  | ///////////////////////////////////////////////////////////////////////////////////
 | 
					
						
							| 
									
										
										
										
											2023-11-19 13:31:45 +01:00
										 |  |  | // Copyright (C) 2017-2022 Edouard Griffiths, F4EXB <f4exb06@gmail.com>          //
 | 
					
						
							| 
									
										
										
										
											2017-01-29 19:51:45 +01:00
										 |  |  | //                                                                               //
 | 
					
						
							|  |  |  | // This program is free software; you can redistribute it and/or modify          //
 | 
					
						
							|  |  |  | // it under the terms of the GNU General Public License as published by          //
 | 
					
						
							|  |  |  | // the Free Software Foundation as version 3 of the License, or                  //
 | 
					
						
							| 
									
										
										
										
											2019-04-11 14:43:33 +02:00
										 |  |  | // (at your option) any later version.                                           //
 | 
					
						
							| 
									
										
										
										
											2017-01-29 19:51:45 +01:00
										 |  |  | //                                                                               //
 | 
					
						
							|  |  |  | // This program is distributed in the hope that it will be useful,               //
 | 
					
						
							|  |  |  | // but WITHOUT ANY WARRANTY; without even the implied warranty of                //
 | 
					
						
							|  |  |  | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the                  //
 | 
					
						
							|  |  |  | // GNU General Public License V3 for more details.                               //
 | 
					
						
							|  |  |  | //                                                                               //
 | 
					
						
							|  |  |  | // You should have received a copy of the GNU General Public License             //
 | 
					
						
							|  |  |  | // along with this program. If not, see <http://www.gnu.org/licenses/>.          //
 | 
					
						
							|  |  |  | ///////////////////////////////////////////////////////////////////////////////////
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #ifndef SDRBASE_GUI_GLSCOPENG_H_
 | 
					
						
							|  |  |  | #define SDRBASE_GUI_GLSCOPENG_H_
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-03-18 18:13:08 +01:00
										 |  |  | #include <QOpenGLWidget>
 | 
					
						
							| 
									
										
										
										
											2017-01-29 19:51:45 +01:00
										 |  |  | #include <QPen>
 | 
					
						
							|  |  |  | #include <QTimer>
 | 
					
						
							|  |  |  | #include <QMutex>
 | 
					
						
							|  |  |  | #include <QFont>
 | 
					
						
							|  |  |  | #include <QMatrix4x4>
 | 
					
						
							| 
									
										
										
										
											2018-11-19 18:49:12 +01:00
										 |  |  | #include <QAtomicInt>
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-05-29 00:55:04 +02:00
										 |  |  | #include "dsp/glscopeinterface.h"
 | 
					
						
							| 
									
										
										
										
											2017-01-29 19:51:45 +01:00
										 |  |  | #include "dsp/dsptypes.h"
 | 
					
						
							| 
									
										
										
										
											2018-08-12 17:22:39 +02:00
										 |  |  | #include "dsp/scopevis.h"
 | 
					
						
							| 
									
										
										
										
											2017-01-29 19:51:45 +01:00
										 |  |  | #include "gui/scaleengine.h"
 | 
					
						
							| 
									
										
										
										
											2019-10-15 01:24:36 +02:00
										 |  |  | #include "gui/glshadercolors.h"
 | 
					
						
							| 
									
										
										
										
											2017-01-29 19:51:45 +01:00
										 |  |  | #include "gui/glshadersimple.h"
 | 
					
						
							|  |  |  | #include "gui/glshadertextured.h"
 | 
					
						
							| 
									
										
										
										
											2018-03-20 13:49:21 +01:00
										 |  |  | #include "export.h"
 | 
					
						
							| 
									
										
										
										
											2017-01-29 19:51:45 +01:00
										 |  |  | #include "util/bitfieldindex.h"
 | 
					
						
							| 
									
										
										
										
											2018-03-01 02:33:18 +01:00
										 |  |  | #include "util/incrementalarray.h"
 | 
					
						
							| 
									
										
										
										
											2017-01-29 19:51:45 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | class QPainter; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-03-18 18:13:08 +01:00
										 |  |  | class SDRGUI_API GLScope: public QOpenGLWidget, public GLScopeInterface | 
					
						
							| 
									
										
										
										
											2021-05-29 00:55:04 +02:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2017-01-29 19:51:45 +01:00
										 |  |  |     Q_OBJECT | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | public: | 
					
						
							|  |  |  |     enum DisplayMode { | 
					
						
							|  |  |  |         DisplayXYH, | 
					
						
							|  |  |  |         DisplayXYV, | 
					
						
							|  |  |  |         DisplayX, | 
					
						
							|  |  |  |         DisplayY, | 
					
						
							|  |  |  |         DisplayPol | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-08-12 17:01:56 +02:00
										 |  |  |     GLScope(QWidget* parent = 0); | 
					
						
							|  |  |  |     virtual ~GLScope(); | 
					
						
							| 
									
										
										
										
											2017-01-29 19:51:45 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     void connectTimer(const QTimer& timer); | 
					
						
							| 
									
										
										
										
											2020-10-07 21:28:32 +02:00
										 |  |  |     void disconnectTimer(); | 
					
						
							| 
									
										
										
										
											2017-01-29 19:51:45 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-05-29 00:55:04 +02:00
										 |  |  |     virtual void setTraces(std::vector<GLScopeSettings::TraceData>* tracesData, std::vector<float *>* traces); | 
					
						
							|  |  |  |     virtual void newTraces(std::vector<float *>* traces, int traceIndex, std::vector<Projector::ProjectionType>* projectionTypes); | 
					
						
							| 
									
										
										
										
											2017-01-29 19:51:45 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-01-29 22:52:38 +01:00
										 |  |  |     int getSampleRate() const { return m_sampleRate; } | 
					
						
							| 
									
										
										
										
											2017-02-05 04:41:32 +01:00
										 |  |  |     int getTraceSize() const { return m_traceSize; } | 
					
						
							| 
									
										
										
										
											2017-01-29 22:52:38 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-05-29 12:22:43 +02:00
										 |  |  |     virtual void setTriggerPre(uint32_t triggerPre, bool emitSignal = false); //!< number of samples
 | 
					
						
							|  |  |  |     virtual void setTimeOfsProMill(int timeOfsProMill); | 
					
						
							|  |  |  |     virtual void setSampleRate(int sampleRate); | 
					
						
							|  |  |  |     virtual void setTimeBase(int timeBase); | 
					
						
							|  |  |  |     virtual void setFocusedTraceIndex(uint32_t traceIndex); | 
					
						
							| 
									
										
										
										
											2017-01-29 19:51:45 +01:00
										 |  |  |     void setDisplayMode(DisplayMode displayMode); | 
					
						
							| 
									
										
										
										
											2021-05-29 12:22:43 +02:00
										 |  |  |     virtual void setTraceSize(int trceSize, bool emitSignal = false); | 
					
						
							|  |  |  |     virtual void updateDisplay(); | 
					
						
							| 
									
										
										
										
											2017-02-05 04:41:32 +01:00
										 |  |  |     void setDisplayGridIntensity(int intensity); | 
					
						
							|  |  |  |     void setDisplayTraceIntensity(int intensity); | 
					
						
							| 
									
										
										
										
											2021-05-29 12:22:43 +02:00
										 |  |  |     virtual void setFocusedTriggerData(GLScopeSettings::TriggerData& triggerData) { m_focusedTriggerData = triggerData; } | 
					
						
							|  |  |  |     virtual void setConfigChanged() { m_configChanged = true; } | 
					
						
							| 
									
										
										
										
											2017-02-13 00:17:59 +01:00
										 |  |  |     //void incrementTraceCounter() { m_traceCounter++; }
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     bool getDataChanged() const { return m_dataChanged; } | 
					
						
							| 
									
										
										
										
											2017-02-20 01:21:52 +01:00
										 |  |  |     DisplayMode getDisplayMode() const { return m_displayMode; } | 
					
						
							| 
									
										
										
										
											2018-05-15 00:30:01 +02:00
										 |  |  |     void setDisplayXYPoints(bool value) { m_displayXYPoints = value; } | 
					
						
							| 
									
										
										
										
											2019-10-14 01:42:24 +02:00
										 |  |  |     void setDisplayXYPolarGrid(bool value) { m_displayPolGrid = value; } | 
					
						
							| 
									
										
										
										
											2021-05-29 12:22:43 +02:00
										 |  |  |     virtual const QAtomicInt& getProcessingTraceIndex() const { return m_processingTraceIndex; } | 
					
						
							| 
									
										
										
										
											2019-10-15 22:51:30 +02:00
										 |  |  |     void setTraceModulo(int modulo) { m_traceModulo = modulo; } | 
					
						
							| 
									
										
										
										
											2017-01-29 19:51:45 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-05-28 23:44:53 +02:00
										 |  |  |     void setXScaleFreq(bool set) { m_xScaleFreq = set; m_configChanged = true; } | 
					
						
							|  |  |  |     bool isXScaleFreq() const { return m_xScaleFreq; } | 
					
						
							|  |  |  |     void setXScaleCenterFrequency(qint64 cf) { m_xScaleCenterFrequency = cf; m_configChanged = true; } | 
					
						
							|  |  |  |     void setXScaleFrequencySpan(int span) { m_xScaleFrequencySpan = span; m_configChanged = true; } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-01-29 22:52:38 +01:00
										 |  |  | signals: | 
					
						
							|  |  |  |     void sampleRateChanged(int); | 
					
						
							| 
									
										
										
										
											2018-10-16 18:43:46 +02:00
										 |  |  |     void traceSizeChanged(uint32_t); | 
					
						
							|  |  |  |     void preTriggerChanged(uint32_t); //!< number of samples
 | 
					
						
							| 
									
										
										
										
											2017-01-29 22:52:38 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-01-29 19:51:45 +01:00
										 |  |  | private: | 
					
						
							| 
									
										
										
										
											2020-07-06 02:44:11 +02:00
										 |  |  |     struct ScopeMarker { | 
					
						
							|  |  |  |         QPointF m_point; | 
					
						
							|  |  |  |         float m_time; | 
					
						
							|  |  |  |         float m_value; | 
					
						
							|  |  |  |         QString m_timeStr; | 
					
						
							|  |  |  |         QString m_valueStr; | 
					
						
							|  |  |  |         QString m_timeDeltaStr; | 
					
						
							|  |  |  |         QString m_valueDeltaStr; | 
					
						
							|  |  |  |         ScopeMarker() : | 
					
						
							|  |  |  |             m_point(0, 0), | 
					
						
							|  |  |  |             m_time(0), | 
					
						
							|  |  |  |             m_value(0), | 
					
						
							|  |  |  |             m_timeStr(), | 
					
						
							|  |  |  |             m_valueStr(), | 
					
						
							|  |  |  |             m_timeDeltaStr(), | 
					
						
							|  |  |  |             m_valueDeltaStr() | 
					
						
							|  |  |  |         {} | 
					
						
							|  |  |  |         ScopeMarker( | 
					
						
							|  |  |  |             const QPointF& point, | 
					
						
							|  |  |  |             float time, | 
					
						
							|  |  |  |             float value, | 
					
						
							|  |  |  |             const QString timeStr, | 
					
						
							|  |  |  |             const QString& valueStr, | 
					
						
							|  |  |  |             const QString& timeDeltaStr, | 
					
						
							|  |  |  |             const QString& valueDeltaStr | 
					
						
							|  |  |  |         ) : | 
					
						
							|  |  |  |             m_point(point), | 
					
						
							|  |  |  |             m_time(time), | 
					
						
							|  |  |  |             m_value(value), | 
					
						
							|  |  |  |             m_timeStr(timeStr), | 
					
						
							|  |  |  |             m_valueStr(valueStr), | 
					
						
							|  |  |  |             m_timeDeltaStr(timeDeltaStr), | 
					
						
							|  |  |  |             m_valueDeltaStr(valueDeltaStr) | 
					
						
							|  |  |  |         {} | 
					
						
							|  |  |  |         ScopeMarker(const ScopeMarker& other) : | 
					
						
							|  |  |  |             m_point(other.m_point), | 
					
						
							|  |  |  |             m_time(other.m_time), | 
					
						
							|  |  |  |             m_timeStr(other.m_timeStr), | 
					
						
							|  |  |  |             m_valueStr(other.m_valueStr), | 
					
						
							|  |  |  |             m_timeDeltaStr(other.m_timeDeltaStr), | 
					
						
							|  |  |  |             m_valueDeltaStr(other.m_valueDeltaStr) | 
					
						
							|  |  |  |         {} | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  |     QList<ScopeMarker> m_markers1; | 
					
						
							|  |  |  |     QList<ScopeMarker> m_markers2; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-05-29 00:55:04 +02:00
										 |  |  |     std::vector<GLScopeSettings::TraceData> *m_tracesData; | 
					
						
							| 
									
										
										
										
											2017-02-06 02:40:31 +01:00
										 |  |  |     std::vector<float *> *m_traces; | 
					
						
							| 
									
										
										
										
											2019-10-14 01:42:24 +02:00
										 |  |  |     std::vector<Projector::ProjectionType> *m_projectionTypes; | 
					
						
							| 
									
										
										
										
											2018-11-19 18:49:12 +01:00
										 |  |  |     QAtomicInt m_processingTraceIndex; | 
					
						
							| 
									
										
										
										
											2021-05-29 12:22:43 +02:00
										 |  |  |     GLScopeSettings::TriggerData m_focusedTriggerData; | 
					
						
							| 
									
										
										
										
											2017-02-13 00:17:59 +01:00
										 |  |  |     //int m_traceCounter;
 | 
					
						
							| 
									
										
										
										
											2017-02-06 02:40:31 +01:00
										 |  |  |     uint32_t m_bufferIndex; | 
					
						
							| 
									
										
										
										
											2017-01-29 19:51:45 +01:00
										 |  |  |     DisplayMode m_displayMode; | 
					
						
							| 
									
										
										
										
											2019-10-14 01:42:24 +02:00
										 |  |  |     bool m_displayPolGrid; | 
					
						
							| 
									
										
										
										
											2017-01-29 19:51:45 +01:00
										 |  |  |     QTimer m_timer; | 
					
						
							| 
									
										
										
										
											2020-10-07 21:28:32 +02:00
										 |  |  |     const QTimer *m_masterTimer; | 
					
						
							| 
									
										
										
										
											2017-01-29 19:51:45 +01:00
										 |  |  |     QMutex m_mutex; | 
					
						
							| 
									
										
										
										
											2018-11-20 08:00:19 +01:00
										 |  |  |     QAtomicInt m_dataChanged; | 
					
						
							| 
									
										
										
										
											2017-01-29 19:51:45 +01:00
										 |  |  |     bool m_configChanged; | 
					
						
							|  |  |  |     int m_sampleRate; | 
					
						
							|  |  |  |     int m_timeOfsProMill; | 
					
						
							| 
									
										
										
										
											2017-02-07 18:50:08 +01:00
										 |  |  |     uint32_t m_triggerPre; | 
					
						
							| 
									
										
										
										
											2017-01-29 19:51:45 +01:00
										 |  |  |     int m_traceSize; | 
					
						
							| 
									
										
										
										
											2019-10-15 22:51:30 +02:00
										 |  |  |     int m_traceModulo; //!< ineffective if <2
 | 
					
						
							| 
									
										
										
										
											2017-01-29 19:51:45 +01:00
										 |  |  |     int m_timeBase; | 
					
						
							| 
									
										
										
										
											2017-02-05 04:41:32 +01:00
										 |  |  |     int m_timeOffset; | 
					
						
							| 
									
										
										
										
											2017-02-13 01:32:02 +01:00
										 |  |  |     uint32_t m_focusedTraceIndex; | 
					
						
							| 
									
										
										
										
											2017-01-29 19:51:45 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     // graphics stuff
 | 
					
						
							|  |  |  |     QRectF m_glScopeRect1; | 
					
						
							|  |  |  |     QRectF m_glScopeRect2; | 
					
						
							|  |  |  |     QMatrix4x4 m_glScopeMatrix1; | 
					
						
							|  |  |  |     QMatrix4x4 m_glScopeMatrix2; | 
					
						
							|  |  |  |     QMatrix4x4 m_glLeft1ScaleMatrix; | 
					
						
							|  |  |  |     QMatrix4x4 m_glRight1ScaleMatrix; | 
					
						
							|  |  |  |     QMatrix4x4 m_glLeft2ScaleMatrix; | 
					
						
							|  |  |  |     QMatrix4x4 m_glBot1ScaleMatrix; | 
					
						
							|  |  |  |     QMatrix4x4 m_glBot2ScaleMatrix; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     QPixmap m_left1ScalePixmap; | 
					
						
							|  |  |  |     QPixmap m_left2ScalePixmap; | 
					
						
							|  |  |  |     QPixmap m_bot1ScalePixmap; | 
					
						
							|  |  |  |     QPixmap m_bot2ScalePixmap; | 
					
						
							| 
									
										
										
										
											2017-02-26 04:46:02 +01:00
										 |  |  |     QPixmap m_channelOverlayPixmap1; | 
					
						
							|  |  |  |     QPixmap m_channelOverlayPixmap2; | 
					
						
							| 
									
										
										
										
											2017-01-29 19:51:45 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     int m_displayGridIntensity; | 
					
						
							|  |  |  |     int m_displayTraceIntensity; | 
					
						
							| 
									
										
										
										
											2018-05-15 00:30:01 +02:00
										 |  |  |     bool m_displayXYPoints; | 
					
						
							| 
									
										
										
										
											2017-01-29 19:51:45 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     ScaleEngine m_x1Scale; //!< Display #1 X scale. Time scale
 | 
					
						
							|  |  |  |     ScaleEngine m_x2Scale; //!< Display #2 X scale. Time scale
 | 
					
						
							|  |  |  |     ScaleEngine m_y1Scale; //!< Display #1 Y scale. Always connected to trace #0 (X trace)
 | 
					
						
							|  |  |  |     ScaleEngine m_y2Scale; //!< Display #2 Y scale. Connected to highlighted Y trace (#1..n)
 | 
					
						
							| 
									
										
										
										
											2022-05-28 23:44:53 +02:00
										 |  |  |     bool m_xScaleFreq;              //!< Force frequency display on time line for correlation modes
 | 
					
						
							|  |  |  |     qint64 m_xScaleCenterFrequency; //!< Frequency time line mode center frequency
 | 
					
						
							|  |  |  |     int m_xScaleFrequencySpan;      //!< Frequency time line mode frequency span
 | 
					
						
							| 
									
										
										
										
											2017-01-29 19:51:45 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-26 04:46:02 +01:00
										 |  |  |     QFont m_channelOverlayFont; | 
					
						
							| 
									
										
										
										
											2020-07-06 02:44:11 +02:00
										 |  |  |     QFont m_textOverlayFont; | 
					
						
							| 
									
										
										
										
											2017-01-29 19:51:45 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     GLShaderSimple m_glShaderSimple; | 
					
						
							| 
									
										
										
										
											2019-10-15 01:24:36 +02:00
										 |  |  |     GLShaderColors m_glShaderColors; | 
					
						
							| 
									
										
										
										
											2017-01-29 19:51:45 +01:00
										 |  |  |     GLShaderTextured m_glShaderLeft1Scale; | 
					
						
							|  |  |  |     GLShaderTextured m_glShaderBottom1Scale; | 
					
						
							|  |  |  |     GLShaderTextured m_glShaderLeft2Scale; | 
					
						
							|  |  |  |     GLShaderTextured m_glShaderBottom2Scale; | 
					
						
							|  |  |  |     GLShaderTextured m_glShaderPowerOverlay; | 
					
						
							| 
									
										
										
										
											2020-07-06 02:44:11 +02:00
										 |  |  |     GLShaderTextured m_glShaderTextOverlay; | 
					
						
							| 
									
										
										
										
											2017-01-29 19:51:45 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-03-01 02:33:18 +01:00
										 |  |  |     IncrementalArray<GLfloat> m_q3Polar; | 
					
						
							|  |  |  |     IncrementalArray<GLfloat> m_q3TickY1; | 
					
						
							|  |  |  |     IncrementalArray<GLfloat> m_q3TickY2; | 
					
						
							|  |  |  |     IncrementalArray<GLfloat> m_q3TickX1; | 
					
						
							|  |  |  |     IncrementalArray<GLfloat> m_q3TickX2; | 
					
						
							| 
									
										
										
										
											2019-10-14 18:50:40 +02:00
										 |  |  |     IncrementalArray<GLfloat> m_q3Radii;  //!< Polar grid radii
 | 
					
						
							|  |  |  |     IncrementalArray<GLfloat> m_q3Circle; //!< Polar grid unit circle
 | 
					
						
							| 
									
										
										
										
											2019-10-15 01:24:36 +02:00
										 |  |  |     IncrementalArray<GLfloat> m_q3Colors; //!< Colors for trace rainbow palette
 | 
					
						
							| 
									
										
										
										
											2018-03-01 02:33:18 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-01-29 19:51:45 +01:00
										 |  |  |     static const int m_topMargin = 5; | 
					
						
							|  |  |  |     static const int m_botMargin = 20; | 
					
						
							|  |  |  |     static const int m_leftMargin = 35; | 
					
						
							|  |  |  |     static const int m_rightMargin = 5; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-14 18:50:40 +02:00
										 |  |  |     static const GLfloat m_q3RadiiConst[]; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-01-29 19:51:45 +01:00
										 |  |  |     void initializeGL(); | 
					
						
							|  |  |  |     void resizeGL(int width, int height); | 
					
						
							|  |  |  |     void paintGL(); | 
					
						
							| 
									
										
										
										
											2020-07-06 02:44:11 +02:00
										 |  |  |     void drawMarkers(); | 
					
						
							| 
									
										
										
										
											2017-01-29 19:51:45 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     void applyConfig(); | 
					
						
							|  |  |  |     void setYScale(ScaleEngine& scale, uint32_t highlightedTraceIndex); | 
					
						
							| 
									
										
										
										
											2017-02-15 01:07:19 +01:00
										 |  |  |     void setUniqueDisplays();     //!< Arrange displays when X and Y are unique on screen
 | 
					
						
							|  |  |  |     void setVerticalDisplays();   //!< Arrange displays when X and Y are stacked vertically
 | 
					
						
							|  |  |  |     void setHorizontalDisplays(); //!< Arrange displays when X and Y are stacked horizontally
 | 
					
						
							| 
									
										
										
										
											2017-02-15 02:02:28 +01:00
										 |  |  |     void setPolarDisplays();      //!< Arrange displays when X and Y are stacked over on the left and polar display is on the right
 | 
					
						
							| 
									
										
										
										
											2017-01-29 19:51:45 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-07-06 02:44:11 +02:00
										 |  |  |     void mousePressEvent(QMouseEvent* event); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-26 04:46:02 +01:00
										 |  |  |     void drawChannelOverlay(      //!< Draws a text overlay
 | 
					
						
							|  |  |  |             const QString& text, | 
					
						
							| 
									
										
										
										
											2017-02-26 06:06:59 +01:00
										 |  |  |             const QColor& color, | 
					
						
							| 
									
										
										
										
											2017-02-26 04:46:02 +01:00
										 |  |  |             QPixmap& channelOverlayPixmap, | 
					
						
							| 
									
										
										
										
											2017-02-26 06:06:59 +01:00
										 |  |  |             const QRectF& glScopeRect); | 
					
						
							| 
									
										
										
										
											2020-07-06 02:44:11 +02:00
										 |  |  |     void drawTextOverlay(      //!< Draws a text overlay
 | 
					
						
							|  |  |  |             const QString& text, | 
					
						
							|  |  |  |             const QColor& color, | 
					
						
							|  |  |  |             const QFont& font, | 
					
						
							|  |  |  |             float shiftX, | 
					
						
							|  |  |  |             float shiftY, | 
					
						
							|  |  |  |             bool leftHalf, | 
					
						
							|  |  |  |             bool topHalf, | 
					
						
							|  |  |  |             const QRectF& glRect); | 
					
						
							| 
									
										
										
										
											2017-02-26 04:46:02 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-14 01:42:24 +02:00
										 |  |  |     static bool isPositiveProjection(Projector::ProjectionType& projectionType) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         return (projectionType == Projector::ProjectionMagLin) | 
					
						
							|  |  |  |             || (projectionType == Projector::ProjectionMagDB) | 
					
						
							|  |  |  |             || (projectionType == Projector::ProjectionMagSq); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-14 18:50:40 +02:00
										 |  |  |     void drawRectGrid2(); | 
					
						
							|  |  |  |     void drawPolarGrid2(); | 
					
						
							| 
									
										
										
										
											2020-07-06 02:44:11 +02:00
										 |  |  |     QString displayScaled(float value, char type, int precision); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-14 18:50:40 +02:00
										 |  |  |     static void drawCircle(float cx, float cy, float r, int num_segments, bool dotted, GLfloat *vertices); | 
					
						
							| 
									
										
										
										
											2019-10-15 22:51:30 +02:00
										 |  |  |     static void setColorPalette(int nbVertices, int modulo, GLfloat *colors); | 
					
						
							| 
									
										
										
										
											2019-10-14 18:50:40 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-01-29 19:51:45 +01:00
										 |  |  | protected slots: | 
					
						
							|  |  |  |     void cleanup(); | 
					
						
							|  |  |  |     void tick(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #endif /* SDRBASE_GUI_GLSCOPENG_H_ */
 |