Fixes to add_custom_layer_dialog suggested on GitHub

This commit is contained in:
AdenKoperczak 2025-03-28 11:28:11 -04:00
parent f5ab6f3ef7
commit 7d2635608d
4 changed files with 77 additions and 99 deletions

View file

@ -44,6 +44,7 @@ public:
void UpdateEditWidget(); void UpdateEditWidget();
void UpdateResetButton(); void UpdateResetButton();
void UpdateUnitLabel(); void UpdateUnitLabel();
void UpdateValidityDisplay();
SettingsInterface<T>* self_; SettingsInterface<T>* self_;
@ -173,24 +174,19 @@ void SettingsInterface<T>::SetEditWidget(QWidget* widget)
{ {
if constexpr (std::is_same_v<T, std::string>) if constexpr (std::is_same_v<T, std::string>)
{ {
QObject::connect( QObject::connect(hotkeyEdit,
hotkeyEdit, &ui::HotkeyEdit::KeySequenceChanged,
&ui::HotkeyEdit::KeySequenceChanged, p->context_.get(),
p->context_.get(), [this](const QKeySequence& sequence)
[this, hotkeyEdit](const QKeySequence& sequence) {
{ const std::string value {
const std::string value {sequence.toString().toStdString()}; sequence.toString().toStdString()};
// Attempt to stage the value // Attempt to stage the value
p->stagedValid_ = p->variable_->StageValue(value); p->stagedValid_ = p->variable_->StageValue(value);
p->UpdateResetButton(); p->UpdateResetButton();
p->UpdateValidityDisplay();
hotkeyEdit->setStyleSheet(p->stagedValid_ ? kValidStyleSheet_ : });
kInvalidStyleSheet_);
hotkeyEdit->setToolTip(p->invalidTooltip_ && !p->stagedValid_ ?
p->invalidTooltip_->c_str() :
"");
});
} }
} }
else if (QLineEdit* lineEdit = dynamic_cast<QLineEdit*>(widget)) else if (QLineEdit* lineEdit = dynamic_cast<QLineEdit*>(widget))
@ -199,64 +195,54 @@ void SettingsInterface<T>::SetEditWidget(QWidget* widget)
{ {
// If the line is edited (not programatically changed), stage the new // If the line is edited (not programatically changed), stage the new
// value // value
QObject::connect( QObject::connect(lineEdit,
lineEdit, &QLineEdit::textEdited,
&QLineEdit::textEdited, p->context_.get(),
p->context_.get(), [this](const QString& text)
[this, lineEdit](const QString& text) {
{ const QString trimmedText =
const QString trimmedText = p->trimmingEnabled_ ? text.trimmed() : text;
p->trimmingEnabled_ ? text.trimmed() : text;
// Map to value if required // Map to value if required
std::string value {trimmedText.toStdString()}; std::string value {trimmedText.toStdString()};
if (p->mapToValue_ != nullptr) if (p->mapToValue_ != nullptr)
{ {
value = p->mapToValue_(value); value = p->mapToValue_(value);
} }
// Attempt to stage the value // Attempt to stage the value
p->stagedValid_ = p->variable_->StageValue(value); p->stagedValid_ = p->variable_->StageValue(value);
p->UpdateResetButton(); p->UpdateResetButton();
p->UpdateValidityDisplay();
lineEdit->setStyleSheet(p->stagedValid_ ? kValidStyleSheet_ : });
kInvalidStyleSheet_);
lineEdit->setToolTip(p->invalidTooltip_ && !p->stagedValid_ ?
p->invalidTooltip_->c_str() :
"");
});
} }
else if constexpr (std::is_same_v<T, double>) else if constexpr (std::is_same_v<T, double>)
{ {
// If the line is edited (not programatically changed), stage the new // If the line is edited (not programatically changed), stage the new
// value // value
QObject::connect( QObject::connect(lineEdit,
lineEdit, &QLineEdit::textEdited,
&QLineEdit::textEdited, p->context_.get(),
p->context_.get(), [this](const QString& text)
[this, lineEdit](const QString& text) {
{ // Convert to a double
// Convert to a double bool ok = false;
bool ok = false; const double value = text.toDouble(&ok);
const double value = text.toDouble(&ok); if (ok)
if (ok) {
{ // Attempt to stage the value
// Attempt to stage the value p->stagedValid_ =
p->stagedValid_ = p->variable_->StageValue(value); p->variable_->StageValue(value);
p->UpdateResetButton(); p->UpdateResetButton();
} }
else else
{ {
p->stagedValid_ = false; p->stagedValid_ = false;
p->UpdateResetButton(); p->UpdateResetButton();
} }
lineEdit->setStyleSheet(p->stagedValid_ ? kValidStyleSheet_ : p->UpdateValidityDisplay();
kInvalidStyleSheet_); });
lineEdit->setToolTip(p->invalidTooltip_ && !p->stagedValid_ ?
p->invalidTooltip_->c_str() :
"");
});
} }
else if constexpr (std::is_same_v<T, std::vector<std::int64_t>>) else if constexpr (std::is_same_v<T, std::vector<std::int64_t>>)
{ {
@ -266,7 +252,7 @@ void SettingsInterface<T>::SetEditWidget(QWidget* widget)
lineEdit, lineEdit,
&QLineEdit::textEdited, &QLineEdit::textEdited,
p->context_.get(), p->context_.get(),
[this, lineEdit](const QString& text) [this](const QString& text)
{ {
// Map to value if required // Map to value if required
T value {}; T value {};
@ -300,12 +286,7 @@ void SettingsInterface<T>::SetEditWidget(QWidget* widget)
// Attempt to stage the value // Attempt to stage the value
p->stagedValid_ = p->variable_->StageValue(value); p->stagedValid_ = p->variable_->StageValue(value);
p->UpdateResetButton(); p->UpdateResetButton();
p->UpdateValidityDisplay();
lineEdit->setStyleSheet(p->stagedValid_ ? kValidStyleSheet_ :
kInvalidStyleSheet_);
lineEdit->setToolTip(p->invalidTooltip_ && !p->stagedValid_ ?
p->invalidTooltip_->c_str() :
"");
}); });
} }
} }
@ -368,7 +349,7 @@ void SettingsInterface<T>::SetEditWidget(QWidget* widget)
spinBox, spinBox,
&QSpinBox::valueChanged, &QSpinBox::valueChanged,
p->context_.get(), p->context_.get(),
[this, spinBox](int i) [this](int i)
{ {
const T value = p->variable_->GetValue(); const T value = p->variable_->GetValue();
const std::optional<T> staged = p->variable_->GetStaged(); const std::optional<T> staged = p->variable_->GetStaged();
@ -390,11 +371,7 @@ void SettingsInterface<T>::SetEditWidget(QWidget* widget)
} }
// Otherwise, don't process an unchanged value // Otherwise, don't process an unchanged value
spinBox->setStyleSheet(p->stagedValid_ ? kValidStyleSheet_ : p->UpdateValidityDisplay();
kInvalidStyleSheet_);
spinBox->setToolTip(p->invalidTooltip_ && !p->stagedValid_ ?
p->invalidTooltip_->c_str() :
"");
}); });
} }
} }
@ -420,7 +397,7 @@ void SettingsInterface<T>::SetEditWidget(QWidget* widget)
doubleSpinBox, doubleSpinBox,
&QDoubleSpinBox::valueChanged, &QDoubleSpinBox::valueChanged,
p->context_.get(), p->context_.get(),
[this, doubleSpinBox](double d) [this](double d)
{ {
if (p->unitEnabled_) if (p->unitEnabled_)
{ {
@ -447,12 +424,7 @@ void SettingsInterface<T>::SetEditWidget(QWidget* widget)
} }
// Otherwise, don't process an unchanged value // Otherwise, don't process an unchanged value
doubleSpinBox->setStyleSheet( p->UpdateValidityDisplay();
p->stagedValid_ ? kValidStyleSheet_ : kInvalidStyleSheet_);
doubleSpinBox->setToolTip(p->invalidTooltip_ &&
!p->stagedValid_ ?
p->invalidTooltip_->c_str() :
"");
}); });
} }
} }
@ -662,6 +634,15 @@ void SettingsInterface<T>::Impl::UpdateUnitLabel()
unitLabel_->setText(QString::fromStdString(unitAbbreviation_.value_or(""))); unitLabel_->setText(QString::fromStdString(unitAbbreviation_.value_or("")));
} }
template<class T>
void SettingsInterface<T>::Impl::UpdateValidityDisplay()
{
editWidget_->setStyleSheet(stagedValid_ ? kValidStyleSheet_ :
kInvalidStyleSheet_);
editWidget_->setToolTip(
invalidTooltip_ && !stagedValid_ ? invalidTooltip_->c_str() : "");
}
template<class T> template<class T>
void SettingsInterface<T>::Impl::UpdateResetButton() void SettingsInterface<T>::Impl::UpdateResetButton()
{ {

View file

@ -17,15 +17,12 @@ class CustomLayerDialogImpl;
class CustomLayerDialog : public QDialog class CustomLayerDialog : public QDialog
{ {
Q_OBJECT Q_OBJECT
Q_DISABLE_COPY_MOVE(CustomLayerDialog)
public: public:
explicit CustomLayerDialog(const QMapLibre::Settings& settings, explicit CustomLayerDialog(const QMapLibre::Settings& settings,
QWidget* parent = nullptr); QWidget* parent = nullptr);
~CustomLayerDialog() override; ~CustomLayerDialog() override;
CustomLayerDialog(const CustomLayerDialog&) = delete;
CustomLayerDialog(CustomLayerDialog&&) = delete;
CustomLayerDialog& operator=(const CustomLayerDialog&) = delete;
CustomLayerDialog& operator=(CustomLayerDialog&&) = delete;
std::string selected_layer(); std::string selected_layer();

View file

@ -108,8 +108,8 @@ static const std::unordered_map<std::string, ColorTableConversions>
class SettingsDialogImpl class SettingsDialogImpl
{ {
public: public:
explicit SettingsDialogImpl(SettingsDialog* self, explicit SettingsDialogImpl(SettingsDialog* self,
QMapLibre::Settings mapSettings) : QMapLibre::Settings& mapSettings) :
self_ {self}, self_ {self},
radarSiteDialog_ {new RadarSiteDialog(self)}, radarSiteDialog_ {new RadarSiteDialog(self)},
alertAudioRadarSiteDialog_ {new RadarSiteDialog(self)}, alertAudioRadarSiteDialog_ {new RadarSiteDialog(self)},
@ -117,7 +117,7 @@ public:
countyDialog_ {new CountyDialog(self)}, countyDialog_ {new CountyDialog(self)},
wfoDialog_ {new WFODialog(self)}, wfoDialog_ {new WFODialog(self)},
fontDialog_ {new QFontDialog(self)}, fontDialog_ {new QFontDialog(self)},
mapSettings_ {std::move(mapSettings)}, mapSettings_ {mapSettings},
fontCategoryModel_ {new QStandardItemModel(self)}, fontCategoryModel_ {new QStandardItemModel(self)},
settings_ {std::initializer_list<settings::SettingsInterfaceBase*> { settings_ {std::initializer_list<settings::SettingsInterfaceBase*> {
&defaultRadarSite_, &defaultRadarSite_,
@ -223,7 +223,7 @@ public:
WFODialog* wfoDialog_; WFODialog* wfoDialog_;
QFontDialog* fontDialog_; QFontDialog* fontDialog_;
QMapLibre::Settings mapSettings_; QMapLibre::Settings& mapSettings_;
QStandardItemModel* fontCategoryModel_; QStandardItemModel* fontCategoryModel_;
@ -298,8 +298,8 @@ public:
std::vector<settings::SettingsInterfaceBase*> settings_; std::vector<settings::SettingsInterfaceBase*> settings_;
}; };
SettingsDialog::SettingsDialog(const QMapLibre::Settings& mapSettings, SettingsDialog::SettingsDialog(QMapLibre::Settings& mapSettings,
QWidget* parent) : QWidget* parent) :
QDialog(parent), QDialog(parent),
p {std::make_unique<SettingsDialogImpl>(this, mapSettings)}, p {std::make_unique<SettingsDialogImpl>(this, mapSettings)},
ui(new Ui::SettingsDialog) ui(new Ui::SettingsDialog)

View file

@ -25,8 +25,8 @@ private:
Q_DISABLE_COPY(SettingsDialog) Q_DISABLE_COPY(SettingsDialog)
public: public:
explicit SettingsDialog(const QMapLibre::Settings& mapSettings, explicit SettingsDialog(QMapLibre::Settings& mapSettings,
QWidget* parent = nullptr); QWidget* parent = nullptr);
~SettingsDialog(); ~SettingsDialog();
private: private: