From b8ba9a16dc9db063144a27edc3c49451e7ee694d Mon Sep 17 00:00:00 2001 From: Elliott Liggett Date: Tue, 23 Aug 2022 10:35:59 -0700 Subject: [PATCH] Added protection against transparent colors. Added revert feature to revert to default color preset for the selected preset. Added save single preset capability. --- wfmain.cpp | 268 +++++++++++++++++++++++++++++++++-------------------- wfmain.h | 5 +- 2 files changed, 169 insertions(+), 104 deletions(-) diff --git a/wfmain.cpp b/wfmain.cpp index a39b0f3..7a4bb0d 100644 --- a/wfmain.cpp +++ b/wfmain.cpp @@ -63,7 +63,6 @@ wfmain::wfmain(const QString serialPortCL, const QString hostCL, const QString s setupPlots(); setDefaultColorPresets(); - setDefaultColors(); loadSettings(); // Look for saved preferences @@ -1381,7 +1380,7 @@ void wfmain::loadSettings() p = &(colorPreset[pn]); p->presetNum = settings->value("presetNum", p->presetNum).toInt(); tempName = settings->value("presetName", *p->presetName).toString(); - if((!tempName.isEmpty()) && tempName.length() < 33) + if((!tempName.isEmpty()) && tempName.length() < 11) { p->presetName->clear(); p->presetName->append(tempName); @@ -2598,63 +2597,111 @@ void wfmain::setAppTheme(bool isCustom) } } -void wfmain::setDefaultColors() +void wfmain::setDefaultColors(int presetNumber) { - // These are some intended built-in color schemes. - // They can be user-modified and may be restored simply - // by removing the relevent color preset preference file entries. + // These are the default color schemes + if(presetNumber > numColorPresetsTotal-1) + return; - colorPrefsType *pDark = &colorPreset[0]; - colorPrefsType *pLight = &colorPreset[1]; + colorPrefsType *p = &colorPreset[presetNumber]; - // Dark: - pDark->presetName->clear(); - pDark->presetName->append("Dark"); - pDark->plotBackground = QColor(0,0,0,255); - pDark->axisColor = QColor(Qt::white); - pDark->textColor = QColor(255,255,255,255); - pDark->gridColor = QColor("transparent"); - pDark->spectrumFill = QColor("transparent"); - pDark->spectrumLine = QColor(Qt::yellow); - //pDark->underlayLine = QColor(20+200/4.0*1,70*(1.6-1/4.0), 150, 150).lighter(200); - pDark->underlayLine = QColor("#9633ff55"); - pDark->underlayFill = QColor(20+200/4.0*1,70*(1.6-1/4.0), 150, 150); - pDark->tuningLine = QColor("#ff55ffff"); + // Begin every parameter with these safe defaults first: + if(p->presetName == Q_NULLPTR) + { + p->presetName = new QString(); + } + p->presetName->clear(); + p->presetName->append(QString("%1").arg(presetNumber)); + p->presetNum = presetNumber; + p->gridColor = QColor(0,0,0,255); + p->axisColor = QColor(Qt::white); + p->textColor = QColor(Qt::white); + p->spectrumLine = QColor(Qt::yellow); + p->spectrumFill = QColor("transparent"); + p->underlayLine = QColor(20+200/4.0*1,70*(1.6-1/4.0), 150, 150).lighter(200); + p->underlayFill = QColor(20+200/4.0*1,70*(1.6-1/4.0), 150, 150); + p->plotBackground = QColor(Qt::black); + p->tuningLine = QColor(Qt::blue); - pDark->meterLevel = QColor("#148CD2").darker(); - pDark->meterAverage = QColor("#3FB7CD"); - pDark->meterPeakScale = QColor(Qt::red); - pDark->meterPeakLevel = QColor("#3CA0DB").lighter(); - pDark->meterLowerLine = QColor("#eff0f1"); - pDark->meterLowText = QColor("#eff0f1"); + p->meterLevel = QColor("#148CD2").darker(); + p->meterAverage = QColor("#3FB7CD"); + p->meterPeakLevel = QColor("#3CA0DB").lighter(); + p->meterPeakScale = QColor(Qt::red); + p->meterLowerLine = QColor("#eff0f1"); + p->meterLowText = QColor("#eff0f1"); - pDark->wfBackground = QColor(Qt::black); - pDark->wfAxis = QColor(Qt::white); - pDark->wfGrid = QColor("transparent"); - pDark->wfText = QColor(Qt::white); + p->wfBackground = QColor(Qt::black); + p->wfAxis = QColor(Qt::white); + p->wfGrid = QColor(Qt::white); + p->wfText = QColor(Qt::white); - // Bright: - pLight->presetName->clear(); - pLight->presetName->append("Bright"); - pLight->plotBackground = QColor(Qt::white); - pLight->axisColor = QColor(200,200,200,255); - pLight->gridColor = QColor("transparent"); - pLight->textColor = QColor(Qt::black); - pLight->spectrumFill = QColor("transparent"); - pLight->spectrumLine = QColor(Qt::black); - pLight->underlayLine = QColor(Qt::blue); - pLight->tuningLine = QColor(Qt::darkBlue); + //qInfo(logSystem()) << "default color preset [" << pn << "] set to pn.presetNum index [" << p->presetNum << "]" << ", with name " << *(p->presetName); - pLight->meterAverage = QColor("#3FB7CD"); - pLight->meterPeakLevel = QColor("#3CA0DB"); - pLight->meterPeakScale = QColor(Qt::darkRed); - pLight->meterLowerLine = QColor(Qt::black); - pLight->meterLowText = QColor(Qt::black); + switch (presetNumber) + { + case 0: + { + // Dark + p->presetName->clear(); + p->presetName->append("Dark"); + p->plotBackground = QColor(0,0,0,255); + p->axisColor = QColor(Qt::white); + p->textColor = QColor(255,255,255,255); + p->gridColor = QColor(0,0,0,255); + p->spectrumFill = QColor("transparent"); + p->spectrumLine = QColor(Qt::yellow); + p->underlayLine = QColor("#9633ff55"); + p->underlayFill = QColor(20+200/4.0*1,70*(1.6-1/4.0), 150, 150); + p->tuningLine = QColor("#ff55ffff"); - pLight->wfBackground = QColor(Qt::white); - pLight->wfAxis = QColor(200,200,200,255); - pLight->wfGrid = QColor("transparent"); - pLight->wfText = QColor(Qt::black); + p->meterLevel = QColor("#148CD2").darker(); + p->meterAverage = QColor("#3FB7CD"); + p->meterPeakScale = QColor(Qt::red); + p->meterPeakLevel = QColor("#3CA0DB").lighter(); + p->meterLowerLine = QColor("#eff0f1"); + p->meterLowText = QColor("#eff0f1"); + + p->wfBackground = QColor(Qt::black); + p->wfAxis = QColor(Qt::white); + p->wfGrid = QColor("transparent"); + p->wfText = QColor(Qt::white); + break; + } + case 1: + { + // Bright + p->presetName->clear(); + p->presetName->append("Bright"); + p->plotBackground = QColor(Qt::white); + p->axisColor = QColor(200,200,200,255); + p->gridColor = QColor(255,255,255,0); + p->textColor = QColor(Qt::black); + p->spectrumFill = QColor("transparent"); + p->spectrumLine = QColor(Qt::black); + p->underlayLine = QColor(Qt::blue); + p->tuningLine = QColor(Qt::darkBlue); + + p->meterAverage = QColor("#3FB7CD"); + p->meterPeakLevel = QColor("#3CA0DB"); + p->meterPeakScale = QColor(Qt::darkRed); + p->meterLowerLine = QColor(Qt::black); + p->meterLowText = QColor(Qt::black); + + p->wfBackground = QColor(Qt::white); + p->wfAxis = QColor(200,200,200,255); + p->wfGrid = QColor("transparent"); + p->wfText = QColor(Qt::black); + break; + } + + case 2: + case 3: + case 4: + default: + break; + + } + ui->colorPresetCombo->setItemText(presetNumber, *(p->presetName)); } void wfmain::doCmd(commandtype cmddata) @@ -6250,8 +6297,26 @@ QColor wfmain::getColorFromPicker(QColor initialColor) options.setFlag(QColorDialog::ShowAlphaChannel, true); options.setFlag(QColorDialog::DontUseNativeDialog, true); QColor selColor = QColorDialog::getColor(initialColor, this, "Select Color", options); + int alphaVal = 0; + bool ok = false; + if(selColor.isValid()) + { + if(selColor.alpha() == 0) + { + alphaVal = QInputDialog::getInt(this, tr("Specify Opacity"), + tr("You specified an opacity value of 0. \nDo you want to change it? (0=transparent, 255=opaque)"), 0, 0, 255, 1, + &ok); + if(!ok) + { + return selColor; + } else { + selColor.setAlpha(alphaVal); + return selColor; + } + } return selColor; + } else return initialColor; } @@ -6410,44 +6475,7 @@ void wfmain::setDefaultColorPresets() // gets overridden after preferences are loaded for(int pn=0; pn < numColorPresetsTotal; pn++) { - //qInfo(logSystem()) << "Setting default color preset " << pn; - colorPrefsType *p = &colorPreset[pn]; - - p->presetNum = pn; - if(p->presetName == Q_NULLPTR) - { - p->presetName = new QString( QString("Preset %1").arg(pn) ); - } - - // Colors are "#AARRGGBB" (AA=0xff is opaque) - // or as (r, g, b, a) - // Since the UI shows ##AARRGGBB, we should use - // that format in the code when convenient. - - p->gridColor = QColor(0,0,0,255); - p->axisColor = QColor(Qt::white); - p->textColor = QColor(Qt::white); - p->spectrumLine = QColor(Qt::yellow); - p->spectrumFill = QColor("transparent"); - p->underlayLine = QColor(20+200/4.0*1,70*(1.6-1/4.0), 150, 150).lighter(200); - p->underlayFill = QColor(20+200/4.0*1,70*(1.6-1/4.0), 150, 150); - p->plotBackground = QColor(Qt::black); - p->tuningLine = QColor(Qt::blue); - - p->meterLevel = QColor("#148CD2").darker(); - p->meterAverage = QColor("#3FB7CD"); - p->meterPeakLevel = QColor("#3CA0DB").lighter(); - p->meterPeakScale = QColor(Qt::red); - p->meterLowerLine = QColor("#eff0f1"); - p->meterLowText = QColor("#eff0f1"); - - p->wfBackground = QColor(Qt::black); - p->wfAxis = QColor(Qt::white); - p->wfGrid = QColor(Qt::white); - p->wfText = QColor(Qt::white); - - //qInfo(logSystem()) << "default color preset [" << pn << "] set to pn.presetNum index [" << p->presetNum << "]" << ", with name " << *(p->presetName); - ui->colorPresetCombo->setItemText(pn, *(p->presetName)); + setDefaultColors(pn); } } @@ -6508,21 +6536,21 @@ void wfmain::on_colorRenamePresetBtn_clicked() QMessageBox msgBox; bool ok = false; - newName = QInputDialog::getText(this, tr("QInputDialog::getText()"), - tr("Preset Name (32 characters max):"), QLineEdit::Normal, + newName = QInputDialog::getText(this, tr("Rename Preset"), + tr("Preset Name (10 characters max):"), QLineEdit::Normal, ui->colorPresetCombo->currentText(), &ok); if(!ok) return; - if(ok && (newName.length() < 33) && !newName.isEmpty()) + if(ok && (newName.length() < 11) && !newName.isEmpty()) { colorPreset[p].presetName->clear(); colorPreset[p].presetName->append(newName); ui->colorPresetCombo->setItemText(p, *(colorPreset[p].presetName)); } else { - if(newName.isEmpty() || (newName.length() > 32)) + if(newName.isEmpty() || (newName.length() > 10)) { - msgBox.setText("Error, name must be at least one character and not exceed 32 characters."); + msgBox.setText("Error, name must be at least one character and not exceed 10 characters."); msgBox.exec(); } } @@ -6534,6 +6562,13 @@ void wfmain::on_colorPresetCombo_currentIndexChanged(int index) loadColorPresetToUIandPlots(index); } +void wfmain::on_colorRevertPresetBtn_clicked() +{ + int pn = ui->colorPresetCombo->currentIndex(); + setDefaultColors(pn); + loadColorPresetToUIandPlots(pn); +} + // ---------- end color helper functions ---------- // // ---------- Color UI slots ----------// @@ -6807,14 +6842,41 @@ void wfmain::on_colorEditMeterText_editingFinished() // ---------- End color UI slots ----------// - -void wfmain::on_colorRevertPresetBtn_clicked() +void wfmain::on_colorSavePresetBtn_clicked() { - // revert to default colors: - // TODO: Add arguments to setDefaultColors() - //int pn = ui->colorPresetCombo->currentIndex(); - //setDefaultColors(); + int pn = ui->colorPresetCombo->currentIndex(); + + settings->beginGroup("ColorPresets"); + settings->setValue("currentColorPresetNumber", prefs.currentColorPresetNumber); + settings->beginWriteArray("ColorPreset", numColorPresetsTotal); + + colorPrefsType *p; + p = &(colorPreset[pn]); + + settings->setArrayIndex(pn); + settings->setValue("presetNum", p->presetNum); + settings->setValue("presetName", *(p->presetName)); + settings->setValue("gridColor", p->gridColor.name(QColor::HexArgb)); + settings->setValue("axisColor", p->axisColor.name(QColor::HexArgb)); + settings->setValue("textColor", p->textColor.name(QColor::HexArgb)); + settings->setValue("spectrumLine", p->spectrumLine.name(QColor::HexArgb)); + settings->setValue("spectrumFill", p->spectrumFill.name(QColor::HexArgb)); + settings->setValue("underlayLine", p->underlayLine.name(QColor::HexArgb)); + settings->setValue("underlayFill", p->underlayFill.name(QColor::HexArgb)); + settings->setValue("plotBackground", p->plotBackground.name(QColor::HexArgb)); + settings->setValue("tuningLine", p->tuningLine.name(QColor::HexArgb)); + settings->setValue("wfBackground", p->wfBackground.name(QColor::HexArgb)); + settings->setValue("wfGrid", p->wfGrid.name(QColor::HexArgb)); + settings->setValue("wfAxis", p->wfAxis.name(QColor::HexArgb)); + settings->setValue("wfText", p->wfText.name(QColor::HexArgb)); + settings->setValue("meterLevel", p->meterLevel.name(QColor::HexArgb)); + settings->setValue("meterAverage", p->meterAverage.name(QColor::HexArgb)); + settings->setValue("meterPeakScale", p->meterPeakScale.name(QColor::HexArgb)); + settings->setValue("meterPeakLevel", p->meterPeakLevel.name(QColor::HexArgb)); + settings->setValue("meterLowerLine", p->meterLowerLine.name(QColor::HexArgb)); + settings->setValue("meterLowText", p->meterLowText.name(QColor::HexArgb)); + + settings->endArray(); + settings->endGroup(); + settings->sync(); } - - - diff --git a/wfmain.h b/wfmain.h index d35c811..2504899 100644 --- a/wfmain.h +++ b/wfmain.h @@ -633,6 +633,8 @@ private slots: void on_colorEditMeterPeakScale_editingFinished(); + void on_colorSavePresetBtn_clicked(); + private: Ui::wfmain *ui; void closeEvent(QCloseEvent *event); @@ -881,7 +883,8 @@ private: audioSetup rxSetup; audioSetup txSetup; - void setDefaultColors(); // populate with default values + void setDefaultColors(int presetNumber); // populate with default values + void useColors(); // set the plot up void setDefPrefs(); // populate default values to default prefs void setTuningSteps();