MP Lobby: removed manual player list sorting

It didn't make much sense to have these since there's really no situation you'd want
the "default" sorting order, which is however the server decided to send the list.

(cherry-picked from commit e754e64987)
This commit is contained in:
Charles Dang 2018-05-25 11:15:45 +11:00
parent 29632aeb75
commit 2873ad1c7e
7 changed files with 12 additions and 122 deletions

View file

@ -176,64 +176,6 @@
#enddef
#define _GUI_PLAYER_TREE_AREA
[row]
grow_factor = 0
[column]
border = "top"
border_size = 5
horizontal_alignment = "left"
vertical_grow = true
[grid]
[row]
[column]
grow_factor = 0
border = "all"
border_size = 5
[label]
definition = "default_small"
label = _ "Sort players:"
[/label]
[/column]
[column]
grow_factor = 0
border = "left,right"
border_size = 5
[toggle_button]
id = "player_list_sort_relation"
definition = "icon"
icon = "lobby/sort-friend-off.png"
tooltip = _ "Friends first, ignored people last"
[/toggle_button]
[/column]
[column]
grow_factor = 0
border = "left,right"
border_size = 5
[toggle_button]
id = "player_list_sort_name"
definition = "icon"
icon = "lobby/sort-az-off.png"
tooltip = _ "Alphabetically"
[/toggle_button]
[/column]
[/row]
[/grid]
[/column]
[/row]
[row]
grow_factor = 1

View file

@ -146,6 +146,11 @@ void user_info::update_relation()
}
}
bool user_info::operator<(const user_info& b) const
{
return relation < b.relation || (relation == b.relation && translation::icompare(name, b.name) < 0);
}
namespace
{
const std::string& spaced_em_dash()

View file

@ -122,7 +122,7 @@ struct user_info
SEL_GAME
};
bool operator>(const user_info& b) const;
bool operator<(const user_info& b) const;
std::string name;
int game_id;

View file

@ -44,7 +44,6 @@ lobby_info::lobby_info(const config& game_config, const std::vector<std::string>
, games_by_id_()
, games_()
, users_()
, users_sorted_()
, whispers_()
, game_filters_()
, game_filter_invert_(false)
@ -208,12 +207,7 @@ void lobby_info::process_userlist()
users_.emplace_back(c);
}
users_sorted_.reserve(users_.size());
users_sorted_.clear();
for(auto& u : users_) {
users_sorted_.push_back(&u);
}
std::stable_sort(users_.begin(), users_.end());
for(auto& ui : users_) {
if(ui.game_id == 0) {
@ -373,16 +367,4 @@ void lobby_info::update_user_statuses(int game_id, const room_info* room)
}
}
void lobby_info::sort_users(bool by_name, bool by_relation)
{
std::sort(users_sorted_.begin(), users_sorted_.end(), [&](const user_info* u1, const user_info* u2) {
if(by_name && by_relation) {
return u1->relation < u2->relation ||
(u1->relation == u2->relation && translation::icompare(u1->name, u2->name) < 0);
}
return (by_name && translation::icompare(u1->name, u2->name) < 0) || (by_relation && u1->relation < u2->relation);
});
}
} // end namespace mp

View file

@ -90,15 +90,6 @@ public:
/** Const overload of @ref get_game_by_id. */
const game_info* get_game_by_id(int id) const;
/**
* Sorts the user list by the given parameters.
*
* @param by_name Whether to sort users alphabetically by name.
* @param by_relation Whether to sort users by their relation to each other (ie,
* display friends before blocked users).
*/
void sort_users(bool by_name, bool by_relation);
/** Open a new chat room with the given name. */
void open_room(const std::string& name);
@ -144,9 +135,9 @@ public:
return users_;
}
const std::vector<user_info*>& users_sorted() const
std::vector<user_info>& users()
{
return users_sorted_;
return users_;
}
private:
@ -167,7 +158,6 @@ private:
std::vector<game_info*> games_;
std::vector<user_info> users_;
std::vector<user_info*> users_sorted_;
std::map<std::string, chat_session> whispers_;

View file

@ -110,18 +110,9 @@ void player_list::init(window& w)
#endif
other_games.init(w, _("Other Games"));
sort_by_name = find_widget<toggle_button>(&w, "player_list_sort_name", false, true);
sort_by_relation = find_widget<toggle_button>(&w, "player_list_sort_relation", false, true);
tree = find_widget<tree_view>(&w, "player_tree", false, true);
}
void player_list::update_sort_icons()
{
sort_by_name->set_icon_name(sort_by_name->get_value() ? "lobby/sort-az.png" : "lobby/sort-az-off.png");
sort_by_relation->set_icon_name(sort_by_relation->get_value() ? "lobby/sort-friend.png" : "lobby/sort-friend-off.png");
}
bool mp_lobby::logout_prompt()
{
return show_prompt(_("Do you really want to log out?"));
@ -564,8 +555,6 @@ void mp_lobby::update_playerlist()
SCOPE_LB;
DBG_LB << "Playerlist update: " << lobby_info_.users().size() << "\n";
lobby_info_.update_user_statuses(selected_game_id_, chatbox_->active_window_room());
lobby_info_.sort_users(player_list_.sort_by_name->get_value_bool(),
player_list_.sort_by_relation->get_value_bool());
#ifdef ENABLE_ROOM_MEMBER_TREE
bool lobby = false;
@ -592,8 +581,7 @@ void mp_lobby::update_playerlist()
player_list_.other_games.tree->clear();
player_list_.other_rooms.tree->clear();
for(auto userptr : lobby_info_.users_sorted()) {
mp::user_info& user = *userptr;
for(auto& user : lobby_info_.users()) {
sub_player_list* target_list(nullptr);
std::string name = user.name;
@ -680,7 +668,7 @@ void mp_lobby::update_playerlist()
tree_view_node& player = target_list->tree->add_child("player", tree_group_item);
connect_signal_mouse_left_double_click(find_widget<toggle_panel>(&player, "tree_view_node_label", false),
std::bind(&mp_lobby::user_dialog_callback, this, userptr));
std::bind(&mp_lobby::user_dialog_callback, this, &user));
}
player_list_.active_game.update_player_count_label();
@ -738,15 +726,6 @@ void mp_lobby::pre_show(window& window)
std::bind(&mp_lobby::gamelist_change_callback, this));
player_list_.init(window);
player_list_.sort_by_name->set_value(preferences::playerlist_sort_name());
player_list_.sort_by_relation->set_value(preferences::playerlist_sort_relation());
player_list_.update_sort_icons();
connect_signal_notify_modified(*player_list_.sort_by_name,
std::bind(&mp_lobby::player_filter_callback, this));
connect_signal_notify_modified(*player_list_.sort_by_relation,
std::bind(&mp_lobby::player_filter_callback, this));
window.set_enter_disabled(true);
@ -1119,11 +1098,6 @@ void mp_lobby::gamelist_change_callback()
void mp_lobby::player_filter_callback()
{
player_list_.update_sort_icons();
preferences::set_playerlist_sort_relation(player_list_.sort_by_relation->get_value_bool());
preferences::set_playerlist_sort_name(player_list_.sort_by_name->get_value_bool());
player_list_dirty_ = true;
// get_window()->invalidate_layout();
}

View file

@ -55,15 +55,12 @@ struct sub_player_list
struct player_list
{
void init(window& w);
void update_sort_icons();
sub_player_list active_game;
sub_player_list active_room;
sub_player_list other_rooms;
sub_player_list other_games;
toggle_button* sort_by_name;
toggle_button* sort_by_relation;
tree_view* tree;
};