mirror of
				https://github.com/ciphervance/supercell-wx.git
				synced 2025-10-31 07:00:06 +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
	
	 Dan Paulat
						Dan Paulat