Skip to content

Commit

Permalink
Add the sidebar's "Advances to" tooltip to the recruit/recall dialogs
Browse files Browse the repository at this point in the history
Fixes #4135

This commit:
- Moves creation of the tooltip text to a helper function.
- Converts the dialog's label to a styled_widget to allow setting a
  tooltip.
  • Loading branch information
rjframe committed Dec 30, 2019
1 parent 4465791 commit 3922fee
Show file tree
Hide file tree
Showing 5 changed files with 60 additions and 25 deletions.
14 changes: 11 additions & 3 deletions src/gui/widgets/unit_preview_pane.cpp
Expand Up @@ -77,7 +77,7 @@ void unit_preview_pane::finalize_setup()

// Labels
label_name_ = find_widget<label>(this, "type_name", false, false);
label_level_ = find_widget<label>(this, "type_level", false, false);
label_level_ = find_widget<styled_widget>(this, "type_level", false, false);
label_race_ = find_widget<label>(this, "type_race_label", false, false);
label_details_ = find_widget<styled_widget>(this, "type_details_minimal", false, false);

Expand Down Expand Up @@ -292,7 +292,11 @@ void unit_preview_pane::set_displayed_type(const unit_type& type)
if(label_level_) {
std::string l_str = VGETTEXT("Lvl $lvl", {{"lvl", std::to_string(type.level())}});

label_level_->set_label("<b>" + l_str + "</b>");
label_level_->set_members({
{ "label", "<b>" + l_str + "</b>" },
{ "tooltip", unit_helper::unit_level_tooltip(type) }
});

label_level_->set_use_markup(true);
}

Expand Down Expand Up @@ -443,7 +447,11 @@ void unit_preview_pane::set_displayed_unit(const unit& u)
if(label_level_) {
std::string l_str = VGETTEXT("Lvl $lvl", {{"lvl", std::to_string(u.level())}});

label_level_->set_label("<b>" + l_str + "</b>");
label_level_->set_members({
{ "label", "<b>" + l_str + "</b>" },
{ "tooltip", unit_helper::unit_level_tooltip(u) }
});

label_level_->set_use_markup(true);
}

Expand Down
2 changes: 1 addition & 1 deletion src/gui/widgets/unit_preview_pane.hpp
Expand Up @@ -81,7 +81,7 @@ class unit_preview_pane : public container_base
image* icon_alignment_;

label* label_name_;
label* label_level_;
styled_widget* label_level_;
label* label_race_;

styled_widget* label_details_;
Expand Down
22 changes: 1 addition & 21 deletions src/reports.cpp
Expand Up @@ -263,27 +263,7 @@ static config unit_level(const unit* u)
if (!u) return config();
std::ostringstream str, tooltip;
str << u->level();
tooltip << _("Level: ") << "<b>" << u->level() << "</b>\n";
const std::vector<std::string> &adv_to_types = u->advances_to_translated();
const std::vector<config> &adv_to_mods = u->get_modification_advances();
const bool has_advancements = !adv_to_types.empty() || !adv_to_mods.empty();
if(has_advancements) {
tooltip << _("Advancements:") << "\n<b>\t";
if(!adv_to_types.empty())
tooltip << utils::join(adv_to_types, "\n\t");
if(!adv_to_mods.empty()) {
if(!adv_to_types.empty())
tooltip << "\n\t";
std::vector<std::string> descriptions;
for(const config& adv : adv_to_mods)
descriptions.push_back(adv["description"].str());
tooltip << utils::join(descriptions, "\n\t");
}
tooltip << "</b>";
} else {
tooltip << _("No advancement");
}
return text_report(str.str(), tooltip.str());
return text_report(str.str(), unit_helper::unit_level_tooltip(*u));
}
REPORT_GENERATOR(unit_level, rc)
{
Expand Down
37 changes: 37 additions & 0 deletions src/units/helper.cpp
Expand Up @@ -46,4 +46,41 @@ std::string resistance_color(const int resistance)
return std::string("#00FF00");
}

std::string unit_level_tooltip(const int level, const std::vector<std::string> &adv_to_types, const std::vector<config> &adv_to_mods)
{
std::ostringstream tooltip;
tooltip << _("Level: ") << "<b>" << level << "</b>\n";
const bool has_advancements = !adv_to_types.empty() || !adv_to_mods.empty();
if(has_advancements) {
tooltip << _("Advancements:") << "\n<b>\t";
if(!adv_to_types.empty())
tooltip << utils::join(adv_to_types, "\n\t");
if(!adv_to_mods.empty()) {
if(!adv_to_types.empty())
tooltip << "\n\t";
std::vector<std::string> descriptions;
for(const config& adv : adv_to_mods)
descriptions.push_back(adv["description"].str());
tooltip << utils::join(descriptions, "\n\t");
}
tooltip << "</b>";
} else {
tooltip << _("No advancement");
}
return tooltip.str();
}

std::string unit_level_tooltip(const unit &u)
{
return unit_level_tooltip(u.level(), u.advances_to_translated(), u.get_modification_advances());
}

std::string unit_level_tooltip(const unit_type &type)
{
const auto mod_adv_iters = type.modification_advancements();
const std::vector<config> mod_advancements(mod_adv_iters.begin(), mod_adv_iters.end());

return unit_level_tooltip(type.level(), type.advances_to(), mod_advancements);
}

}
10 changes: 10 additions & 0 deletions src/units/helper.hpp
Expand Up @@ -40,4 +40,14 @@ int number_of_possible_advances(const unit &unit);
*/
std::string resistance_color(const int resistance);

/**
* @return the tooltip text showing a unit's level and what it can advance to.
*/
std::string unit_level_tooltip(const unit &u);

/**
* @return the tooltip text showing a unit type's level and what it can
* advance to.
*/
std::string unit_level_tooltip(const unit_type &u);
}

0 comments on commit 3922fee

Please sign in to comment.