Skip to content

Commit

Permalink
tunit_create: simplified gender toggle using a group
Browse files Browse the repository at this point in the history
  • Loading branch information
Vultraz committed Feb 25, 2016
1 parent 8691ae2 commit a0909a9
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 46 deletions.
61 changes: 15 additions & 46 deletions src/gui/dialogs/unit_create.cpp
Expand Up @@ -46,26 +46,9 @@

#include <boost/bind.hpp>

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
{

Expand Down Expand Up @@ -113,6 +96,18 @@ void tunit_create::pre_show(CVideo& /*video*/, twindow& window)
= find_widget<ttoggle_button>(&window, "male_toggle", false);
ttoggle_button& female_toggle
= find_widget<ttoggle_button>(&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<tunit_create, &tunit_create::gender_toggle_callback>);

female_toggle.set_callback_state_change(
dialog_callback<tunit_create, &tunit_create::gender_toggle_callback>);

tlistbox& list = find_widget<tlistbox>(&window, "unit_type_list", false);

ttext_box* filter
Expand All @@ -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<tunit_create, &tunit_create::gender_toggle_callback>);

female_toggle.set_callback_state_change(
dialog_callback<tunit_create, &tunit_create::gender_toggle_callback>);

update_male_female_toggles(male_toggle, female_toggle, gender_);

list.clear();

FOREACH(const AUTO & i, unit_types.types())
Expand Down Expand Up @@ -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<ttoggle_button>(&window, "female_toggle", false);
tlistbox& list = find_widget<tlistbox>(&window, "unit_type_list", false);

choice_ = "";
Expand All @@ -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)
Expand Down Expand Up @@ -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<ttoggle_button>(&window, "male_toggle", false);
ttoggle_button& female_toggle
= find_widget<ttoggle_button>(&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();
}
}
3 changes: 3 additions & 0 deletions src/gui/dialogs/unit_create.hpp
Expand Up @@ -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"
Expand Down Expand Up @@ -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<unit_race::GENDER> gender_toggle;
};
}

Expand Down

0 comments on commit a0909a9

Please sign in to comment.