Make Edit Side dialog to use new share_vision tristate

This commit is contained in:
Charles Dang 2015-10-08 13:39:59 +11:00
parent 1cf271e01e
commit 1a6161a8ab
6 changed files with 81 additions and 82 deletions

View file

@ -3,7 +3,7 @@
### Definition of the window to edit gamemap scenarios
###
#define _GUI_SIDE_CONTROLLER_OPTION ID LABEL
#define _GUI_SIDE_RADIO_OPTION ID LABEL
[column]
grow_factor = 1
border = "all"
@ -11,9 +11,10 @@
horizontal_alignment = "left"
[toggle_button]
id = "controller_"+{ID}
id = {ID}
definition = "radio"
label = {LABEL}
linked_group = "radio_options"
[/toggle_button]
[/column]
#enddef
@ -38,6 +39,11 @@
[helptip]
id = "tooltip_large"
[/helptip]
[linked_group]
id = "radio_options"
fixed_width = "true"
[/linked_group]
[grid]
@ -177,18 +183,6 @@
[/toggle_button]
[/column]
[column]
horizontal_alignment = "left"
border = "all"
border_size = 5
[toggle_button]
id = "share_maps"
definition = "default"
label= _ "Share map"
[/toggle_button]
[/column]
[column]
horizontal_alignment = "left"
border = "all"
@ -217,18 +211,6 @@
[/toggle_button]
[/column]
[column]
horizontal_alignment = "left"
border = "all"
border_size = 5
[toggle_button]
id = "share_view"
definition = "default"
label= _ "Share view"
[/toggle_button]
[/column]
[column]
horizontal_alignment = "left"
border = "all"
@ -390,24 +372,44 @@
[grid]
[row]
{_GUI_SIDE_RADIO_OPTION controller_human ( _ "controller^Human")}
[column]
horizontal_alignment = "left"
{_GUI_SIDE_RADIO_OPTION controller_ai ( _ "controller^AI only")}
[grid]
{_GUI_SIDE_RADIO_OPTION controller_null ( _ "controller^None")}
[/row]
[row]
{_GUI_SIDE_CONTROLLER_OPTION human ( _ "controller^Human")}
[/grid]
{_GUI_SIDE_CONTROLLER_OPTION ai ( _ "controller^AI only")}
[/column]
{_GUI_SIDE_CONTROLLER_OPTION null ( _ "controller^None")}
[/row]
[/row]
[row]
[/grid]
[column]
border = "all"
border_size = 5
horizontal_alignment = "left"
vertical_alignment = "top"
[/column]
[label]
definition = "default"
label = _ "Share Vision:"
[/label]
[/column]
[column]
horizontal_alignment = "left"
[grid]
[row]
{_GUI_SIDE_RADIO_OPTION vision_all ( _ "vision^All")}
{_GUI_SIDE_RADIO_OPTION vision_shroud ( _ "vision^Shroud")}
{_GUI_SIDE_RADIO_OPTION vision_null ( _ "vision^None")}
[/row]
[/grid]

View file

@ -208,21 +208,21 @@ void context_manager::edit_side_dialog(int side)
bool no_leader = t.no_leader();
bool hidden = t.hidden();
bool share_view = t.share_view();
bool share_maps = t.share_maps();
bool fog = t.uses_fog();
bool shroud = t.uses_shroud();
team::SHARE_VISION share_vision = t.share_vision();
bool ok = gui2::teditor_edit_side::execute(side +1, team_name, user_team_name,
gold, income, village_gold, village_support,
fog, share_view, shroud, share_maps,
fog, shroud, share_vision,
controller, no_leader, hidden,
gui_.video());
if (ok) {
get_map_context().set_side_setup(side, team_name, user_team_name,
gold, income, village_gold, village_support,
fog, share_view, shroud, share_maps, controller, hidden, no_leader);
fog, shroud, share_vision, controller, hidden, no_leader);
}
}

View file

