kopia lustrzana https://gitlab.com/eliggett/wfview
Double-click a meter to change the type.
rodzic
3c7e19174c
commit
5f7e39ebb5
84
meter.cpp
84
meter.cpp
|
@ -46,6 +46,26 @@ meter::meter(QWidget *parent) : QWidget(parent)
|
|||
avgLevels.resize(averageBalisticLength, 0);
|
||||
peakLevels.resize(peakBalisticLength, 0);
|
||||
|
||||
combo = new QComboBox(this);
|
||||
combo->blockSignals(true);
|
||||
combo->addItem("None", meterNone);
|
||||
combo->addItem("SWR", meterSWR);
|
||||
combo->addItem("ALC", meterALC);
|
||||
combo->addItem("Compression", meterComp);
|
||||
combo->addItem("Voltage", meterVoltage);
|
||||
combo->addItem("Current", meterCurrent);
|
||||
combo->addItem("Center", meterCenter);
|
||||
combo->addItem("TxRxAudio", meterAudio);
|
||||
combo->addItem("RxAudio", meterRxAudio);
|
||||
combo->addItem("TxAudio", meterTxMod);
|
||||
combo->blockSignals(false);
|
||||
|
||||
connect(combo, SIGNAL(activated(int)), this, SLOT(acceptComboItem(int)));
|
||||
//connect(combo, SIGNAL(currentIndexChanged(int)), this, SLOT(acceptComboItem(int)));
|
||||
|
||||
combo->hide();
|
||||
this->installEventFilter(this);
|
||||
|
||||
}
|
||||
|
||||
void meter::setColors(QColor current, QColor peakScale, QColor peakLevel,
|
||||
|
@ -111,6 +131,16 @@ void meter::setMeterType(meter_t type)
|
|||
this->clearMeter();
|
||||
}
|
||||
|
||||
void meter::blockMeterType(meter_t mtype) {
|
||||
// TODO: Code to block off duplicate meter types from the selection menu
|
||||
enableAllComboBoxItems(combo);
|
||||
qDebug() << "Asked to block meter of type: " << getMeterDebug(mtype);
|
||||
if(mtype != meterNone) {
|
||||
int m_index = combo->findData(mtype);
|
||||
setComboBoxItemEnabled(combo, m_index, false);
|
||||
}
|
||||
}
|
||||
|
||||
meter_t meter::getMeterType()
|
||||
{
|
||||
return meterType;
|
||||
|
@ -126,8 +156,38 @@ QString meter::getMeterShortString()
|
|||
return meterShortString;
|
||||
}
|
||||
|
||||
void meter::acceptComboItem(int item) {
|
||||
qDebug() << "Meter selected combo item number: " << item;
|
||||
|
||||
meter_t meterTypeRequested = static_cast<meter_t>(combo->itemData(item).toInt());
|
||||
if(meterType != meterTypeRequested) {
|
||||
qDebug() << "Changing meter to type: " << getMeterDebug(meterTypeRequested) << ", with item index: " << item;
|
||||
emit configureMeterSignal(meterTypeRequested);
|
||||
}
|
||||
|
||||
combo->hide();
|
||||
freezeDrawing = false;
|
||||
}
|
||||
|
||||
void meter::handleDoubleClick() {
|
||||
freezeDrawing = true;
|
||||
combo->show();
|
||||
}
|
||||
|
||||
bool meter::eventFilter(QObject *object, QEvent *event) {
|
||||
if(event->type() == QEvent::MouseButtonDblClick) {
|
||||
qDebug() << "Mouse double click event in meter widget";
|
||||
handleDoubleClick();
|
||||
return true;
|
||||
}
|
||||
(void)object;
|
||||
return false;
|
||||
}
|
||||
|
||||
void meter::paintEvent(QPaintEvent *)
|
||||
{
|
||||
if(freezeDrawing)
|
||||
return;
|
||||
QPainter painter(this);
|
||||
// This next line sets up a canvis within the
|
||||
// space of the widget, and gives it coordinates.
|
||||
|
@ -714,3 +774,27 @@ void meter::drawScaleS(QPainter *qp)
|
|||
qp->setPen(highLineColor);
|
||||
qp->drawLine(peakRedLevel+mXstart,scaleLineYstart,255+mXstart,scaleLineYstart);
|
||||
}
|
||||
|
||||
void meter::muteSingleComboItem(QComboBox *comboBox, int index) {
|
||||
enableAllComboBoxItems(comboBox);
|
||||
setComboBoxItemEnabled(comboBox, index, false);
|
||||
}
|
||||
|
||||
void meter::enableAllComboBoxItems(QComboBox *combobox) {
|
||||
for(int i=0; i < combobox->count(); i++) {
|
||||
setComboBoxItemEnabled(combobox, i, true);
|
||||
}
|
||||
}
|
||||
|
||||
void meter::setComboBoxItemEnabled(QComboBox * comboBox, int index, bool enabled)
|
||||
{
|
||||
auto * model = qobject_cast<QStandardItemModel*>(comboBox->model());
|
||||
assert(model);
|
||||
if(!model) return;
|
||||
|
||||
auto * item = model->item(index);
|
||||
assert(item);
|
||||
if(!item) return;
|
||||
item->setEnabled(enabled);
|
||||
}
|
||||
|
||||
|
|
15
meter.h
15
meter.h
|
@ -1,6 +1,9 @@
|
|||
#ifndef METER_H
|
||||
#define METER_H
|
||||
|
||||
#include <QDebug>
|
||||
#include <QStandardItemModel>
|
||||
#include <QComboBox>
|
||||
#include <QWidget>
|
||||
#include <QPainter>
|
||||
#include <vector>
|
||||
|
@ -18,6 +21,7 @@ public:
|
|||
explicit meter(QWidget *parent = nullptr);
|
||||
|
||||
signals:
|
||||
void configureMeterSignal(meter_t type);
|
||||
|
||||
public slots:
|
||||
void paintEvent(QPaintEvent *);
|
||||
|
@ -35,10 +39,17 @@ public slots:
|
|||
void setColors(QColor current, QColor peakScale, QColor peakLevel,
|
||||
QColor average, QColor lowLine,
|
||||
QColor lowText);
|
||||
void blockMeterType(meter_t type);
|
||||
|
||||
private slots:
|
||||
void acceptComboItem(int item);
|
||||
|
||||
private:
|
||||
//QPainter painter;
|
||||
bool eventFilter(QObject *object, QEvent *event);
|
||||
void handleDoubleClick();
|
||||
bool freezeDrawing = false;
|
||||
QComboBox *combo = NULL;
|
||||
meter_t meterType;
|
||||
QString meterShortString;
|
||||
int fontSize = 10;
|
||||
|
@ -78,6 +89,10 @@ private:
|
|||
|
||||
void drawLabel(QPainter *qp);
|
||||
|
||||
void muteSingleComboItem(QComboBox *comboBox, int index);
|
||||
void enableAllComboBoxItems(QComboBox *combobox);
|
||||
void setComboBoxItemEnabled(QComboBox * comboBox, int index, bool enabled);
|
||||
|
||||
QString label;
|
||||
|
||||
QColor currentColor;
|
||||
|
|
21
wfmain.cpp
21
wfmain.cpp
|
@ -247,6 +247,27 @@ wfmain::wfmain(const QString settingsFile, const QString logFile, bool debugMode
|
|||
QToolTip::showText(QCursor::pos(), QString("%1").arg(value*100/255), nullptr);
|
||||
});
|
||||
|
||||
connect(ui->meter2Widget, &meter::configureMeterSignal,
|
||||
[=](const meter_t &meterTypeRequested) {
|
||||
// Change the preferences and update settings widget to reflect new meter selection:
|
||||
prefs.meter2Type = meterTypeRequested;
|
||||
setupui->updateIfPref(if_meter2Type);
|
||||
// Change the meter locally:
|
||||
changeMeterType(meterTypeRequested, 2);
|
||||
// Block duplicate meter selection in the other meter:
|
||||
ui->meter3Widget->blockMeterType(meterTypeRequested);
|
||||
});
|
||||
|
||||
connect(ui->meter3Widget, &meter::configureMeterSignal,
|
||||
[=](const meter_t &meterTypeRequested) {
|
||||
// Change the preferences and update settings widget to reflect new meter selection:
|
||||
prefs.meter3Type = meterTypeRequested;
|
||||
setupui->updateIfPref(if_meter3Type);
|
||||
// Change the meter locally:
|
||||
changeMeterType(meterTypeRequested, 3);
|
||||
// Block duplicate meter selection in the other meter:
|
||||
ui->meter2Widget->blockMeterType(meterTypeRequested);
|
||||
});
|
||||
|
||||
#if defined(USB_CONTROLLER)
|
||||
#if defined(USB_HOTPLUG) && defined(Q_OS_LINUX)
|
||||
|
|
|
@ -29,6 +29,7 @@ enum meter_t {
|
|||
meterLatency
|
||||
};
|
||||
|
||||
|
||||
enum spectrumMode_t {
|
||||
spectModeCenter=0x00,
|
||||
spectModeFixed=0x01,
|
||||
|
@ -412,6 +413,54 @@ enum usbCommandType{ commandButton, commandKnob, commandAny };
|
|||
enum usbFeatureType { featureReset,featureResetKeys, featureEventsA, featureEventsB, featureFirmware, featureSerial, featureButton, featureSensitivity, featureBrightness,
|
||||
featureOrientation, featureSpeed, featureColor, featureOverlay, featureTimeout, featureLCD, featureGraph, featureLEDControl };
|
||||
|
||||
inline QString getMeterDebug(meter_t m) {
|
||||
QString rtn = QString("Meter name: ");
|
||||
switch(m) {
|
||||
case meterNone:
|
||||
rtn.append("meterNone");
|
||||
break;
|
||||
case meterS:
|
||||
rtn.append("meterS");
|
||||
break;
|
||||
case meterCenter:
|
||||
rtn.append("meterCenter");
|
||||
break;
|
||||
case meterSWR:
|
||||
rtn.append("meterSWR");
|
||||
break;
|
||||
case meterPower:
|
||||
rtn.append("meterPower");
|
||||
break;
|
||||
case meterALC:
|
||||
rtn.append("meterALC");
|
||||
break;
|
||||
case meterComp:
|
||||
rtn.append("meterComp");
|
||||
break;
|
||||
case meterVoltage:
|
||||
rtn.append("meterVoltage");
|
||||
break;
|
||||
case meterCurrent:
|
||||
rtn.append("meterCurrent");
|
||||
break;
|
||||
case meterRxdB:
|
||||
rtn.append("meterRxdB");
|
||||
break;
|
||||
case meterTxMod:
|
||||
rtn.append("meterTxMod");
|
||||
break;
|
||||
case meterRxAudio:
|
||||
rtn.append("meterRxAudio");
|
||||
break;
|
||||
case meterLatency:
|
||||
rtn.append("meterLatency");
|
||||
break;
|
||||
default:
|
||||
rtn.append("UNKNOWN");
|
||||
break;
|
||||
}
|
||||
return rtn;
|
||||
}
|
||||
|
||||
Q_DECLARE_METATYPE(freqt)
|
||||
Q_DECLARE_METATYPE(spectrumMode_t)
|
||||
|
|
Ładowanie…
Reference in New Issue