mirror of
https://github.com/ciphervance/supercell-wx.git
synced 2025-10-30 21:10:04 +00:00
Add alert palette reset buttons
This commit is contained in:
parent
2d8c3c8175
commit
a1d9b25f0b
6 changed files with 177 additions and 0 deletions
|
|
@ -48,6 +48,62 @@ SettingsCategory::SettingsCategory(SettingsCategory&&) noexcept = default;
|
||||||
SettingsCategory&
|
SettingsCategory&
|
||||||
SettingsCategory::operator=(SettingsCategory&&) noexcept = default;
|
SettingsCategory::operator=(SettingsCategory&&) noexcept = default;
|
||||||
|
|
||||||
|
bool SettingsCategory::IsDefault() const
|
||||||
|
{
|
||||||
|
bool isDefault = true;
|
||||||
|
|
||||||
|
// Get subcategory array defaults
|
||||||
|
for (auto& subcategoryArray : p->subcategoryArrays_)
|
||||||
|
{
|
||||||
|
for (auto& subcategory : subcategoryArray.second)
|
||||||
|
{
|
||||||
|
isDefault = isDefault && subcategory->IsDefault();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get subcategory defaults
|
||||||
|
for (auto& subcategory : p->subcategories_)
|
||||||
|
{
|
||||||
|
isDefault = isDefault && subcategory->IsDefault();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get variable defaults
|
||||||
|
for (auto& variable : p->variables_)
|
||||||
|
{
|
||||||
|
isDefault = isDefault && variable->IsDefault();
|
||||||
|
}
|
||||||
|
|
||||||
|
return isDefault;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool SettingsCategory::IsDefaultStaged() const
|
||||||
|
{
|
||||||
|
bool isDefaultStaged = true;
|
||||||
|
|
||||||
|
// Get subcategory array defaults
|
||||||
|
for (auto& subcategoryArray : p->subcategoryArrays_)
|
||||||
|
{
|
||||||
|
for (auto& subcategory : subcategoryArray.second)
|
||||||
|
{
|
||||||
|
isDefaultStaged = isDefaultStaged && subcategory->IsDefaultStaged();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get subcategory defaults
|
||||||
|
for (auto& subcategory : p->subcategories_)
|
||||||
|
{
|
||||||
|
isDefaultStaged = isDefaultStaged && subcategory->IsDefaultStaged();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get variable defaults
|
||||||
|
for (auto& variable : p->variables_)
|
||||||
|
{
|
||||||
|
isDefaultStaged = isDefaultStaged && variable->IsDefaultStaged();
|
||||||
|
}
|
||||||
|
|
||||||
|
return isDefaultStaged;
|
||||||
|
}
|
||||||
|
|
||||||
std::string SettingsCategory::name() const
|
std::string SettingsCategory::name() const
|
||||||
{
|
{
|
||||||
return p->name_;
|
return p->name_;
|
||||||
|
|
@ -102,6 +158,39 @@ void SettingsCategory::SetDefaults()
|
||||||
p->stagedSignal_();
|
p->stagedSignal_();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SettingsCategory::StageDefaults()
|
||||||
|
{
|
||||||
|
// Don't allow individual variables to invoke the signal when operating over
|
||||||
|
// the entire category
|
||||||
|
p->blockSignals_ = true;
|
||||||
|
|
||||||
|
// Stage subcategory array defaults
|
||||||
|
for (auto& subcategoryArray : p->subcategoryArrays_)
|
||||||
|
{
|
||||||
|
for (auto& subcategory : subcategoryArray.second)
|
||||||
|
{
|
||||||
|
subcategory->StageDefaults();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Stage subcategory defaults
|
||||||
|
for (auto& subcategory : p->subcategories_)
|
||||||
|
{
|
||||||
|
subcategory->StageDefaults();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Stage variable defaults
|
||||||
|
for (auto& variable : p->variables_)
|
||||||
|
{
|
||||||
|
variable->StageDefault();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Unblock signals
|
||||||
|
p->blockSignals_ = false;
|
||||||
|
|
||||||
|
p->stagedSignal_();
|
||||||
|
}
|
||||||
|
|
||||||
bool SettingsCategory::Commit()
|
bool SettingsCategory::Commit()
|
||||||
{
|
{
|
||||||
bool committed = false;
|
bool committed = false;
|
||||||
|
|
|
||||||
|
|
@ -43,11 +43,34 @@ public:
|
||||||
*/
|
*/
|
||||||
boost::signals2::signal<void()>& staged_signal();
|
boost::signals2::signal<void()>& staged_signal();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets whether or not all settings variables are currently set to default
|
||||||
|
* values.
|
||||||
|
*
|
||||||
|
* @return true if all settings variables are currently set to default
|
||||||
|
* values, otherwise false.
|
||||||
|
*/
|
||||||
|
bool IsDefault() const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets whether or not all settings variables currently have staged values
|
||||||
|
* set to default.
|
||||||
|
*
|
||||||
|
* @return true if all settings variables currently have staged values set
|
||||||
|
* to default, otherwise false.
|
||||||
|
*/
|
||||||
|
bool IsDefaultStaged() const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set all variables to their defaults.
|
* Set all variables to their defaults.
|
||||||
*/
|
*/
|
||||||
void SetDefaults();
|
void SetDefaults();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Stage all variables to their defaults.
|
||||||
|
*/
|
||||||
|
void StageDefaults();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the current value of all variables to the staged value.
|
* Sets the current value of all variables to the staged value.
|
||||||
*
|
*
|
||||||
|
|
|
||||||
|
|
@ -65,6 +65,18 @@ inline auto FormatParameter(const T& value)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template<class T>
|
||||||
|
bool SettingsVariable<T>::IsDefault() const
|
||||||
|
{
|
||||||
|
return p->value_ == p->default_;
|
||||||
|
}
|
||||||
|
|
||||||
|
template<class T>
|
||||||
|
bool SettingsVariable<T>::IsDefaultStaged() const
|
||||||
|
{
|
||||||
|
return p->staged_.value_or(p->value_) == p->default_;
|
||||||
|
}
|
||||||
|
|
||||||
template<class T>
|
template<class T>
|
||||||
T SettingsVariable<T>::GetValue() const
|
T SettingsVariable<T>::GetValue() const
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -37,6 +37,24 @@ public:
|
||||||
SettingsVariable(SettingsVariable&&) noexcept;
|
SettingsVariable(SettingsVariable&&) noexcept;
|
||||||
SettingsVariable& operator=(SettingsVariable&&) noexcept;
|
SettingsVariable& operator=(SettingsVariable&&) noexcept;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets whether or not the settings variable is currently set to its default
|
||||||
|
* value.
|
||||||
|
*
|
||||||
|
* @return true if the settings variable is currently set to its default
|
||||||
|
* value, otherwise false.
|
||||||
|
*/
|
||||||
|
bool IsDefault() const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets whether or not the settings variable currently has its staged value
|
||||||
|
* set to default.
|
||||||
|
*
|
||||||
|
* @return true if the settings variable currently has its staged value set
|
||||||
|
* to default, otherwise false.
|
||||||
|
*/
|
||||||
|
bool IsDefaultStaged() const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the current value of the settings variable.
|
* Gets the current value of the settings variable.
|
||||||
*
|
*
|
||||||
|
|
|
||||||
|
|
@ -45,6 +45,24 @@ public:
|
||||||
*/
|
*/
|
||||||
boost::signals2::signal<void()>& staged_signal();
|
boost::signals2::signal<void()>& staged_signal();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets whether or not the settings variable is currently set to its default
|
||||||
|
* value.
|
||||||
|
*
|
||||||
|
* @return true if the settings variable is currently set to its default
|
||||||
|
* value, otherwise false.
|
||||||
|
*/
|
||||||
|
virtual bool IsDefault() const = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets whether or not the settings variable currently has its staged value
|
||||||
|
* set to default.
|
||||||
|
*
|
||||||
|
* @return true if the settings variable currently has its staged value set
|
||||||
|
* to default, otherwise false.
|
||||||
|
*/
|
||||||
|
virtual bool IsDefaultStaged() const = 0;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the current value of the settings variable to default.
|
* Sets the current value of the settings variable to default.
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
|
|
@ -57,6 +57,8 @@ public:
|
||||||
settings::LineSettings* activeLineSettings_ {nullptr};
|
settings::LineSettings* activeLineSettings_ {nullptr};
|
||||||
|
|
||||||
boost::unordered_flat_map<awips::Phenomenon, QWidget*> phenomenonPages_ {};
|
boost::unordered_flat_map<awips::Phenomenon, QWidget*> phenomenonPages_ {};
|
||||||
|
|
||||||
|
std::vector<boost::signals2::scoped_connection> connections_ {};
|
||||||
};
|
};
|
||||||
|
|
||||||
AlertPaletteSettingsWidget::AlertPaletteSettingsWidget(QWidget* parent) :
|
AlertPaletteSettingsWidget::AlertPaletteSettingsWidget(QWidget* parent) :
|
||||||
|
|
@ -243,9 +245,15 @@ void AlertPaletteSettingsWidget::Impl::AddPhenomenonLine(
|
||||||
LineLabel* lineLabel = new LineLabel(self_);
|
LineLabel* lineLabel = new LineLabel(self_);
|
||||||
lineLabel->set_line_settings(lineSettings);
|
lineLabel->set_line_settings(lineSettings);
|
||||||
|
|
||||||
|
QToolButton* resetButton = new QToolButton(self_);
|
||||||
|
resetButton->setIcon(
|
||||||
|
QIcon {":/res/icons/font-awesome-6/rotate-left-solid.svg"});
|
||||||
|
resetButton->setVisible(!lineSettings.IsDefaultStaged());
|
||||||
|
|
||||||
layout->addWidget(new QLabel(tr(name.c_str()), self_), row, 0);
|
layout->addWidget(new QLabel(tr(name.c_str()), self_), row, 0);
|
||||||
layout->addWidget(lineLabel, row, 1);
|
layout->addWidget(lineLabel, row, 1);
|
||||||
layout->addWidget(toolButton, row, 2);
|
layout->addWidget(toolButton, row, 2);
|
||||||
|
layout->addWidget(resetButton, row, 3);
|
||||||
|
|
||||||
self_->AddSettingsCategory(&lineSettings);
|
self_->AddSettingsCategory(&lineSettings);
|
||||||
|
|
||||||
|
|
@ -268,6 +276,15 @@ void AlertPaletteSettingsWidget::Impl::AddPhenomenonLine(
|
||||||
// Show the dialog
|
// Show the dialog
|
||||||
editLineDialog_->show();
|
editLineDialog_->show();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
connect(resetButton,
|
||||||
|
&QAbstractButton::clicked,
|
||||||
|
self_,
|
||||||
|
[&lineSettings]() { lineSettings.StageDefaults(); });
|
||||||
|
|
||||||
|
connections_.emplace_back(lineSettings.staged_signal().connect(
|
||||||
|
[resetButton, &lineSettings]()
|
||||||
|
{ resetButton->setVisible(!lineSettings.IsDefaultStaged()); }));
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace ui
|
} // namespace ui
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue