1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158
|
#ifndef METER_H
#define METER_H
#include <QDebug>
#include <QStandardItemModel>
#include <QComboBox>
#include <QWidget>
#include <QPainter>
#include <QImage>
#include <QFontMetrics>
#include <vector>
#include <algorithm>
#include <numeric>
#include <math.h>
#include <cmath>
#include "rigcommander.h" // for meter types
#include "audiotaper.h"
class meter : public QWidget
{
Q_OBJECT
public:
explicit meter(QWidget *parent = nullptr);
signals:
void configureMeterSignal(meter_t type);
public slots:
void paintEvent(QPaintEvent *);
void updateDrawing(int num);
void setLevels(double current, double peak, double average);
void setLevels(double current, double peak); // calculate avg
void setLevel(double current);
void setCompReverse(bool reverse);
void setUseGradients(bool useGrads);
void clearMeterOnPTTtoggle();
void clearMeter();
void setMeterType(meter_t type);
void setMeterShortString(QString);
QString getMeterShortString();
meter_t getMeterType();
void setColors(QColor current, QColor peakScale, QColor peakLevel,
QColor average, QColor lowLine,
QColor lowText);
void blockMeterType(meter_t type);
void enableCombo(bool en) { combo->setEnabled(en); }
void setMeterExtremities(double min, double max, double redline);
private slots:
void acceptComboItem(int item);
private:
//QPainter painter;
bool eventFilter(QObject *object, QEvent *event);
void handleDoubleClick();
bool freezeDrawing = false;
QComboBox *combo = NULL;
QImage *scaleCache = NULL;
bool scaleReady = false;
meter_t meterType;
meter_t lastDrawMeterType;
bool recentlyChangedParameters = false;
QString meterShortString;
double scaleMin = 0;
double scaleMax = 255;
double scaleRedline = 128;
bool haveExtremities = false;
bool haveUpdatedData = false;
bool haveReceivedSomeData = false;
int fontSize = 10;
int length=30;
double current=0.0;
double peak = 0.0;
double average = 0.0;
int currentRect = 0;
int averageRect = 0;
int peakRect = 0;
bool reverseCompMeter = true;
int averageBalisticLength = 30;
int peakBalisticLength = 30;
int avgPosition=0;
int peakPosition=0;
std::vector<double_t> avgLevels;
std::vector<double_t> peakLevels;
int peakRedLevel=0;
bool drawLabels = true;
int labelWidth = 0;
bool useGradients = true;
int mXstart = 0; // Starting point for S=0.
int mYstart = 14; // height, down from top, where the drawing starts
int barHeight = 10; // Height of meter "bar" indicators
int scaleLineYstart = 12;
int scaleTextYstart = 10;
int widgetWindowHeight = mYstart + barHeight + 0; // height of drawing canvis.
// These functions scale the data to fit the meter:
void prepareValue_dBuEMFdBm();
void scaleLinearNumbersForDrawing(); // input = current, average, peak, output = currentRect, averageRect, peakRect
void scaleLogNumbersForDrawing(); // for audio
double getValueFromPixelScale(int p); // pixel (0-255) scale to values
int getPixelScaleFromValue(double v); // scale value to pixel (0-255)
int nearestStep(double val, int stepSize); // round to nearest step
// These functions draw the rectangular bars
// for the level(s) to be represented:
void drawValue_Linear(QPainter *qp, bool reverse); // anything you wish 0-255
void drawValue_Log(QPainter *qp);
void drawValue_Center(QPainter *qp);
// These functions draw the meter scale:
void regenerateScale(QPainter *screenPainterHints);
void recallScale(QPainter *qp);
void drawScaleS(QPainter *qp);
void drawScaleCenter(QPainter *qp);
void drawScalePo(QPainter *qp);
void drawScaleRxdB(QPainter *qp);
void drawScaleALC(QPainter *qp);
void drawScaleSWR(QPainter *qp);
void drawScaleVd(QPainter *qp);
void drawScaleId(QPainter *qp);
void drawScaleComp(QPainter *qp);
void drawScaleCompInverted(QPainter *qp);
void drawScale_dBFs(QPainter *qp);
void drawScaleRaw(QPainter *qp);
void drawScaledBPositive(QPainter *qp);
void drawScaledBNegative(QPainter *qp);
void drawLabel(QPainter *qp);
void muteSingleComboItem(QComboBox *comboBox, int index);
void enableAllComboBoxItems(QComboBox *combobox, bool en=true);
void setComboBoxItemEnabled(QComboBox * comboBox, int index, bool enabled);
QString label;
QColor currentColor;
QColor averageColor;
QColor peakColor;
// S0-S9:
QColor lowTextColor;
QColor lowLineColor;
// S9+:
QColor highTextColor;
QColor highLineColor;
QColor midScaleColor;
QColor centerTuningColor;
};
#endif // METER_H
|