From 42747070d3dd1ebefec800bdebb647176557f5bf Mon Sep 17 00:00:00 2001 From: Charles Dang Date: Fri, 12 Jul 2019 17:21:26 +1100 Subject: [PATCH] Label Settings: code cleanup --- src/gui/dialogs/label_settings.cpp | 112 +++++++++++++++++------------ src/gui/dialogs/label_settings.hpp | 29 ++++---- 2 files changed, 81 insertions(+), 60 deletions(-) diff --git a/src/gui/dialogs/label_settings.cpp b/src/gui/dialogs/label_settings.cpp index e611fc1dab43..c2a92f7cc3a4 100644 --- a/src/gui/dialogs/label_settings.cpp +++ b/src/gui/dialogs/label_settings.cpp @@ -15,82 +15,96 @@ #include "gui/dialogs/label_settings.hpp" -#include -#include "utils/functional.hpp" -#include "gettext.hpp" #include "display.hpp" #include "font/text_formatting.hpp" -#include "map/label.hpp" +#include "formatter.hpp" +#include "formula/string_utils.hpp" +#include "gettext.hpp" #include "gui/auxiliary/find_widget.hpp" -#include "gui/widgets/styled_widget.hpp" +#include "gui/widgets/label.hpp" #include "gui/widgets/listbox.hpp" -#include "gui/widgets/window.hpp" #include "gui/widgets/settings.hpp" +#include "gui/widgets/styled_widget.hpp" #include "gui/widgets/toggle_button.hpp" -#include "gui/widgets/label.hpp" -#include "formula/string_utils.hpp" +#include "gui/widgets/window.hpp" +#include "map/label.hpp" #include "team.hpp" +#include + namespace gui2 { namespace dialogs { REGISTER_DIALOG(label_settings) -label_settings::label_settings(display_context& dc) : viewer(dc) { +label_settings::label_settings(display_context& dc) + : viewer_(dc) +{ const std::vector& all_categories = display::get_singleton()->labels().all_categories(); - const std::vector& hidden_categories = viewer.hidden_label_categories(); - - for(size_t i = 0; i < all_categories.size(); i++) { - all_labels[all_categories[i]] = true; - if(all_categories[i].substr(0,4) == "cat:") - labels_display[all_categories[i]] = all_categories[i].substr(4); - else if(all_categories[i] == "team") - labels_display[all_categories[i]] = _("Team Labels"); + const std::vector& hidden_categories = viewer_.hidden_label_categories(); + + for(const std::string& cat : all_categories) { + all_labels_[cat] = true; + // TODO: Translatable names for categories? + if(cat.substr(0, 4) == "cat:") { + labels_display_[cat] = cat.substr(4); + } else if(cat == "team") { + labels_display_[cat] = _("Team Labels"); + } } - for(size_t i = 0; i < hidden_categories.size(); i++) { - all_labels[hidden_categories[i]] = false; + + for(const std::string& hidden_cat : hidden_categories) { + all_labels_[hidden_cat] = false; } - for(size_t i = 0; i < dc.teams().size(); i++) { - const team& team = dc.teams()[i]; + + for(std::size_t i = 0; i < viewer_.teams().size(); i++) { + const team& team = viewer_.teams()[i]; const std::string label_cat_key = "side:" + std::to_string(i + 1); + if(team.hidden()) { - labels_display[label_cat_key] = ""; + labels_display_[label_cat_key] = ""; continue; + } + std::string team_name = team.side_name(); if(team_name.empty()) { team_name = team.user_team_name(); } + if(team_name.empty()) { team_name = _("Unknown"); } + string_map subst; subst["side_number"] = std::to_string(i + 1); subst["name"] = team_name; - labels_display[label_cat_key] = VGETTEXT("Side $side_number ($name)", subst); + labels_display_[label_cat_key] = VGETTEXT("Side $side_number ($name)", subst); } } -void label_settings::pre_show(window& window) { - std::map list_data; +void label_settings::pre_show(window& window) +{ listbox& cats_listbox = find_widget(&window, "label_types", false); - for(const auto & label_entry : all_labels) { + std::map list_data; + + for(const auto& label_entry : all_labels_) { const std::string& category = label_entry.first; - const bool& visible = label_entry.second; + const bool visible = label_entry.second; - std::string name = labels_display[category]; - if(category.substr(0,5) == "side:") { + std::string name = labels_display_[category]; + if(category.substr(0, 5) == "side:") { + // This means it's a hidden side, so don't show it. if(name.empty()) { - // This means it's a hidden side, so don't show it. continue; } - int team = std::stoi(category.substr(5)) - 1; - color_t which_color = game_config::tc_info(viewer.teams()[team].color())[0]; - std::ostringstream sout; - sout << font::span_color(which_color) << name << ""; - name = sout.str(); + + const int team = std::stoi(category.substr(5)) - 1; + const color_t tc = game_config::tc_info(viewer_.teams()[team].color())[0]; + + name = (formatter() << font::span_color(tc) << name << "").str(); } list_data["cat_name"]["label"] = name; @@ -101,28 +115,32 @@ void label_settings::pre_show(window& window) { connect_signal_notify_modified(status, std::bind(&label_settings::toggle_category, this, _1, category)); - if(category.substr(0,5) == "side:") { + if(category.substr(0, 5) == "side:") { label& cat_name = find_widget