MP/Player List Helper: added method to get user_info of selected user

This commit is contained in:
Charles Dang 2022-08-21 11:31:21 -04:00
parent 75e0a4ac52
commit 72bfb7e391
2 changed files with 23 additions and 2 deletions

View File

@ -135,6 +135,8 @@ void lobby_player_list_helper::update(const std::vector<mp::user_info>& user_inf
}
}
info_map.clear();
for(std::size_t i = 0; i < player_lists.size(); ++i) {
assert(inputs[i].node_data.size() == inputs[i].user_data.size());
@ -142,9 +144,15 @@ void lobby_player_list_helper::update(const std::vector<mp::user_info>& user_inf
const auto new_nodes = player_lists[i].root->replace_children("player", inputs[i].node_data);
for(std::size_t k = 0; k < new_nodes.size(); ++k) {
auto* node = new_nodes[k].get();
auto* info = inputs[i].user_data[k];
// Note the user_info associated with this node
info_map.try_emplace(node, info);
connect_signal_mouse_left_double_click(
find_widget<toggle_panel>(new_nodes[k].get(), "tree_view_node_label", false),
std::bind(user_callback, inputs[i].user_data[k])
find_widget<toggle_panel>(node, "tree_view_node_label", false),
std::bind(user_callback, info)
);
}
@ -167,4 +175,10 @@ void lobby_player_list_helper::init(window& w)
sub_list{tree, _("Other Games"), false}
};
}
const mp::user_info* lobby_player_list_helper::get_selected_info() const
{
return info_map.at(tree->selected_item());
}
} // namespace gui2

View File

@ -17,6 +17,7 @@
#include <array>
#include <functional>
#include <map>
#include <string>
namespace mp
@ -61,12 +62,18 @@ private:
/** The double click callback bound to each player's tree node. */
std::function<void(const mp::user_info*)> user_callback;
/** Node-to-info mappings for easy access. */
std::map<const tree_view_node*, const mp::user_info*> info_map;
public:
lobby_player_list_helper(decltype(user_callback) ucb)
: player_lists()
, tree(nullptr)
, user_callback(ucb)
, info_map()
{
}
const mp::user_info* get_selected_info() const;
};
} // namespace gui2