@ -196,7 +196,7 @@ map_context::map_context(const config& game_config, const std::string& filename,
void map_context::set_side_setup(int side, const std::string& team_name, const std::string& user_team_name,
int gold, int income, int village_gold, int village_support,
bool fog, bool share_view, bool shroud, bool share_maps,
bool fog, bool shroud, team::SHARE_VISION share_vision,
team::CONTROLLER controller, bool hidden, bool no_leader)
{
assert(teams_.size() > static_cast<unsigned int>(side));
@ -211,11 +211,7 @@ void map_context::set_side_setup(int side, const std::string& team_name, const s
t.set_hidden(hidden);
t.set_fog(fog);
t.set_shroud(shroud);
//TODO: USE team::SHARE_VISION in editor too.
t.handle_legacy_share_vision(config_of
("share_maps", share_maps)
("share_view", share_view)
);
t.set_share_vision(share_vision);
t.set_village_gold(village_gold);
t.set_village_support(village_support);
actions_since_save_++;
@ -474,9 +470,8 @@ config map_context::to_config()
// side["allow_player"] = "yes";
side["fog"] = t->uses_fog();
side["share_view"] = t->share_view();
side["shroud"] = t->uses_shroud();
side["share_maps"] = t->share_maps();
side["share_vision"] = t->share_vision();
side["gold"] = t->gold();
side["income"] = t->base_income();

View file

@ -244,7 +244,7 @@ public:
*/
void set_side_setup(int side, const std::string& id, const std::string& name,
int gold, int income, int village_gold, int village_support,
bool fog, bool share_view, bool shroud, bool share_maps,
bool fog, bool shroud, team::SHARE_VISION share_vision,
team::CONTROLLER controller, bool hidden, bool no_leader);
/**

View file

@ -58,13 +58,13 @@ teditor_edit_side::teditor_edit_side(int side,
int& village_income,
int& village_support,
bool& fog,
bool& share_view,
bool& shroud,
bool& share_maps,
team::SHARE_VISION& share_vision,
team::CONTROLLER& controller,
bool& no_leader,
bool& hidden)
: controller_(controller)
, share_vision_(share_vision)
{
std::stringstream side_stream;
side_stream << side;
@ -80,10 +80,7 @@ teditor_edit_side::teditor_edit_side(int side,
register_integer("village_support", true, village_support);
register_bool("fog", true, fog);
register_bool("share_view", true, share_view);
register_bool("shroud", true, shroud);
register_bool("share_maps", true, share_maps);
register_bool("no_leader", true, no_leader);
register_bool("hidden", true, hidden);
@ -91,30 +88,33 @@ teditor_edit_side::teditor_edit_side(int side,
void teditor_edit_side::pre_show(CVideo& /*video*/, twindow& window)
{
register_controller_toggle(window, "human", team::CONTROLLER::HUMAN);
register_controller_toggle(window, "ai", team::CONTROLLER::AI);
register_controller_toggle(window, "null", team::CONTROLLER::EMPTY);
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::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_);
}
void teditor_edit_side::register_controller_toggle(twindow& window,
const std::string& toggle_id,
team::CONTROLLER value)
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)
{
ttoggle_button* b = &find_widget<ttoggle_button>(
&window, "controller_" + toggle_id, false);
&window, toggle_id, false);
b->set_value(value == controller_);
connect_signal_mouse_left_click(
*b,
boost::bind(
&teditor_edit_side::toggle_controller_callback, this, b));
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));
controller_tgroup_.push_back(std::make_pair(b, value));
dst.push_back(std::make_pair(b, enum_value));
}
void teditor_edit_side::toggle_controller_callback(ttoggle_button* active)
template <typename C>
void teditor_edit_side::toggle_radio_callback(const std::vector<std::pair<ttoggle_button*, C> >& vec, C& value, ttoggle_button* active)
{
FOREACH(const AUTO & e, controller_tgroup_)
FOREACH(const AUTO & e, vec)
{
ttoggle_button* const b = e.first;
if(b == NULL) {
@ -122,10 +122,11 @@ void teditor_edit_side::toggle_controller_callback(ttoggle_button* active)
} else if(b == active && !b->get_value()) {
b->set_value(true);
} else if(b == active) {
controller_ = e.second;
value = e.second;
} else if(b != active && b->get_value()) {
b->set_value(false);
}
}
}
}
} // end namespace gui2

View file

@ -35,9 +35,8 @@ public:
int& village_income,
int& village_support,
bool& fog,
bool& share_view,
bool& shroud,
bool& share_maps,
team::SHARE_VISION& share_vision,
team::CONTROLLER& controller,
bool& no_leader,
bool& hidden);
@ -51,9 +50,8 @@ public:
int& village_income,
int& village_support,
bool& fog,
bool& share_view,
bool& shroud,
bool& share_maps,
team::SHARE_VISION& share_vision,
team::CONTROLLER& controller,
bool& no_leader,
bool& hidden,
@ -67,9 +65,8 @@ public:
village_income,
village_support,
fog,
share_view,
shroud,
share_maps,
share_vision,
controller,
no_leader,
hidden).show(video);
@ -78,17 +75,21 @@ public:
private:
void pre_show(CVideo& /*video*/, twindow& window);
void register_controller_toggle(twindow& window,
const std::string& toggle_id,
team::CONTROLLER value);
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);
team::CONTROLLER& controller_;
team::SHARE_VISION& share_vision_;
typedef std::pair<ttoggle_button*, team::CONTROLLER> controller_toggle;
// Dialog display state variables.
std::vector<controller_toggle> controller_tgroup_;
void toggle_controller_callback(ttoggle_button* active);
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);
/** Inherited from tdialog, implemented by REGISTER_DIALOG. */
virtual const std::string& window_id() const;