Skip to content

Commit

Permalink
Make Edit Side dialog to use new share_vision tristate
Browse files Browse the repository at this point in the history
  • Loading branch information
Vultraz committed Oct 8, 2015
1 parent 1cf271e commit 1a6161a
Show file tree
Hide file tree
Showing 6 changed files with 81 additions and 82 deletions.
74 changes: 38 additions & 36 deletions data/gui/default/window/editor_edit_side.cfg
Expand Up @@ -3,17 +3,18 @@
### 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"
border_size = 5
horizontal_alignment = "left"

[toggle_button]
id = "controller_"+{ID}
id = {ID}
definition = "radio"
label = {LABEL}
linked_group = "radio_options"
[/toggle_button]
[/column]
#enddef
Expand All @@ -38,6 +39,11 @@
[helptip]
id = "tooltip_large"
[/helptip]

[linked_group]
id = "radio_options"
fixed_width = "true"
[/linked_group]

[grid]

Expand Down Expand Up @@ -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"
Expand Down Expand Up @@ -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"
Expand Down Expand Up @@ -390,24 +372,44 @@
[grid]

[row]
{_GUI_SIDE_RADIO_OPTION controller_human ( _ "controller^Human")}

{_GUI_SIDE_RADIO_OPTION controller_ai ( _ "controller^AI only")}

[column]
horizontal_alignment = "left"
{_GUI_SIDE_RADIO_OPTION controller_null ( _ "controller^None")}
[/row]

[grid]
[/grid]

[row]
{_GUI_SIDE_CONTROLLER_OPTION human ( _ "controller^Human")}
[/column]

{_GUI_SIDE_CONTROLLER_OPTION ai ( _ "controller^AI only")}
[/row]

[row]

{_GUI_SIDE_CONTROLLER_OPTION null ( _ "controller^None")}
[/row]
[column]
border = "all"
border_size = 5
horizontal_alignment = "left"
vertical_alignment = "top"

[/grid]
[label]
definition = "default"
label = _ "Share Vision:"
[/label]
[/column]

[column]
horizontal_alignment = "left"

[grid]

[row]
{_GUI_SIDE_RADIO_OPTION vision_all ( _ "vision^All")}

[/column]
{_GUI_SIDE_RADIO_OPTION vision_shroud ( _ "vision^Shroud")}

{_GUI_SIDE_RADIO_OPTION vision_null ( _ "vision^None")}
[/row]

[/grid]
Expand Down
8 changes: 4 additions & 4 deletions src/editor/map/context_manager.cpp
Expand Up @@ -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);
}
}

Expand Down
11 changes: 3 additions & 8 deletions src/editor/map/map_context.cpp
Expand Up @@ -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));
Expand All @@ -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_++;
Expand Down Expand Up @@ -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();
Expand Down
2 changes: 1 addition & 1 deletion src/editor/map/map_context.hpp
Expand Up @@ -244,7 +244,7 @@ class map_context : public display_context, private boost::noncopyable
*/
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);

/**
Expand Down
45 changes: 23 additions & 22 deletions src/gui/dialogs/editor/editor_edit_side.cpp
Expand Up @@ -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;
Expand All @@ -80,52 +80,53 @@ 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);
}

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) {
continue;
} 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
23 changes: 12 additions & 11 deletions src/gui/dialogs/editor/editor_edit_side.hpp
Expand Up @@ -35,9 +35,8 @@ class teditor_edit_side : public tdialog
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);
Expand All @@ -51,9 +50,8 @@ class teditor_edit_side : public tdialog
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,
Expand All @@ -67,9 +65,8 @@ class teditor_edit_side : public tdialog
village_income,
village_support,
fog,
share_view,
shroud,
share_maps,
share_vision,
controller,
no_leader,
hidden).show(video);
Expand All @@ -78,17 +75,21 @@ class teditor_edit_side : public tdialog
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;
Expand Down

0 comments on commit 1a6161a

Please sign in to comment.