diff --git a/src/gui/dialogs/editor/editor_edit_side.cpp b/src/gui/dialogs/editor/editor_edit_side.cpp index c05bbddc8f91..21c069cc3bc1 100644 --- a/src/gui/dialogs/editor/editor_edit_side.cpp +++ b/src/gui/dialogs/editor/editor_edit_side.cpp @@ -88,45 +88,29 @@ teditor_edit_side::teditor_edit_side(int side, void teditor_edit_side::pre_show(CVideo& /*video*/, twindow& window) { - register_radio_toggle(window, "controller_human", team::CONTROLLER::HUMAN, controller_, controller_tgroup_); - register_radio_toggle(window, "controller_ai", team::CONTROLLER::AI, controller_, controller_tgroup_); - register_radio_toggle(window, "controller_null", team::CONTROLLER::EMPTY, controller_, controller_tgroup_); + register_radio_toggle("controller_human", controller_group, team::CONTROLLER::HUMAN, controller_, window); + register_radio_toggle("controller_ai", controller_group, team::CONTROLLER::AI, controller_, window); + register_radio_toggle("controller_null", controller_group, team::CONTROLLER::EMPTY, controller_, window); - register_radio_toggle(window, "vision_all", team::SHARE_VISION::ALL, share_vision_, vision_tgroup_); - register_radio_toggle(window, "vision_shroud", team::SHARE_VISION::SHROUD, share_vision_, vision_tgroup_); - register_radio_toggle(window, "vision_null", team::SHARE_VISION::NONE, share_vision_, vision_tgroup_); + register_radio_toggle("vision_all", vision_group, team::SHARE_VISION::ALL, share_vision_, window); + register_radio_toggle("vision_shroud", vision_group, team::SHARE_VISION::SHROUD, share_vision_, window); + register_radio_toggle("vision_null", vision_group, team::SHARE_VISION::NONE, share_vision_, window); } template -void teditor_edit_side::register_radio_toggle(twindow& window, const std::string& toggle_id, T enum_value, T& current_value, std::vector >& dst) +void teditor_edit_side::register_radio_toggle(const std::string& toggle_id, tgroup& group, const T& enum_value, T& current_value, twindow& window) { - ttoggle_button* b = &find_widget( - &window, toggle_id, false); + ttoggle_button& b = find_widget(&window, toggle_id, false); - b->set_value(enum_value == current_value); - connect_signal_mouse_left_click(*b, - boost::bind( - &teditor_edit_side::toggle_radio_callback, this, boost::ref(dst), boost::ref(current_value), b)); + b.set_value(enum_value == current_value); - dst.push_back(std::make_pair(b, enum_value)); + group.add_member(&b, enum_value); } -template -void teditor_edit_side::toggle_radio_callback(const std::vector >& vec, C& value, ttoggle_button* active) +void teditor_edit_side::post_show(twindow&) { - FOREACH(const AUTO & e, vec) - { - ttoggle_button* const b = e.first; - if(b == NULL) { - continue; - } else if(b == active && !b->get_value()) { - b->set_value(true); - } else if(b == active) { - value = e.second; - } else if(b != active && b->get_value()) { - b->set_value(false); - } - } + controller_ = controller_group.get_active_member_value(); + share_vision_ = vision_group.get_active_member_value(); } } // end namespace gui2 diff --git a/src/gui/dialogs/editor/editor_edit_side.hpp b/src/gui/dialogs/editor/editor_edit_side.hpp index ae235bdb86de..f80521364cb1 100644 --- a/src/gui/dialogs/editor/editor_edit_side.hpp +++ b/src/gui/dialogs/editor/editor_edit_side.hpp @@ -16,6 +16,7 @@ #define GUI_DIALOGS_EDITOR_EDIT_SIDE_HPP_INCLUDED #include "gui/dialogs/dialog.hpp" +#include "gui/widgets/group.hpp" #include "team.hpp" namespace gui2 @@ -73,22 +74,16 @@ class teditor_edit_side : public tdialog private: void pre_show(CVideo& /*video*/, twindow& window); + void post_show(twindow& window); template - void register_radio_toggle(twindow& window, const std::string& toggle_id, T enum_value, T& current_value, std::vector >& dst); + void register_radio_toggle(const std::string& toggle_id, tgroup& group, const T& enum_value, T& current_value, twindow& window); team::CONTROLLER& controller_; + tgroup controller_group; team::SHARE_VISION& share_vision_; - - typedef std::pair controller_toggle; - std::vector controller_tgroup_; - - typedef std::pair vision_toggle; - std::vector vision_tgroup_; - - template - void toggle_radio_callback(const std::vector >& vec, C& value, ttoggle_button* active); + tgroup vision_group; /** Inherited from tdialog, implemented by REGISTER_DIALOG. */ virtual const std::string& window_id() const;