The Battle for Wesnoth  1.19.7+dev
mp_staging.hpp
Go to the documentation of this file.
1 /*
2  Copyright (C) 2008 - 2024
3  Part of the Battle for Wesnoth Project https://www.wesnoth.org/
4 
5  This program is free software; you can redistribute it and/or modify
6  it under the terms of the GNU General Public License as published by
7  the Free Software Foundation; either version 2 of the License, or
8  (at your option) any later version.
9  This program is distributed in the hope that it will be useful,
10  but WITHOUT ANY WARRANTY.
11 
12  See the COPYING file for more details.
13 */
14 
15 #pragma once
16 
20 
22 
23 namespace ai
24 {
25  struct description;
26 }
27 
28 namespace gui2
29 {
30 class menu_button;
31 class slider;
32 class tree_view_node;
33 class player_list_helper;
34 
35 namespace dialogs
36 {
37 
38 class mp_staging : public modal_dialog, private plugin_executor
39 {
40 public:
41  mp_staging(ng::connect_engine& connect_engine, wesnothd_connection* connection = nullptr);
42 
43  ~mp_staging();
44 
46 
47 private:
48  virtual const std::string& window_id() const override;
49 
50  virtual void pre_show() override;
51 
52  virtual void post_show() override;
53 
54  template<typename... T>
55  tree_view_node& add_side_to_team_node(const ng::side_engine_ptr& side, T&&... params);
56 
57  void add_side_node(const ng::side_engine_ptr& side);
58 
59  /**
60  * Find an appropriate position to insert a side node.
61  *
62  * This ensures the side nodes are always arranged by descending index order
63  * in each team group.
64  */
65  int get_side_node_position(const ng::side_engine_ptr& side) const;
66 
67  void on_controller_select(const ng::side_engine_ptr& side, grid& row_grid);
68  void on_ai_select(const ng::side_engine_ptr& side, menu_button& ai_menu, const bool saved_game);
69  void on_color_select(const ng::side_engine_ptr& side, grid& row_grid);
70  void on_team_select(const ng::side_engine_ptr& side, menu_button& team_menu);
71 
72  template<void(ng::side_engine::*fptr)(int)>
74 
75  void select_leader_callback(const ng::side_engine_ptr& side, grid& row_grid);
76 
77  void update_leader_display(const ng::side_engine_ptr& side, grid& row_grid);
79 
80  void network_handler();
81 
83  {
84  state_changed_ = true;
85  }
86 
87  void start_game()
88  {
90  }
91 
93 
94  std::vector<ai::description*> ai_algorithms_;
95 
97 
98  std::size_t update_timer_;
99 
101 
102  std::map<std::string, tree_view_node*> team_tree_map_;
103  std::map<ng::side_engine_ptr, tree_view_node*> side_tree_map_;
104 
105  std::unique_ptr<player_list_helper> player_list_;
106 };
107 
108 } // namespace dialogs
109 } // namespace gui2
Abstract base class for all modal dialogs.
void update_leader_display(const ng::side_engine_ptr &side, grid &row_grid)
Definition: mp_staging.cpp:471
virtual const std::string & window_id() const override
The ID of the window to build.
tree_view_node & add_side_to_team_node(const ng::side_engine_ptr &side, T &&... params)
Definition: mp_staging.cpp:144
wesnothd_connection * network_connection_
Definition: mp_staging.hpp:96
void on_color_select(const ng::side_engine_ptr &side, grid &row_grid)
Definition: mp_staging.cpp:406
virtual void post_show() override
Actions to be taken after the window has been shown.
Definition: mp_staging.cpp:584
void select_leader_callback(const ng::side_engine_ptr &side, grid &row_grid)
Definition: mp_staging.cpp:454
mp_staging(ng::connect_engine &connect_engine, wesnothd_connection *connection=nullptr)
Definition: mp_staging.cpp:48
void on_ai_select(const ng::side_engine_ptr &side, menu_button &ai_menu, const bool saved_game)
Definition: mp_staging.cpp:388
ng::connect_engine & connect_engine_
Definition: mp_staging.hpp:92
int get_side_node_position(const ng::side_engine_ptr &side) const
Find an appropriate position to insert a side node.
Definition: mp_staging.cpp:131
void add_side_node(const ng::side_engine_ptr &side)
Definition: mp_staging.cpp:171
void on_team_select(const ng::side_engine_ptr &side, menu_button &team_menu)
Definition: mp_staging.cpp:415
std::map< ng::side_engine_ptr, tree_view_node * > side_tree_map_
Definition: mp_staging.hpp:103
std::unique_ptr< player_list_helper > player_list_
Definition: mp_staging.hpp:105
std::vector< ai::description * > ai_algorithms_
Definition: mp_staging.hpp:94
std::map< std::string, tree_view_node * > team_tree_map_
Definition: mp_staging.hpp:102
virtual void pre_show() override
Actions to be taken before showing the window.
Definition: mp_staging.cpp:72
void on_side_slider_change(const ng::side_engine_ptr &side, slider &slider)
Definition: mp_staging.cpp:464
void on_controller_select(const ng::side_engine_ptr &side, grid &row_grid)
Definition: mp_staging.cpp:376
Base container class.
Definition: grid.hpp:32
window * get_window()
Get the parent window.
Definition: widget.cpp:117
void set_retval(const int retval, const bool close_window=true)
Sets there return value of the window.
Definition: window.hpp:394
A class that represents a TCP/IP connection to the wesnothd server.
#define DEFINE_SIMPLE_EXECUTE_WRAPPER(dialog)
Adds a bare-bonesstatic execute function to a dialog class that immediately invokes and return the re...
A small explanation about what's going on here: Each action has access to two game_info objects First...
Definition: actions.cpp:59
Various uncategorised dialogs.
Generic file dialog.
@ OK
Dialog was closed with the OK button.
Definition: retval.hpp:35
std::shared_ptr< side_engine > side_engine_ptr