GUI2/Definition: move settings members to their own struct

This commit is contained in:
Charles Dang 2025-03-13 01:20:39 -04:00
parent b1e3bc3e56
commit 01ecc04ac8
2 changed files with 58 additions and 61 deletions

View File

@ -27,6 +27,8 @@
namespace gui2
{
using namespace std::chrono_literals;
gui_theme_map_t guis;
gui_theme_map_t::iterator current_gui = guis.end();
gui_theme_map_t::iterator default_gui = guis.end();
@ -36,16 +38,7 @@ gui_definition::gui_definition(const config& cfg)
, window_types()
, id_(cfg["id"])
, description_(cfg["description"].t_str())
, popup_show_delay_(0)
, popup_show_time_(0)
, help_show_time_(0)
, double_click_time_(0)
, repeat_button_repeat_time_(0)
, sound_button_click_()
, sound_toggle_button_click_()
, sound_toggle_panel_click_()
, sound_slider_adjust_()
, has_helptip_message_()
, settings_(cfg.mandatory_child("settings"))
, tips_(tip_of_the_day::load(cfg))
{
VALIDATE(!id_.empty(), missing_mandatory_wml_key("gui", "id"));
@ -111,51 +104,39 @@ gui_definition::gui_definition(const config& cfg)
VALIDATE(window_types.find(window_type) != window_types.end(), error_msg);
}
}
}
/***** settings *****/
gui_definition::settings_helper::settings_helper(const config& cfg)
: popup_show_delay(chrono::parse_duration(cfg["popup_show_delay"], 0ms))
, popup_show_time(chrono::parse_duration(cfg["popup_show_time"], 0ms))
, help_show_time(chrono::parse_duration(cfg["help_show_time"], 0ms))
, double_click_time(chrono::parse_duration(cfg["double_click_time"], 0ms))
, repeat_button_repeat_time(chrono::parse_duration(cfg["repeat_button_repeat_time"], 0ms))
, sound_button_click(cfg["sound_button_click"])
, sound_toggle_button_click(cfg["sound_toggle_button_click"])
, sound_toggle_panel_click(cfg["sound_toggle_panel_click"])
, sound_slider_adjust(cfg["sound_slider_adjust"])
, has_helptip_message(cfg["has_helptip_message"].t_str())
{
VALIDATE(double_click_time > 0ms,
missing_mandatory_wml_key("settings", "double_click_time"));
/**
* @todo Regarding sounds:
* Need to evaluate but probably we want the widget definition be able to:
* - Override the default (and clear it). This will allow toggle buttons in a
* listbox to sound like a toggle panel.
* - Override the default and above per instance of the widget, some buttons
* can give a different sound.
*/
const config& settings = cfg.mandatory_child("settings");
using namespace std::chrono_literals;
popup_show_delay_ = chrono::parse_duration(settings["popup_show_delay"], 0ms);
popup_show_time_ = chrono::parse_duration(settings["popup_show_time"], 0ms);
help_show_time_ = chrono::parse_duration(settings["help_show_time"], 0ms);
double_click_time_ = chrono::parse_duration(settings["double_click_time"], 0ms);
repeat_button_repeat_time_ = chrono::parse_duration(settings["repeat_button_repeat_time"], 0ms);
VALIDATE(!settings["double_click_time"].blank(), missing_mandatory_wml_key("settings", "double_click_time"));
sound_button_click_ = settings["sound_button_click"].str();
sound_toggle_button_click_ = settings["sound_toggle_button_click"].str();
sound_toggle_panel_click_ = settings["sound_toggle_panel_click"].str();
sound_slider_adjust_ = settings["sound_slider_adjust"].str();
has_helptip_message_ = settings["has_helptip_message"].t_str();
VALIDATE(!has_helptip_message_.empty(), missing_mandatory_wml_key("settings", "has_helptip_message"));
VALIDATE(!has_helptip_message.empty(),
missing_mandatory_wml_key("settings", "has_helptip_message"));
}
void gui_definition::activate() const
{
settings::popup_show_delay = popup_show_delay_;
settings::popup_show_time = popup_show_time_;
settings::help_show_time = help_show_time_;
settings::double_click_time = double_click_time_;
settings::repeat_button_repeat_time = repeat_button_repeat_time_;
settings::sound_button_click = sound_button_click_;
settings::sound_toggle_button_click = sound_toggle_button_click_;
settings::sound_toggle_panel_click = sound_toggle_panel_click_;
settings::sound_slider_adjust = sound_slider_adjust_;
settings::has_helptip_message = has_helptip_message_;
settings::popup_show_delay = settings_.popup_show_delay;
settings::popup_show_time = settings_.popup_show_time;
settings::help_show_time = settings_.help_show_time;
settings::double_click_time = settings_.double_click_time;
settings::repeat_button_repeat_time = settings_.repeat_button_repeat_time;
settings::sound_button_click = settings_.sound_button_click;
settings::sound_toggle_button_click = settings_.sound_toggle_button_click;
settings::sound_toggle_panel_click = settings_.sound_toggle_panel_click;
settings::sound_slider_adjust = settings_.sound_slider_adjust;
settings::has_helptip_message = settings_.has_helptip_message;
settings::tips = tips_;
}

View File

@ -40,8 +40,6 @@ namespace gui2
*
* Each widget definition and window layout may also define different variations of itself
* to be used based on the current game resolution.
*
* As of December 2017 only the default theme is provided.
*/
class gui_definition
{
@ -69,18 +67,36 @@ private:
t_string description_;
std::chrono::milliseconds popup_show_delay_;
std::chrono::milliseconds popup_show_time_;
std::chrono::milliseconds help_show_time_;
std::chrono::milliseconds double_click_time_;
std::chrono::milliseconds repeat_button_repeat_time_;
/**
* Theme-specific settings. These are exposed via globals in the gui2::settings
* namespace by calling @ref activate.
*
* @todo Regarding sounds:
* Need to evaluate but probably we want the widget definition be able to:
* - Override the default (and clear it). This will allow toggle buttons in a
* listbox to sound like a toggle panel.
* - Override the default and above per instance of the widget, some buttons
* can give a different sound.
*/
struct settings_helper
{
explicit settings_helper(const config& cfg);
std::string sound_button_click_;
std::string sound_toggle_button_click_;
std::string sound_toggle_panel_click_;
std::string sound_slider_adjust_;
std::chrono::milliseconds popup_show_delay;
std::chrono::milliseconds popup_show_time;
std::chrono::milliseconds help_show_time;
std::chrono::milliseconds double_click_time;
std::chrono::milliseconds repeat_button_repeat_time;
t_string has_helptip_message_;
std::string sound_button_click;
std::string sound_toggle_button_click;
std::string sound_toggle_panel_click;
std::string sound_slider_adjust;
t_string has_helptip_message;
};
settings_helper settings_;
std::vector<game_tip> tips_;
};