tgroup: added a function to set the callback for all members

This commit is contained in:
Charles Dang 2016-08-29 06:58:44 +11:00
parent d2191297c5
commit 185724fc94
3 changed files with 20 additions and 12 deletions

View file

@ -67,14 +67,7 @@ void tfaction_select::pre_show(twindow& window)
gender_toggle_.set_member_states("random");
// TODO: consolidate when adding a all-member callback setter to tgroup
gender_rand.set_callback_state_change(
dialog_callback<tfaction_select, &tfaction_select::on_gender_select>);
gender_male.set_callback_state_change(
dialog_callback<tfaction_select, &tfaction_select::on_gender_select>);
gender_female.set_callback_state_change(
gender_toggle_.set_callback_on_value_change(
dialog_callback<tfaction_select, &tfaction_select::on_gender_select>);
//

View file

@ -99,10 +99,7 @@ void tunit_create::pre_show(twindow& window)
gender_toggle.set_member_states(last_gender);
male_toggle.set_callback_state_change(
dialog_callback<tunit_create, &tunit_create::gender_toggle_callback>);
female_toggle.set_callback_state_change(
gender_toggle.set_callback_on_value_change(
dialog_callback<tunit_create, &tunit_create::gender_toggle_callback>);
tlistbox& list = find_widget<tlistbox>(&window, "unit_type_list", false);

View file

@ -118,6 +118,24 @@ public:
}
}
/**
* Sets a common callback function for all members.
*/
void set_callback_on_value_change(const std::function<void(twidget&)>& func)
{
// Ensure this callback is only called on the member being activated
const auto callback = [func](twidget& widget)->void {
if(dynamic_cast<tselectable_*>(&widget)->get_value_bool()) {
func(widget);
}
};
for(auto& member : members())
{
member.first->set_callback_state_change(callback);
}
}
private:
group_list members_;