Double-click a meter to change the type.

creator-widgets
Elliott Liggett 2024-02-05 21:03:08 -08:00
rodzic 3c7e19174c
commit 5f7e39ebb5
4 zmienionych plików z 169 dodań i 0 usunięć

Wyświetl plik

@ -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
Wyświetl plik

@ -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;

Wyświetl plik

@ -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)

Wyświetl plik

@ -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)