diff --git a/src/gui/dialogs/unit_create.cpp b/src/gui/dialogs/unit_create.cpp index efc49cb9e02e..d5ccb9dc61ca 100644 --- a/src/gui/dialogs/unit_create.cpp +++ b/src/gui/dialogs/unit_create.cpp @@ -46,26 +46,9 @@ #include -namespace -{ static std::string last_chosen_type_id = ""; static unit_race::GENDER last_gender = unit_race::MALE; -/** - * Helper function for updating the male/female checkboxes. - * It's not a private member of class gui2::tunit_create so - * we don't have to expose a forward-declaration of ttoggle_button - * in the interface. - */ -void update_male_female_toggles(gui2::ttoggle_button& male, - gui2::ttoggle_button& female, - unit_race::GENDER choice) -{ - male.set_value(choice == unit_race::MALE); - female.set_value(choice == unit_race::FEMALE); -} -} - namespace gui2 { @@ -113,6 +96,18 @@ void tunit_create::pre_show(CVideo& /*video*/, twindow& window) = find_widget(&window, "male_toggle", false); ttoggle_button& female_toggle = find_widget(&window, "female_toggle", false); + + gender_toggle.add_member(&male_toggle, unit_race::MALE); + gender_toggle.add_member(&female_toggle, unit_race::FEMALE); + + gender_toggle.set_member_states(last_gender); + + male_toggle.set_callback_state_change( + dialog_callback); + + female_toggle.set_callback_state_change( + dialog_callback); + tlistbox& list = find_widget(&window, "unit_type_list", false); ttext_box* filter @@ -139,14 +134,6 @@ void tunit_create::pre_show(CVideo& /*video*/, twindow& window) this, boost::ref(window))); - male_toggle.set_callback_state_change( - dialog_callback); - - female_toggle.set_callback_state_change( - dialog_callback); - - update_male_female_toggles(male_toggle, female_toggle, gender_); - list.clear(); FOREACH(const AUTO & i, unit_types.types()) @@ -213,8 +200,6 @@ bool tunit_create::compare_race_rev(unsigned i1, unsigned i2) const void tunit_create::post_show(twindow& window) { - ttoggle_button& female_toggle - = find_widget(&window, "female_toggle", false); tlistbox& list = find_widget(&window, "unit_type_list", false); choice_ = ""; @@ -233,10 +218,8 @@ void tunit_create::post_show(twindow& window) return; } - last_chosen_type_id = choice_ - = units_[selected_row]->id(); - last_gender = gender_ = female_toggle.get_value() ? unit_race::FEMALE - : unit_race::MALE; + last_chosen_type_id = choice_ = units_[selected_row]->id(); + last_gender = gender_; } void tunit_create::print_stats(std::stringstream& str, const int row) @@ -443,20 +426,6 @@ void tunit_create::profile_button_callback(twindow& window) void tunit_create::gender_toggle_callback(twindow& window) { - ttoggle_button& male_toggle - = find_widget(&window, "male_toggle", false); - ttoggle_button& female_toggle - = find_widget(&window, "female_toggle", false); - - // TODO Ye olde ugly hack for the lack of radio buttons. - - if(gender_ == unit_race::MALE) { - gender_ = female_toggle.get_value() ? unit_race::FEMALE - : unit_race::MALE; - } else { - gender_ = male_toggle.get_value() ? unit_race::MALE : unit_race::FEMALE; - } - - update_male_female_toggles(male_toggle, female_toggle, gender_); + gender_ = gender_toggle.get_active_member_value(); } } diff --git a/src/gui/dialogs/unit_create.hpp b/src/gui/dialogs/unit_create.hpp index 4905bcda52b7..7c1c4ee13383 100644 --- a/src/gui/dialogs/unit_create.hpp +++ b/src/gui/dialogs/unit_create.hpp @@ -16,6 +16,7 @@ #define GUI_DIALOGS_UNIT_CREATE_HPP_INCLUDED #include "gui/dialogs/dialog.hpp" +#include "gui/widgets/group.hpp" #include "gui/widgets/text.hpp" #include "race.hpp" #include "unit_types.hpp" @@ -83,6 +84,8 @@ class tunit_create : public tdialog bool filter_text_changed(ttext_* textbox, const std::string& text); void profile_button_callback(twindow& window); void gender_toggle_callback(twindow& window); + + tgroup gender_toggle; }; }