diff --git a/plugins/feature/freqdisplay/freqdisplaygui.cpp b/plugins/feature/freqdisplay/freqdisplaygui.cpp index 741b0bdad..444999474 100644 --- a/plugins/feature/freqdisplay/freqdisplaygui.cpp +++ b/plugins/feature/freqdisplay/freqdisplaygui.cpp @@ -16,11 +16,14 @@ // along with this program. If not, see . // /////////////////////////////////////////////////////////////////////////////////// +#include #include #include #include #include #include +#include +#include #include #include #include @@ -76,7 +79,6 @@ FreqDisplayOverlay::FreqDisplayOverlay(QWidget* parent) m_label = new QLabel(this); m_label->setAlignment(Qt::AlignCenter); m_label->setWordWrap(true); - m_label->setStyleSheet("color: white;"); QVBoxLayout* layout = new QVBoxLayout(this); layout->setContentsMargins(0, 0, 0, 0); @@ -269,7 +271,9 @@ void FreqDisplayGUI::displaySettings() // Must come after frequencyUnits is set so the range/enabled state is correct updateFreqDecimalSpinbox(); + updateTextColorButton(); applyTransparency(); + applyTextColor(); applySpeech(); updateChannelList(); } @@ -293,6 +297,7 @@ void FreqDisplayGUI::applySettings(bool force) settingsKeys.append("showUnits"); settingsKeys.append("freqDecimalPlaces"); settingsKeys.append("powerDecimalPlaces"); + settingsKeys.append("textColor"); m_freqDisplay->applySettings(m_settings, settingsKeys, force); } @@ -561,6 +566,7 @@ void FreqDisplayGUI::applyTransparency() // Position the overlay at the current screen position of FreqDisplayGUI. m_overlay->move(mapToGlobal(QPoint(0, 0))); m_overlay->resize(size()); + applyTextColor(); m_overlay->show(); } hide(); @@ -579,6 +585,7 @@ void FreqDisplayGUI::applyTransparency() m_overlay = nullptr; } show(); + applyTextColor(); updateFrequencyFont(); } } @@ -594,6 +601,36 @@ void FreqDisplayGUI::applySpeech() #endif } +void FreqDisplayGUI::applyTextColor() +{ + const QString styleSheet = QString("color: %1;").arg(m_settings.m_textColor.name()); + if (m_overlay) { + m_overlay->label()->setStyleSheet(styleSheet); + } else { + ui->frequencyValue->setStyleSheet(styleSheet); + } +} + +void FreqDisplayGUI::updateTextColorButton() +{ + QPixmap pm(16, 16); + pm.fill(m_settings.m_textColor); + ui->textColor->setIcon(pm); +} + +void FreqDisplayGUI::on_textColor_clicked() +{ + const QColor color = QColorDialog::getColor( + m_settings.m_textColor, this, tr("Select text color"), QColorDialog::DontUseNativeDialog); + if (color.isValid()) + { + m_settings.m_textColor = color; + updateTextColorButton(); + applyTextColor(); + applySettings(); + } +} + void FreqDisplayGUI::on_displayMode_currentIndexChanged(int index) { m_settings.m_displayMode = static_cast(index); diff --git a/plugins/feature/freqdisplay/freqdisplaygui.h b/plugins/feature/freqdisplay/freqdisplaygui.h index 0ec98f7cc..b0a45e699 100644 --- a/plugins/feature/freqdisplay/freqdisplaygui.h +++ b/plugins/feature/freqdisplay/freqdisplaygui.h @@ -120,6 +120,8 @@ private: void updateFreqDecimalSpinbox(); void applyTransparency(); void applySpeech(); + void applyTextColor(); + void updateTextColorButton(); QString formatFrequency(qint64 frequencyHz) const; private slots: @@ -133,6 +135,7 @@ private slots: void on_showUnits_toggled(bool checked); void on_freqDecimalPlaces_valueChanged(int value); void on_powerDecimalPlaces_valueChanged(int value); + void on_textColor_clicked(); void pollSelectedChannel(); void onExitTransparentMode(); #ifdef QT_TEXTTOSPEECH_FOUND diff --git a/plugins/feature/freqdisplay/freqdisplaygui.ui b/plugins/feature/freqdisplay/freqdisplaygui.ui index 5dee0f78b..335d4444b 100644 --- a/plugins/feature/freqdisplay/freqdisplaygui.ui +++ b/plugins/feature/freqdisplay/freqdisplaygui.ui @@ -270,6 +270,22 @@ When in transparent mode: + + + + + 24 + 24 + + + + Select color for the frequency / power text + + + + + + diff --git a/plugins/feature/freqdisplay/freqdisplaysettings.cpp b/plugins/feature/freqdisplay/freqdisplaysettings.cpp index 6cc747445..c73696a20 100644 --- a/plugins/feature/freqdisplay/freqdisplaysettings.cpp +++ b/plugins/feature/freqdisplay/freqdisplaysettings.cpp @@ -16,6 +16,8 @@ // along with this program. If not, see . // /////////////////////////////////////////////////////////////////////////////////// +#include + #include "util/simpleserializer.h" #include "freqdisplaysettings.h" @@ -39,6 +41,7 @@ void FreqDisplaySettings::resetToDefaults() m_showUnits = true; m_freqDecimalPlaces = 3; m_powerDecimalPlaces = 1; + m_textColor = Qt::white; } QByteArray FreqDisplaySettings::serialize() const @@ -57,6 +60,7 @@ QByteArray FreqDisplaySettings::serialize() const s.writeBool(10, m_showUnits); s.writeS32(11, m_freqDecimalPlaces); s.writeS32(12, m_powerDecimalPlaces); + s.writeU32(13, m_textColor.rgba()); return s.final(); } @@ -93,6 +97,9 @@ bool FreqDisplaySettings::deserialize(const QByteArray& data) d.readBool(10, &m_showUnits, true); d.readS32(11, &m_freqDecimalPlaces, 3); d.readS32(12, &m_powerDecimalPlaces, 1); + quint32 rgba = QColor(Qt::white).rgba(); + d.readU32(13, &rgba, QColor(Qt::white).rgba()); + m_textColor = QColor::fromRgba(rgba); return true; } @@ -135,4 +142,7 @@ void FreqDisplaySettings::applySettings(const QStringList& settingsKeys, const F if (settingsKeys.contains("powerDecimalPlaces")) { m_powerDecimalPlaces = settings.m_powerDecimalPlaces; } + if (settingsKeys.contains("textColor")) { + m_textColor = settings.m_textColor; + } } diff --git a/plugins/feature/freqdisplay/freqdisplaysettings.h b/plugins/feature/freqdisplay/freqdisplaysettings.h index fa5d5622f..fceb2d825 100644 --- a/plugins/feature/freqdisplay/freqdisplaysettings.h +++ b/plugins/feature/freqdisplay/freqdisplaysettings.h @@ -20,6 +20,7 @@ #define INCLUDE_FEATURE_FREQDISPLAYSETTINGS_H_ #include +#include #include #include @@ -50,6 +51,7 @@ struct FreqDisplaySettings bool m_showUnits; //!< Whether to append unit labels to displayed values int m_freqDecimalPlaces; //!< Decimal places for frequency value (max depends on units: kHz→3, MHz→6, GHz→9) int m_powerDecimalPlaces; //!< Decimal places for power value (0–3) + QColor m_textColor; //!< Color of the frequency / power text FreqDisplaySettings(); ~FreqDisplaySettings() = default;