Unit Create: don't show invalid gender options for the selected type
This commit is contained in:
parent
41b254da31
commit
e6b0d1e841
2 changed files with 39 additions and 0 deletions
|
@ -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)
|
||||
|
|
|
@ -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_;
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue