MP Join Game: converted dialog to team-based tree view like MP Staging
This commit is contained in:
parent
b1fb517614
commit
262188c82e
3 changed files with 327 additions and 249 deletions
|
@ -4,82 +4,143 @@
|
|||
###
|
||||
|
||||
#define _GUI_SIDE_LIST
|
||||
[listbox]
|
||||
[tree_view]
|
||||
id = "side_list"
|
||||
definition = "default"
|
||||
|
||||
vertical_scrollbar_mode = "always"
|
||||
horizontal_scrollbar_mode = "never"
|
||||
vertical_scrollbar_mode = "auto"
|
||||
|
||||
[list_definition]
|
||||
[node]
|
||||
id = "team_header"
|
||||
unfolded = true
|
||||
|
||||
[row]
|
||||
[node_definition]
|
||||
|
||||
[column]
|
||||
horizontal_grow = "true"
|
||||
vertical_grow = "true"
|
||||
[row]
|
||||
|
||||
[toggle_panel]
|
||||
id = "panel"
|
||||
definition = "default"
|
||||
[column]
|
||||
grow_factor = 1
|
||||
border = "all"
|
||||
border_size = 10
|
||||
horizontal_grow = "true"
|
||||
|
||||
[label]
|
||||
id = "tree_view_node_label"
|
||||
definition = "default_large"
|
||||
use_markup = "true"
|
||||
[/label]
|
||||
|
||||
[/column]
|
||||
|
||||
[/row]
|
||||
|
||||
[/node_definition]
|
||||
|
||||
[/node]
|
||||
|
||||
[node]
|
||||
id = "side_panel"
|
||||
unfolded = true
|
||||
|
||||
[node_definition]
|
||||
|
||||
[row]
|
||||
|
||||
[column]
|
||||
grow_factor = 0
|
||||
border = "all"
|
||||
border_size = 20
|
||||
horizontal_alignment = "left"
|
||||
|
||||
[label]
|
||||
id = "side_number"
|
||||
definition = "default_huge"
|
||||
linked_group = "side_number"
|
||||
[/label]
|
||||
[/column]
|
||||
|
||||
[column]
|
||||
grow_factor = 1
|
||||
horizontal_grow = "true"
|
||||
|
||||
[grid]
|
||||
linked_group = "leader"
|
||||
|
||||
[row]
|
||||
|
||||
[column]
|
||||
grow_factor = 0
|
||||
horizontal_grow = "true"
|
||||
border = "all"
|
||||
border_size = 20
|
||||
horizontal_alignment = "left"
|
||||
border_size = 5
|
||||
|
||||
[label]
|
||||
id = "side_number"
|
||||
definition = "default_huge"
|
||||
linked_group = "side_number"
|
||||
[/label]
|
||||
[image]
|
||||
id = "leader_image"
|
||||
definition = "default"
|
||||
[/image]
|
||||
[/column]
|
||||
|
||||
[column]
|
||||
grow_factor = 1
|
||||
horizontal_grow = "true"
|
||||
vertical_grow = "true"
|
||||
|
||||
[grid]
|
||||
linked_group = "leader"
|
||||
|
||||
[row]
|
||||
grow_factor = 1
|
||||
|
||||
[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"
|
||||
|
||||
[label]
|
||||
id = "leader_type"
|
||||
definition = "default_large"
|
||||
use_markup = "true"
|
||||
[/label]
|
||||
|
||||
[/column]
|
||||
|
||||
[/row]
|
||||
|
||||
[row]
|
||||
grow_factor = 0
|
||||
|
||||
[column]
|
||||
horizontal_grow = "true"
|
||||
#vertical_grow = "true"
|
||||
|
||||
[grid]
|
||||
|
||||
[row]
|
||||
grow_factor = 1
|
||||
|
||||
[column]
|
||||
border = "all"
|
||||
grow_factor = 0
|
||||
border = "left,bottom"
|
||||
border_size = 5
|
||||
|
||||
[label]
|
||||
definition = "default_small"
|
||||
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_type"
|
||||
definition = "default_large"
|
||||
id = "leader_faction"
|
||||
definition = "default_small"
|
||||
use_markup = "true"
|
||||
[/label]
|
||||
|
||||
|
@ -88,78 +149,31 @@
|
|||
[/row]
|
||||
|
||||
[row]
|
||||
grow_factor = 0
|
||||
|
||||
[column]
|
||||
horizontal_grow = "true"
|
||||
#vertical_grow = "true"
|
||||
grow_factor = 0
|
||||
border = "left,bottom"
|
||||
border_size = 5
|
||||
|
||||
[grid]
|
||||
[label]
|
||||
definition = "default_small"
|
||||
label = _ "<b>Gender:</b>"
|
||||
use_markup = "true"
|
||||
[/label]
|
||||
|
||||
[row]
|
||||
[/column]
|
||||
|
||||
[column]
|
||||
grow_factor = 0
|
||||
border = "left,bottom"
|
||||
border_size = 5
|
||||
[column]
|
||||
grow_factor = 1
|
||||
border = "left,bottom,right"
|
||||
border_size = 5
|
||||
horizontal_alignment = "left"
|
||||
vertical_grow = "true"
|
||||
|
||||
[label]
|
||||
definition = "default_small"
|
||||
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_small"
|
||||
use_markup = "true"
|
||||
[/label]
|
||||
|
||||
[/column]
|
||||
|
||||
[/row]
|
||||
|
||||
[row]
|
||||
|
||||
[column]
|
||||
grow_factor = 0
|
||||
border = "left,bottom"
|
||||
border_size = 5
|
||||
|
||||
[label]
|
||||
definition = "default_small"
|
||||
label = _ "<b>Gender:</b>"
|
||||
use_markup = "true"
|
||||
[/label]
|
||||
|
||||
[/column]
|
||||
|
||||
[column]
|
||||
grow_factor = 1
|
||||
border = "left,bottom,right"
|
||||
border_size = 5
|
||||
horizontal_alignment = "left"
|
||||
vertical_grow = "true"
|
||||
|
||||
[image]
|
||||
id = "leader_gender"
|
||||
definition = "default_small"
|
||||
[/image]
|
||||
|
||||
[/column]
|
||||
|
||||
[/row]
|
||||
|
||||
[/grid]
|
||||
[image]
|
||||
id = "leader_gender"
|
||||
definition = "default_small"
|
||||
[/image]
|
||||
|
||||
[/column]
|
||||
|
||||
|
@ -175,127 +189,126 @@
|
|||
|
||||
[/column]
|
||||
|
||||
[/row]
|
||||
|
||||
[/grid]
|
||||
|
||||
[/column]
|
||||
|
||||
[column]
|
||||
grow_factor = 0
|
||||
border = "all"
|
||||
border_size = 5
|
||||
horizontal_grow = "true"
|
||||
|
||||
[image]
|
||||
id = "side_color"
|
||||
definition = "centered"
|
||||
linked_group = "color"
|
||||
[/image]
|
||||
[/column]
|
||||
|
||||
[column]
|
||||
grow_factor = 0
|
||||
horizontal_grow = "true"
|
||||
|
||||
[grid]
|
||||
linked_group = "gold_and_income"
|
||||
|
||||
[row]
|
||||
|
||||
[column]
|
||||
grow_factor = 0
|
||||
border = "all"
|
||||
border_size = 5
|
||||
horizontal_alignment = "left"
|
||||
|
||||
[image]
|
||||
id = "gold_icon"
|
||||
definition = "default"
|
||||
label = "themes/gold.png"
|
||||
tooltip = _ "Gold"
|
||||
[/image]
|
||||
[/column]
|
||||
|
||||
[column]
|
||||
grow_factor = 1
|
||||
border = "all"
|
||||
border_size = 5
|
||||
horizontal_grow = "true"
|
||||
|
||||
[label]
|
||||
id = "side_team"
|
||||
definition = "default"
|
||||
linked_group = "team"
|
||||
id = "side_gold"
|
||||
definition = "default_small"
|
||||
tooltip = _ "Gold"
|
||||
[/label]
|
||||
[/column]
|
||||
|
||||
[/row]
|
||||
|
||||
[row]
|
||||
|
||||
[column]
|
||||
grow_factor = 0
|
||||
border = "all"
|
||||
border = "bottom,left,right"
|
||||
border_size = 5
|
||||
horizontal_grow = "true"
|
||||
horizontal_alignment = "left"
|
||||
|
||||
[image]
|
||||
id = "side_color"
|
||||
definition = "centered"
|
||||
linked_group = "color"
|
||||
id = "income_icon"
|
||||
definition = "default"
|
||||
label = "themes/income.png"
|
||||
tooltip = _ "Income"
|
||||
[/image]
|
||||
[/column]
|
||||
|
||||
[column]
|
||||
grow_factor = 0
|
||||
grow_factor = 1
|
||||
border = "bottom,left,right"
|
||||
border_size = 5
|
||||
horizontal_grow = "true"
|
||||
|
||||
[grid]
|
||||
linked_group = "gold_and_income"
|
||||
|
||||
[row]
|
||||
|
||||
[column]
|
||||
grow_factor = 0
|
||||
border = "all"
|
||||
border_size = 5
|
||||
horizontal_alignment = "left"
|
||||
|
||||
[image]
|
||||
id = "gold_icon"
|
||||
definition = "default"
|
||||
label = "themes/gold.png"
|
||||
tooltip = _ "Gold"
|
||||
[/image]
|
||||
[/column]
|
||||
|
||||
[column]
|
||||
grow_factor = 1
|
||||
border = "all"
|
||||
border_size = 5
|
||||
horizontal_grow = "true"
|
||||
|
||||
[label]
|
||||
id = "side_gold"
|
||||
definition = "default_small"
|
||||
tooltip = _ "Gold"
|
||||
[/label]
|
||||
[/column]
|
||||
|
||||
[/row]
|
||||
|
||||
[row]
|
||||
|
||||
[column]
|
||||
grow_factor = 0
|
||||
border = "bottom,left,right"
|
||||
border_size = 5
|
||||
horizontal_alignment = "left"
|
||||
|
||||
[image]
|
||||
id = "income_icon"
|
||||
definition = "default"
|
||||
label = "themes/income.png"
|
||||
tooltip = _ "Income"
|
||||
[/image]
|
||||
[/column]
|
||||
|
||||
[column]
|
||||
grow_factor = 1
|
||||
border = "bottom,left,right"
|
||||
border_size = 5
|
||||
horizontal_grow = "true"
|
||||
|
||||
[label]
|
||||
id = "side_income"
|
||||
definition = "default_small"
|
||||
tooltip = _ "Income"
|
||||
[/label]
|
||||
[/column]
|
||||
|
||||
[/row]
|
||||
|
||||
[/grid]
|
||||
|
||||
[/column]
|
||||
|
||||
[column]
|
||||
grow_factor = 0
|
||||
|
||||
[spacer]
|
||||
width = 20
|
||||
[/spacer]
|
||||
|
||||
[label]
|
||||
id = "side_income"
|
||||
definition = "default_small"
|
||||
tooltip = _ "Income"
|
||||
[/label]
|
||||
[/column]
|
||||
|
||||
[/row]
|
||||
|
||||
[/grid]
|
||||
|
||||
[/toggle_panel]
|
||||
[/column]
|
||||
|
||||
[/column]
|
||||
[column]
|
||||
grow_factor = 0
|
||||
|
||||
[/row]
|
||||
[spacer]
|
||||
width = 20
|
||||
[/spacer]
|
||||
|
||||
[/list_definition]
|
||||
[/column]
|
||||
|
||||
[/listbox]
|
||||
[/row]
|
||||
|
||||
[/node_definition]
|
||||
|
||||
[/node]
|
||||
|
||||
[node]
|
||||
id = "side_spacer"
|
||||
unfolded = "true"
|
||||
|
||||
[node_definition]
|
||||
|
||||
{GUI_HORIZONTAL_SPACER_LINE}
|
||||
|
||||
[/node_definition]
|
||||
|
||||
[/node]
|
||||
|
||||
[/tree_view]
|
||||
#enddef
|
||||
|
||||
#define _GUI_CONTROL_AREA
|
||||
|
@ -310,52 +323,89 @@
|
|||
horizontal_grow = "true"
|
||||
vertical_grow = "true"
|
||||
|
||||
[listbox]
|
||||
id = "player_list"
|
||||
definition = "default"
|
||||
[panel]
|
||||
definition = "box_display_no_blur_no_border"
|
||||
|
||||
horizontal_scrollbar_mode = "never"
|
||||
|
||||
[list_definition]
|
||||
[grid]
|
||||
|
||||
[row]
|
||||
grow_factor = 0
|
||||
|
||||
[column]
|
||||
border = "all"
|
||||
border_size = 5
|
||||
horizontal_grow = "true"
|
||||
|
||||
[toggle_panel]
|
||||
id = "panel"
|
||||
[label]
|
||||
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]
|
||||
label = _ "Connected Players"
|
||||
[/label]
|
||||
|
||||
[/column]
|
||||
|
||||
[/row]
|
||||
|
||||
[/list_definition]
|
||||
[row]
|
||||
grow_factor = 1
|
||||
|
||||
[/listbox]
|
||||
[column]
|
||||
horizontal_grow = "true"
|
||||
vertical_grow = "true"
|
||||
|
||||
[listbox]
|
||||
id = "player_list"
|
||||
definition = "default"
|
||||
|
||||
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]
|
||||
|
||||
[/panel]
|
||||
|
||||
[/column]
|
||||
|
||||
|
@ -422,11 +472,6 @@
|
|||
fixed_width = "true"
|
||||
[/linked_group]
|
||||
|
||||
[linked_group]
|
||||
id = "team"
|
||||
fixed_width = "true"
|
||||
[/linked_group]
|
||||
|
||||
[linked_group]
|
||||
id = "color"
|
||||
fixed_width = "true"
|
||||
|
@ -487,14 +532,33 @@
|
|||
grow_factor = 1
|
||||
|
||||
[column]
|
||||
border = "all"
|
||||
border_size = 5
|
||||
horizontal_grow = "true"
|
||||
vertical_grow = "true"
|
||||
|
||||
{GUI_FORCE_WIDGET_MINIMUM_SIZE 0 "((screen_height * 55) / 100)" (
|
||||
border = "all"
|
||||
border_size = 5
|
||||
{_GUI_SIDE_LIST}
|
||||
)}
|
||||
[panel]
|
||||
definition = "box_display_no_blur_no_border"
|
||||
|
||||
[grid]
|
||||
|
||||
[row]
|
||||
|
||||
[column]
|
||||
horizontal_grow = "true"
|
||||
vertical_grow = "true"
|
||||
|
||||
{GUI_FORCE_WIDGET_MINIMUM_SIZE 0 "((screen_height * 55) / 100)" (
|
||||
{_GUI_SIDE_LIST}
|
||||
)}
|
||||
[/column]
|
||||
|
||||
[/row]
|
||||
|
||||
[/grid]
|
||||
|
||||
[/panel]
|
||||
|
||||
[/column]
|
||||
|
||||
[/row]
|
||||
|
|
|
@ -31,13 +31,15 @@
|
|||
#include "gui/widgets/chatbox.hpp"
|
||||
#include "gui/widgets/menu_button.hpp"
|
||||
#include "gui/widgets/image.hpp"
|
||||
#include "gui/widgets/label.hpp"
|
||||
#ifdef GUI2_EXPERIMENTAL_LISTBOX
|
||||
#include "gui/widgets/list.hpp"
|
||||
#else
|
||||
#include "gui/widgets/listbox.hpp"
|
||||
#endif
|
||||
#include "gui/widgets/settings.hpp"
|
||||
#include "gui/widgets/label.hpp"
|
||||
#include "gui/widgets/tree_view.hpp"
|
||||
#include "gui/widgets/tree_view_node.hpp"
|
||||
#include "mp_ui_alerts.hpp"
|
||||
#include "statistics.hpp"
|
||||
#include "units/types.hpp"
|
||||
|
@ -110,7 +112,6 @@ void tmp_join_game::post_build(twindow& window)
|
|||
|
||||
has_scenario_and_controllers = true;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if(level_["started"].to_bool()) {
|
||||
|
@ -307,17 +308,32 @@ void tmp_join_game::generate_side_list(twindow& window)
|
|||
return;
|
||||
}
|
||||
|
||||
tlistbox& list = find_widget<tlistbox>(&window, "side_list", false);
|
||||
ttree_view& tree = find_widget<ttree_view>(&window, "side_list", false);
|
||||
|
||||
window.keyboard_capture(&list);
|
||||
window.keyboard_capture(&tree);
|
||||
|
||||
list.clear();
|
||||
tree.clear();
|
||||
team_tree_map_.clear();
|
||||
|
||||
for(const auto& side : get_scenario().child_range("side")) {
|
||||
if(!side["allow_player"].to_bool(true)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// Check to see whether we've added a toplevel tree node for this team. If not, add one
|
||||
if(team_tree_map_.find(side["team_name"].str()) == team_tree_map_.end()) {
|
||||
std::map<std::string, string_map> data;
|
||||
string_map item;
|
||||
|
||||
item["label"] = (formatter() << _("Team:") << " " << side["user_team_name"]).str();
|
||||
data.emplace("tree_view_node_label", item);
|
||||
|
||||
ttree_view_node& team_node = tree.add_node("team_header", data);
|
||||
team_node.add_sibling("side_spacer", {});
|
||||
|
||||
team_tree_map_[side["team_name"].str()] = &team_node;
|
||||
}
|
||||
|
||||
std::map<std::string, string_map> data;
|
||||
string_map item;
|
||||
|
||||
|
@ -373,10 +389,6 @@ void tmp_join_game::generate_side_list(twindow& window)
|
|||
|
||||
item.clear();
|
||||
|
||||
// TODO: why this tstring stuff?
|
||||
item["label"] = t_string::from_serialized(side["user_team_name"].str());
|
||||
data.emplace("side_team", item);
|
||||
|
||||
// Don't show gold for saved games
|
||||
// TODO: gold icon
|
||||
if(side["allow_changes"].to_bool()) {
|
||||
|
@ -395,7 +407,9 @@ void tmp_join_game::generate_side_list(twindow& window)
|
|||
item["label"] = (formatter() << "buttons/misc/orb-active.png~RC(magenta>" << side["color"] << ")").str();
|
||||
data.emplace("side_color", item);
|
||||
|
||||
tgrid& row_grid = list.add_row(data);
|
||||
ttree_view_node& node = team_tree_map_[side["team_name"].str()]->add_child("side_panel", data);
|
||||
|
||||
tgrid& row_grid = node.get_grid();
|
||||
|
||||
if(income_amt == 0) {
|
||||
find_widget<timage>(&row_grid, "income_icon", false).set_visible(twidget::tvisible::invisible);
|
||||
|
@ -478,6 +492,11 @@ config& tmp_join_game::get_scenario()
|
|||
|
||||
void tmp_join_game::post_show(twindow& window)
|
||||
{
|
||||
if(update_timer_ != 0) {
|
||||
remove_timer(update_timer_);
|
||||
update_timer_ = 0;
|
||||
}
|
||||
|
||||
if(window.get_retval() == twindow::OK) {
|
||||
if(const config& stats = level_.child("statistics")) {
|
||||
statistics::fresh_stats();
|
||||
|
|
|
@ -28,12 +28,7 @@ class config;
|
|||
namespace gui2
|
||||
{
|
||||
|
||||
class ttoggle_button;
|
||||
class ttoggle_panel;
|
||||
class tslider;
|
||||
class tlabel;
|
||||
class tmenu_button;
|
||||
class twidget;
|
||||
class ttree_view_node;
|
||||
|
||||
class tmp_join_game : public tdialog, private plugin_executor
|
||||
{
|
||||
|
@ -60,8 +55,6 @@ private:
|
|||
|
||||
void update_player_list(twindow& window);
|
||||
|
||||
void update_leader_display(ng::side_engine& side, tgrid& row_grid);
|
||||
|
||||
void network_handler(twindow& window);
|
||||
|
||||
config& get_scenario();
|
||||
|
@ -80,6 +73,8 @@ private:
|
|||
const bool observe_game_;
|
||||
|
||||
bool stop_updates_;
|
||||
|
||||
std::map<std::string, ttree_view_node*> team_tree_map_;
|
||||
};
|
||||
|
||||
} // namespace gui2
|
||||
|
|
Loading…
Add table
Reference in a new issue