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

View file

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

View file

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

View file

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