Unit Create: don't show invalid gender options for the selected type

This commit is contained in:
Charles Dang 2016-09-06 09:48:04 +11:00
parent 41b254da31
commit e6b0d1e841
2 changed files with 39 additions and 0 deletions

View file

@ -198,6 +198,11 @@ void tunit_create::list_item_clicked(twindow& window)
find_widget<tunit_preview_pane>(&window, "unit_details", false)
.set_displayed_type(*units_[selected_row]);
gender_toggle.set_member_active(unit_race::GENDER::MALE,
units_[selected_row]->has_gender_variation(unit_race::GENDER::MALE));
gender_toggle.set_member_active(unit_race::GENDER::FEMALE,
units_[selected_row]->has_gender_variation(unit_race::GENDER::FEMALE));
}
void tunit_create::filter_text_changed(ttext_* textbox, const std::string& text)

View file

@ -15,6 +15,7 @@
#define GUI_WIDGETS_GROUP_HPP_INCLUDED
#include "gui/core/event/dispatcher.hpp"
#include "gui/widgets/control.hpp"
#include "gui/widgets/selectable.hpp"
#include "gui/widgets/widget.hpp"
@ -118,6 +119,39 @@ public:
}
}
/**
* Wrapper for enabling or disabling a member widget.
* If the selected widget is selected, it is deselected and the first active
* member selected instead.
*/
void set_member_active(const T& value, const bool active)
{
if(members_.find(value) == members_.end()) {
return;
}
tselectable_& w = *members_[value];
dynamic_cast<tcontrol&>(w).set_active(active);
// Only select another member this was selected
// TODO: for some reason, this doesn't work as expected. While the button will be
// deselected, the get_active call seems to fail, leading to situations where
// no member is selected. Commenting out for now.
//if(!w.get_value_bool()) {
// return;
//}
w.set_value_bool(false);
// Look for the first active member to select
for(auto& member : members_) {
if(dynamic_cast<tcontrol&>(*member.second).get_active()) {
member.second->set_value_bool(true);
break;
}
}
}
private:
group_map members_;