27 #define ERR_LB LOG_STREAM(err, log_lobby)
34 tree_group_item[
"tree_view_node_label"][
"label"] = lbl;
36 root = &parent_tree->
add_node(
"player_group", tree_group_item);
48 label_player_count->set_label(std::to_string(root->count_children()));
66 std::array<update_pod, std::tuple_size<decltype(
player_lists)>::value> inputs{};
68 for(
const auto& user : user_info) {
69 std::string name = user.name;
71 std::stringstream icon_ss;
72 icon_ss <<
"lobby/status";
74 switch(user.get_state(focused_game)) {
80 icon_ss << (user.observing ?
"-obs" :
"-playing");
84 icon_ss << (user.observing ?
"-obs" :
"-playing");
88 switch(user.get_relation()) {
109 tree_group_field[
"label"] = icon_ss.str();
110 tree_group_item[
"icon"] = tree_group_field;
112 tree_group_field[
"label"] = name;
113 tree_group_field[
"use_markup"] =
"true";
114 tree_group_item[
"name"] = tree_group_field;
117 switch(user.get_state(focused_game)) {
119 inputs[0].node_data.push_back(std::move(tree_group_item));
120 inputs[0].user_data.push_back(&user);
124 inputs[1].node_data.push_back(std::move(tree_group_item));
125 inputs[1].user_data.push_back(&user);
129 inputs[2].node_data.push_back(std::move(tree_group_item));
130 inputs[2].user_data.push_back(&user);
139 assert(inputs[
i].
node_data.size() == inputs[
i].user_data.size());
144 for(std::size_t k = 0; k < new_nodes.size(); ++k) {
145 auto* node = new_nodes[k].get();
146 auto*
info = inputs[
i].user_data[k];
152 node->find_widget<
toggle_panel>(
"tree_view_node_label"),
std::map< const tree_view_node *, const mp::user_info * > info_map
Node-to-info mappings for easy access.
const mp::user_info * get_selected_info() const
std::array< sub_list, 3 > player_lists
Main subsections of the player tree.
void update(const std::vector< mp::user_info > &user_info, int focused_game)
Updates the tree contents based on the given user data.
tree_view * tree
The parent tree.
std::function< void(const mp::user_info *)> user_callback
The double click callback bound to each player's tree node.
void unfold(const bool recursive=false)
tree_view_node & add_node(const std::string &id, const widget_data &data, const int index=-1)
tree_view_node * selected_item()
base class of top level items, the only item which needs to store the final canvases to draw on.
static std::string _(const char *str)
static lg::log_domain log_lobby("lobby")
std::vector< widget_data > node_data
The raw data used to mass-construct player tree nodes.
std::vector< const mp::user_info * > user_data
The associated user data for each node, index-to-index.
void connect_signal_mouse_left_double_click(dispatcher &dispatcher, const signal &signal)
Connects a signal handler for a left mouse button double click.
std::map< std::string, widget_item > widget_data
std::map< std::string, t_string > widget_item
std::string span_color(const color_t &color, Args &&... data)
The basic class for representing 8-bit RGB or RGBA colour values.
label * label_player_count
void update_player_count_label()
This class represents the information a client has about another player.