Initial implementation of GUI2 MP Staging dialog (Connect + Wait)

This commit is contained in:
Charles Dang 2016-09-20 05:25:50 +11:00
parent 8609955b74
commit 9721910d98
12 changed files with 1107 additions and 0 deletions

View file

@ -415,6 +415,12 @@
"icons/action/help_30"
}
{_GUI_DEFINITION_MINIMAL 30
"minimal_arrow"
"Minimal arrow button"
"icons/arrows/double_arrow_right_30"
}
#undef _GUI_DEFINITION
#undef _GUI_DEFINITION_MINIMAL
#undef _GUI_RESOLUTION

View file

@ -0,0 +1,670 @@
#textdomain wesnoth-lib
###
### Definition of the mp game staging screen
###
#define _GUI_SIDE_LIST
[listbox]
id = "side_list"
definition = "default"
vertical_scrollbar_mode = "always"
horizontal_scrollbar_mode = "auto"
[header]
[row]
grow_factor = 1
[column]
grow_factor = 0
horizontal_alignment = "left"
border = "all"
border_size = 10
[spacer]
definition = "default"
linked_group = "side_number"
[/spacer]
[/column]
[column]
grow_factor = 1
border = "all"
border_size = 5
horizontal_alignment = "left"
[label]
definition = "default"
label = _ "Leader"
linked_group = "leader"
[/label]
[/column]
[column]
grow_factor = 0
border = "all"
border_size = 5
horizontal_alignment = "left"
[label]
definition = "default"
label = _ "Player/Type"
linked_group = "controller"
[/label]
[/column]
[column]
grow_factor = 0
border = "all"
border_size = 5
horizontal_alignment = "left"
[label]
definition = "default"
label = _ "Team/Color"
linked_group = "team_and_color"
[/label]
[/column]
[column]
grow_factor = 0
border = "all"
border_size = 5
horizontal_alignment = "left"
[label]
definition = "default"
label = _ "Gold/Income"
linked_group = "gold_and_income"
[/label]
[/column]
[/row]
[/header]
[list_definition]
[row]
[column]
horizontal_grow = "true"
[toggle_panel]
id = "panel"
definition = "default"
[grid]
[row]
[column]
grow_factor = 0
border = "all"
border_size = 10
horizontal_grow = "true"
vertical_alignment = "top"
[label]
id = "side_number"
definition = "default_large"
linked_group = "side_number"
[/label]
[/column]
[column]
grow_factor = 0
vertical_alignment = "center"
[button]
id = "select_leader"
definition = "minimal_arrow"
[/button]
[/column]
[column]
grow_factor = 1
horizontal_grow = "true"
#vertical_grow = "true"
[grid]
linked_group = "leader"
[row]
[column]
grow_factor = 0
horizontal_grow = "true"
border = "all"
border_size = 5
[image]
id = "leader_image"
definition = "default"
[/image]
[/column]
[column]
grow_factor = 1
horizontal_grow = "true"
vertical_grow = "true"
[grid]
[row]
grow_factor = 1
[column]
border = "all"
border_size = 5
horizontal_grow = "true"
vertical_grow = "true"
[label]
id = "leader_type"
definition = "default_large"
[/label]
[/column]
[/row]
[row]
grow_factor = 0
[column]
horizontal_grow = "true"
#vertical_grow = "true"
[grid]
[row]
[column]
grow_factor = 0
border = "left,bottom"
border_size = 5
[label]
definition = "default"
label = _ "<b>Faction:</b>"
use_markup = "true"
[/label]
[/column]
[column]
grow_factor = 1
border = "left,bottom,right"
border_size = 5
horizontal_grow = "true"
vertical_grow = "true"
[label]
id = "leader_faction"
definition = "default"
[/label]
[/column]
[/row]
[row]
[column]
grow_factor = 0
border = "left,bottom"
border_size = 5
[label]
definition = "default"
label = _ "<b>Gender:</b>"
use_markup = "true"
[/label]
[/column]
[column]
grow_factor = 1
border = "left,bottom,right"
border_size = 5
horizontal_grow = "true"
vertical_grow = "true"
[image]
id = "leader_gender"
definition = "default"
[/image]
[/column]
[/row]
[/grid]
[/column]
[/row]
[/grid]
[/column]
[/row]
[/grid]
[/column]
[column]
grow_factor = 0
horizontal_grow = "true"
[grid]
linked_group = "controller"
[row]
[column]
border = "all"
border_size = 5
horizontal_grow = "true"
[menu_button]
id = "controller"
definition = "default"
[/menu_button]
[/column]
[/row]
[row]
[column]
border = "all"
border_size = 5
horizontal_grow = "true"
[menu_button]
id = "ai_controller"
definition = "default"
[/menu_button]
[/column]
[/row]
[/grid]
[/column]
[column]
grow_factor = 0
[grid]
linked_group = "team_and_color"
[row]
[column]
border = "all"
border_size = 5
horizontal_grow = "true"
[menu_button]
id = "side_team"
definition = "default"
[/menu_button]
[/column]
[/row]
[row]
[column]
border = "all"
border_size = 5
horizontal_grow = "true"
[menu_button]
id = "side_color"
definition = "default"
[/menu_button]
[/column]
[/row]
[/grid]
[/column]
[column]
grow_factor = 0
[grid]
linked_group = "gold_and_income"
[row]
[column]
border = "all"
border_size = 5
horizontal_grow = "true"
[slider]
id = "side_gold_slider"
definition = "short"
# TODO: the GUI1 dialog had a min of 20, but that meant the slider was never reaching max...
minimum_value = 25
maximum_value = 800
step_size = 25
[/slider]
[/column]
[/row]
[row]
[column]
border = "all"
border_size = 5
horizontal_grow = "true"
[slider]
id = "side_income_slider"
definition = "short"
minimum_value = -2
maximum_value = 18
step_size = 1
[/slider]
[/column]
[/row]
[/grid]
[/column]
[/row]
[/grid]
[/toggle_panel]
[/column]
[/row]
[/list_definition]
[/listbox]
#enddef
#define _GUI_CONTROL_AREA
#[grid]
# [row]
# grow_factor = 1
# [column]
# border = "all"
# border_size = 5
# horizontal_grow = "true"
# vertical_grow = "true"
[listbox]
id = "player_list"
definition = "default"
vertical_scrollbar_mode = "always"
horizontal_scrollbar_mode = "never"
[list_definition]
[row]
[column]
horizontal_grow = "true"
[toggle_panel]
id = "panel"
definition = "default"
[grid]
[row]
[column]
border = "all"
border_size = 5
horizontal_grow = "true"
[label]
id = "player_name"
definition = "default"
[/label]
[/column]
[/row]
[/grid]
[/toggle_panel]
[/column]
[/row]
[/list_definition]
[/listbox]
# [/column]
# [/row]
#[/grid]
#enddef
[window]
id = "mp_staging"
description = "Game staging area."
[resolution]
definition = "borderless"
{GUI_WINDOW_FULLSCREEN}
[linked_group]
id = "side_number"
fixed_width = "true"
[/linked_group]
[linked_group]
id = "controller"
fixed_width = "true"
[/linked_group]
[linked_group]
id = "leader"
fixed_width = "true"
[/linked_group]
[linked_group]
id = "team_and_color"
fixed_width = "true"
[/linked_group]
[linked_group]
id = "gold_and_income"
fixed_width = "true"
[/linked_group]
[tooltip]
id = "tooltip"
[/tooltip]
[helptip]
id = "tooltip"
[/helptip]
[grid]
[row]
grow_factor = 0
[column]
grow_factor = 1
horizontal_alignment = "left"
border = "all"
border_size = 5
[label]
id = "title"
definition = "title"
label = _ "Game Lobby"
[/label]
[/column]
[/row]
[row]
grow_factor = 1
[column]
horizontal_grow = "true"
vertical_grow = "true"
[grid]
[row]
[column]
grow_factor = 1
vertical_grow = "true"
horizontal_grow = "true"
[grid]
[row]
grow_factor = 1
[column]
horizontal_grow = "true"
vertical_grow = "true"
{GUI_FORCE_WIDGET_MINIMUM_SIZE 0 "((screen_height * 55) / 100)" (
border = "all"
border_size = 5
{_GUI_SIDE_LIST}
)}
[/column]
[/row]
{GUI_HORIZONTAL_SPACER_LINE}
[row]
grow_factor = 0
[column]
horizontal_grow = "true"
vertical_grow = "true"
{GUI_FORCE_WIDGET_MINIMUM_SIZE 0 "((screen_height * 25 / 100))" (
[chatbox]
id = "chat"
[/chatbox]
)}
[/column]
[/row]
[/grid]
[/column]
[column]
grow_factor = 0
horizontal_grow = "true"
vertical_grow = "true"
{_GUI_CONTROL_AREA}
[/column]
[/row]
[row]
grow_factor = 0
[column]
grow_factor = 0
[spacer][/spacer]
[/column]
[column]
grow_factor = 0
horizontal_grow = "true"
[grid]
[row]
[column]
border = "all"
border_size = 5
[button]
id = "ok"
definition = "default"
label = _ "Im Ready"
[/button]
[/column]
[column]
border = "all"
border_size = 5
[button]
id = "cancel"
definition = "default"
label = _ "Cancel"
[/button]
[/column]
[/row]
[/grid]
[/column]
[/row]
[/grid]
[/column]
[/row]
[/grid]
[/resolution]
[/window]
#undef _GUI_CONTROL_AREA
#undef _GUI_SIDE_LIST

