Skip to content

Commit

Permalink
teditor_edit_side: simplified radio toggles with groups
Browse files Browse the repository at this point in the history
  • Loading branch information
Vultraz committed Feb 26, 2016
1 parent f84fc5c commit e67dd6b
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 39 deletions.
42 changes: 13 additions & 29 deletions src/gui/dialogs/editor/editor_edit_side.cpp
Expand Up @@ -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<team::CONTROLLER>(window, "controller_human", team::CONTROLLER::HUMAN, controller_, controller_tgroup_);
register_radio_toggle<team::CONTROLLER>(window, "controller_ai", team::CONTROLLER::AI, controller_, controller_tgroup_);
register_radio_toggle<team::CONTROLLER>(window, "controller_null", team::CONTROLLER::EMPTY, controller_, controller_tgroup_);
register_radio_toggle<team::CONTROLLER>("controller_human", controller_group, team::CONTROLLER::HUMAN, controller_, window);
register_radio_toggle<team::CONTROLLER>("controller_ai", controller_group, team::CONTROLLER::AI, controller_, window);
register_radio_toggle<team::CONTROLLER>("controller_null", controller_group, team::CONTROLLER::EMPTY, controller_, window);

register_radio_toggle<team::SHARE_VISION>(window, "vision_all", team::SHARE_VISION::ALL, share_vision_, vision_tgroup_);
register_radio_toggle<team::SHARE_VISION>(window, "vision_shroud", team::SHARE_VISION::SHROUD, share_vision_, vision_tgroup_);
register_radio_toggle<team::SHARE_VISION>(window, "vision_null", team::SHARE_VISION::NONE, share_vision_, vision_tgroup_);
register_radio_toggle<team::SHARE_VISION>("vision_all", vision_group, team::SHARE_VISION::ALL, share_vision_, window);
register_radio_toggle<team::SHARE_VISION>("vision_shroud", vision_group, team::SHARE_VISION::SHROUD, share_vision_, window);
register_radio_toggle<team::SHARE_VISION>("vision_null", vision_group, team::SHARE_VISION::NONE, share_vision_, window);
}

template <typename T>
void teditor_edit_side::register_radio_toggle(twindow& window, const std::string& toggle_id, T enum_value, T& current_value, std::vector<std::pair<ttoggle_button*, T> >& dst)
void teditor_edit_side::register_radio_toggle(const std::string& toggle_id, tgroup<T>& group, const T& enum_value, T& current_value, twindow& window)
{
ttoggle_button* b = &find_widget<ttoggle_button>(
&window, toggle_id, false);
ttoggle_button& b = find_widget<ttoggle_button>(&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<T>, 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 <typename C>
void teditor_edit_side::toggle_radio_callback(const std::vector<std::pair<ttoggle_button*, C> >& 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
15 changes: 5 additions & 10 deletions src/gui/dialogs/editor/editor_edit_side.hpp
Expand Up @@ -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
Expand Down Expand Up @@ -73,22 +74,16 @@ class teditor_edit_side : public tdialog

private:
void pre_show(CVideo& /*video*/, twindow& window);
void post_show(twindow& window);

template <typename T>
void register_radio_toggle(twindow& window, const std::string& toggle_id, T enum_value, T& current_value, std::vector<std::pair<ttoggle_button*, T> >& dst);
void register_radio_toggle(const std::string& toggle_id, tgroup<T>& group, const T& enum_value, T& current_value, twindow& window);

team::CONTROLLER& controller_;
tgroup<team::CONTROLLER> controller_group;

team::SHARE_VISION& share_vision_;

typedef std::pair<ttoggle_button*, team::CONTROLLER> controller_toggle;
std::vector<controller_toggle> controller_tgroup_;

typedef std::pair<ttoggle_button*, team::SHARE_VISION> vision_toggle;
std::vector<vision_toggle> vision_tgroup_;

template <typename C>
void toggle_radio_callback(const std::vector<std::pair<ttoggle_button*, C> >& vec, C& value, ttoggle_button* active);
tgroup<team::SHARE_VISION> vision_group;

/** Inherited from tdialog, implemented by REGISTER_DIALOG. */
virtual const std::string& window_id() const;
Expand Down

0 comments on commit e67dd6b

Please sign in to comment.