Binary file not shown.

After

Width:  |  Height:  |  Size: 447 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 419 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 423 B

View file

@ -615,6 +615,8 @@
<Unit filename="../../src/gui/dialogs/multiplayer/mp_method_selection.hpp" />
<Unit filename="../../src/gui/dialogs/multiplayer/mp_options_helper.cpp" />
<Unit filename="../../src/gui/dialogs/multiplayer/mp_options_helper.hpp" />
<Unit filename="../../src/gui/dialogs/multiplayer/mp_staging.cpp" />
<Unit filename="../../src/gui/dialogs/multiplayer/mp_staging.hpp" />
<Unit filename="../../src/gui/dialogs/multiplayer/synced_choice_wait.cpp" />
<Unit filename="../../src/gui/dialogs/multiplayer/synced_choice_wait.hpp" />
<Unit filename="../../src/gui/dialogs/network_transmission.cpp" />

View file

@ -834,6 +834,7 @@ set(wesnoth-main_SRC
gui/dialogs/multiplayer/mp_login.cpp
gui/dialogs/multiplayer/mp_method_selection.cpp
gui/dialogs/multiplayer/mp_options_helper.cpp
gui/dialogs/multiplayer/mp_staging.cpp
gui/dialogs/network_transmission.cpp
gui/dialogs/popup.cpp
gui/dialogs/preferences_dialog.cpp

View file

@ -409,6 +409,7 @@ wesnoth_sources = Split("""
gui/dialogs/multiplayer/mp_login.cpp
gui/dialogs/multiplayer/mp_method_selection.cpp
gui/dialogs/multiplayer/mp_options_helper.cpp
gui/dialogs/multiplayer/mp_staging.cpp
gui/dialogs/multiplayer/synced_choice_wait.cpp
gui/dialogs/network_transmission.cpp
gui/dialogs/popup.cpp

View file

@ -26,6 +26,7 @@
#include "gui/dialogs/multiplayer/mp_connect.hpp"
#include "gui/dialogs/multiplayer/mp_create_game.hpp"
#include "gui/dialogs/multiplayer/mp_login.hpp"
#include "gui/dialogs/multiplayer/mp_staging.hpp"
#include "gui/dialogs/network_transmission.hpp"
#include "gui/dialogs/preferences_dialog.hpp"
#include "gui/widgets/settings.hpp"
@ -474,6 +475,23 @@ static bool enter_connect_mode(CVideo& video, const config& game_config,
{
ng::connect_engine_ptr connect_engine(new ng::connect_engine(state, true, campaign_info.get()));
if(preferences::new_lobby()) {
gui2::tmp_staging dlg(game_config, *connect_engine);
dlg.show(video);
if(dlg.get_retval() == gui2::twindow::OK) {
campaign_controller controller(video, state, game_config, game_config_manager::get()->terrain_types());
controller.set_mp_info(campaign_info.get());
controller.play_game();
if(wesnothd_connection) {
wesnothd_connection->send_data(config("leave_game"));
}
}
return true;
}
mp::connect ui(video, wesnothd_connection, state.mp_settings().name, game_config, gamechat, gamelist,
*connect_engine);
run_lobby_loop(video, ui);

View file

@ -0,0 +1,337 @@
/*
Copyright (C) 2008 - 2016 by the Battle for Wesnoth Project http://www.wesnoth.org/
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY.
See the COPYING file for more details.
*/
#define GETTEXT_DOMAIN "wesnoth-lib"
#include "gui/dialogs/multiplayer/mp_staging.hpp"
#include "config_assign.hpp"
#include "game_preferences.hpp"
#include "gettext.hpp"
#include "gui/auxiliary/field.hpp"
#include "gui/dialogs/helper.hpp"
#include "gui/dialogs/message.hpp"
#include "gui/dialogs/multiplayer/faction_select.hpp"
#include "gui/dialogs/transient_message.hpp"
#include "gui/widgets/integer_selector.hpp"
#include "gui/widgets/button.hpp"
#include "gui/widgets/chatbox.hpp"
#include "gui/widgets/menu_button.hpp"
#include "gui/widgets/image.hpp"
#ifdef GUI2_EXPERIMENTAL_LISTBOX
#include "gui/widgets/list.hpp"
#else
#include "gui/widgets/listbox.hpp"
#endif
#include "gui/widgets/minimap.hpp"
#include "gui/widgets/settings.hpp"
#include "gui/widgets/label.hpp"
#include "gui/widgets/slider.hpp"
#include "gui/widgets/stacked_widget.hpp"
#include "gui/widgets/status_label_helper.hpp"
#include "gui/widgets/toggle_button.hpp"
#include "gui/widgets/toggle_panel.hpp"
#include "gui/widgets/text_box.hpp"
#include "game_config.hpp"
#include "savegame.hpp"
#include "settings.hpp"
#include "units/types.hpp"
#include "formatter.hpp"
#ifdef GUI2_EXPERIMENTAL_LISTBOX
#include "utils/functional.hpp"
#endif
#include <boost/algorithm/string.hpp>
namespace gui2
{
// FIXME: doesn't show properly...
//static const std::string male = "&#9794;";
//static const std::string female = "&#9792;";
static const std::string male = "(M)";
static const std::string female = "(F)";
REGISTER_DIALOG(mp_staging)
tmp_staging::tmp_staging(const config& /*cfg*/, ng::connect_engine& connect_engine)
: connect_engine_(connect_engine)
, ai_algorithms_(ai::configuration::get_available_ais())
{
//ai_algorithms_ = ai::configuration::get_available_ais();
}
void tmp_staging::pre_show(twindow& window)
{
window.set_enter_disabled(true);
//
// Set title
//
tlabel& title = find_widget<tlabel>(&window, "title", false);
title.set_label((formatter() << title.label() << " " << utils::unicode_em_dash << " " << connect_engine_.scenario()["name"].t_str()).str());
//
// Set up sides list
//
tlistbox& list = find_widget<tlistbox>(&window, "side_list", false);
window.keyboard_capture(&list);
for(const auto& side_ptr : connect_engine_.side_engines()) {
// Shorthand variable
ng::side_engine& side = *side_ptr.get();
if(!side.allow_player() && !game_config::debug) {
continue;
}
std::map<std::string, string_map> data;
string_map item;
item["label"] = std::to_string(side.index() + 1);
data.emplace("side_number", item);
// TODO: don't hardcode meganta?
item["label"] = "units/unknown-unit.png~RC(magenta>" + std::to_string(side.color() + 1) + ")";
data.emplace("leader_image", item);
item["label"] = "icons/icon-random.png";
data.emplace("leader_gender", item);
tgrid& row_grid = list.add_row(data);
update_leader_display(side, row_grid);
// Status variables
const bool fls = connect_engine_.force_lock_settings();
const bool ums = connect_engine_.params().use_map_settings;
const bool lock_gold = side.cfg()["gold_lock"].to_bool(fls);
const bool lock_income = side.cfg()["income_lock"].to_bool(fls);
const bool lock_team = side.cfg()["team_lock"].to_bool(fls);
const bool lock_color = side.cfg()["color_lock"].to_bool(fls);
const bool saved_game = connect_engine_.params().saved_game;
//
// AI Algorithm
//
assert(!ai_algorithms_.empty());
int selection = 0;
// We use an index-based loop in order to get the index of the selected option
std::vector<config> ai_options;
for(unsigned i = 0; i < ai_algorithms_.size(); i++) {
ai_options.push_back(config_of("label", ai_algorithms_[i]->text));
if(ai_algorithms_[i]->id == side.ai_algorithm()) {
selection = i;
}
}
tmenu_button& ai_selection = find_widget<tmenu_button>(&row_grid, "ai_controller", false);
ai_selection.set_values(ai_options, selection);
ai_selection.connect_click_handler(std::bind(&tmp_staging::on_ai_select, this, std::ref(side), std::ref(ai_selection)));
on_ai_select(side, ai_selection);
//
// Controller
//
std::vector<config> controller_names;
for(const auto& controller : side.controller_options()) {
controller_names.push_back(config_of("label", controller.second));
}
tmenu_button& controller_selection = find_widget<tmenu_button>(&row_grid, "controller", false);
controller_selection.set_values(controller_names, side.current_controller_index());
controller_selection.set_active(side.controller_options().size() > 1);
controller_selection.connect_click_handler(std::bind(&tmp_staging::on_controller_select, this, std::ref(side), std::ref(row_grid)));
on_controller_select(side, row_grid);
//
// Leader controls
//
connect_signal_mouse_left_click(
find_widget<tbutton>(&row_grid, "select_leader", false),
std::bind(&tmp_staging::select_leader_callback, this, std::ref(window), std::ref(side), std::ref(row_grid)));
//
// Team
//
std::vector<config> team_names;
for(const auto& team : side.player_teams()) {
team_names.push_back(config_of("label", team));
}
tmenu_button& team_selection = find_widget<tmenu_button>(&row_grid, "side_team", false);
team_selection.set_values(team_names, side.team());
team_selection.set_active(!saved_game);
//
// Colors
//
std::vector<config> color_options;
for(const auto& color : side.get_colors()) {
// BIG FAT TODO: get rid of the hardcoded GUI1 formatting and do something about this hideous string manipulation
const std::string c = color.substr(color.find_first_of(">") + 1);
std::string cid = c;
cid[0] = std::tolower(cid[0]);
color_options.push_back(config_of
("label", c)
("icon", (formatter() << "misc/status.png~RC(magenta>" << cid << ")").str())
);
}
tmenu_button& color_selection = find_widget<tmenu_button>(&row_grid, "side_color", false);
color_selection.set_values(color_options, side.color());
color_selection.set_active(!saved_game);
//
// Gold and Income
//
tslider& slider_gold = find_widget<tslider>(&row_grid, "side_gold_slider", false);
slider_gold.set_value(side.cfg()["gold"].to_int(100));
connect_signal_notify_modified(slider_gold, std::bind([&]() { side.set_gold(slider_gold.get_value()); }));
tslider& slider_income = find_widget<tslider>(&row_grid, "side_income_slider", false);
slider_income.set_value(side.cfg()["income"]);
connect_signal_notify_modified(slider_income, std::bind([&]() { side.set_income(slider_income.get_value()); }));
// TODO: hide header, or maybe display the saved values
if(saved_game) {
slider_gold.set_visible(twidget::tvisible::invisible);
slider_income.set_visible(twidget::tvisible::invisible);
}
//
// Gold, income, team, and color are only suggestions unless explicitly locked
//
if(ums) {
team_selection.set_active(!lock_team);
color_selection.set_active(!lock_color);
slider_gold.set_active(!lock_gold);
slider_income.set_active(!lock_income);
}
}
//
// Initialize chatbox and game rooms
//
// TODO: seems the chatbox requires lobby info to be set first
/*tchatbox& chat = find_widget<tchatbox>(&window, "chat", false);
chat.room_window_open("this game", true);
chat.active_window_changed();*/
//
// Set up the Lua plugin context
//
plugins_context_.reset(new plugins_context("Multiplayer Staging"));
plugins_context_->set_callback("launch", [&window](const config&) { window.set_retval(twindow::OK); }, false);
plugins_context_->set_callback("quit", [&window](const config&) { window.set_retval(twindow::CANCEL); }, false);
plugins_context_->set_callback("chat", [this, &window](const config&) { return; /* TODO*/ }, false);
}
void tmp_staging::sync_changes()
{
// TODO: should this call somehow be integrated into the connect engine setters?
connect_engine_.update_and_send_diff();
}
void tmp_staging::on_controller_select(ng::side_engine& side, tgrid& row_grid)
{
tmenu_button& ai_selection = find_widget<tmenu_button>(&row_grid, "ai_controller", false);
tmenu_button& controller_selection = find_widget<tmenu_button>(&row_grid, "controller", false);
side.set_controller(side.controller_options()[controller_selection.get_value()].first);
ai_selection.set_visible(side.controller() == ng::CNTR_COMPUTER ? twidget::tvisible::visible : twidget::tvisible::hidden);
sync_changes();
}
void tmp_staging::on_ai_select(ng::side_engine& side, tmenu_button& ai_menu)
{
side.set_ai_algorithm(ai_algorithms_[ai_menu.get_value()]->id);
sync_changes();
}
void tmp_staging::select_leader_callback(twindow& window, ng::side_engine& side, tgrid& row_grid)
{
gui2::tfaction_select dlg(side.flg(), std::to_string(side.color() + 1), side.index() + 1);
dlg.show(window.video());
if(dlg.get_retval() == twindow::OK) {
update_leader_display(side, row_grid);
sync_changes();
}
}
void tmp_staging::update_leader_display(ng::side_engine& side, tgrid& row_grid)
{
const std::string current_faction = (*side.flg().choosable_factions()[side.flg().current_faction_index()])["name"];
// BIG FAT TODO: get rid of this shitty "null" string value in the FLG manager
const std::string current_leader = side.flg().current_leader() != "null" ? side.flg().current_leader() : utils::unicode_em_dash;
const std::string current_gender = side.flg().current_gender() != "null" ? side.flg().current_gender() : utils::unicode_em_dash;
// Sprite
std::string new_image;
if(side.flg().is_random_faction() || current_leader == "random") {
new_image = "units/random-dice.png";
} else {
const unit_type& type = unit_types.find(current_leader)->get_gender_unit_type(current_gender);
new_image = formatter() << type.image() << "~RC(magenta>" << side.color() + 1 << ")";
}
find_widget<timage>(&row_grid, "leader_image", false).set_label(new_image);
// Faction and leader
find_widget<tlabel>(&row_grid, "leader_type", false).set_label(current_leader);
find_widget<tlabel>(&row_grid, "leader_faction", false).set_label(current_faction);
// Gender
if(current_gender != utils::unicode_em_dash) {
const std::string gender_icon = formatter() << "icons/icon-" << current_gender << ".png";
find_widget<timage>(&row_grid, "leader_gender", false).set_label(gender_icon);
}
}
void tmp_staging::post_show(twindow& window)
{
if(window.get_retval() == twindow::OK) {
connect_engine_.start_game();
}
}
} // namespace gui2

View file

@ -0,0 +1,69 @@
/*
Copyright (C) 2008 - 2016 by the Battle for Wesnoth Project http://www.wesnoth.org/
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY.
See the COPYING file for more details.
*/
#ifndef GUI_DIALOGS_MP_STAGING_HPP_INCLUDED
#define GUI_DIALOGS_MP_STAGING_HPP_INCLUDED
#include "ai/configuration.hpp"
#include "gui/dialogs/dialog.hpp"
#include "gui/dialogs/multiplayer/plugin_executor.hpp"
#include "game_initialization/connect_engine.hpp"
#include "game_initialization/multiplayer.hpp"
#include "mp_game_settings.hpp"
class config;
namespace gui2
{
class ttoggle_button;
class ttoggle_panel;
class tslider;
class tlabel;
class tmenu_button;
class twidget;
class tmp_staging : public tdialog, private plugin_executor
{
public:
tmp_staging(const config& cfg, ng::connect_engine& connect_engine);
private:
/** Inherited from tdialog, implemented by REGISTER_DIALOG. */
virtual const std::string& window_id() const;
/** Inherited from tdialog. */
void pre_show(twindow& window);
/** Inherited from tdialog. */
void post_show(twindow& window);
void sync_changes();
void on_controller_select(ng::side_engine& side, tgrid& row_grid);
void on_ai_select(ng::side_engine& side, tmenu_button& ai_menu);
void select_leader_callback(twindow& window, ng::side_engine& side, tgrid& row_grid);
void update_leader_display(ng::side_engine& side, tgrid& row_grid);
ng::connect_engine& connect_engine_;
std::vector<ai::description*> ai_algorithms_;
};
} // namespace gui2
#endif

View file

@ -76,6 +76,7 @@
#include "gui/dialogs/multiplayer/mp_create_game.hpp"
#include "gui/dialogs/multiplayer/mp_create_game_set_password.hpp"
#include "gui/dialogs/multiplayer/mp_join_game_password_prompt.hpp"
#include "gui/dialogs/multiplayer/mp_staging.hpp"
#include "gui/dialogs/depcheck_confirm_change.hpp"
#include "gui/dialogs/depcheck_select_new.hpp"
#include "gui/dialogs/multiplayer/mp_login.hpp"
@ -415,6 +416,7 @@ BOOST_AUTO_TEST_CASE(test_gui2)
test<gui2::tmp_login>();
test<gui2::tmp_method_selection>();
test<gui2::tmp_server_list>();
//test<gui2::tmp_staging>();
test<gui2::tsimple_item_selector>();
test<gui2::tscreenshot_notification>();
test<gui2::tselect_orb_colors>();
@ -483,6 +485,7 @@ BOOST_AUTO_TEST_CASE(test_gui2)
// The title screen appears to be throwing a bad_alloc on Travis, so disable it for now
"title_screen",
"end_credits",
"mp_staging",
};
std::sort(list.begin(), list.end());
std::sort(omitted.begin(), omitted.end());