Add search bar in playerlist (#1572)

* add "search" bar in playerlist

* remove log.info

* clear keyboard focus & text on toggle

* refactor sField -> field (fixes build??)

* refactor field -> sField (revert) should build now 👍

* remove drawEach boolean, simplify everything (please ignore previous commits)

* escape color codes

* use Strings.stripcolors & check for & without color codes
This commit is contained in:
fuzzbuck
2020-03-27 00:01:24 +01:00
committed by GitHub
parent 0b619851de
commit 643d054294
2 changed files with 24 additions and 7 deletions

View File

@ -142,6 +142,8 @@ research = Research
researched = [lightgray]{0} researched. researched = [lightgray]{0} researched.
players = {0} players players = {0} players
players.single = {0} player players.single = {0} player
players.search = search
players.notfound = [gray]no players found
server.closing = [accent]Closing server... server.closing = [accent]Closing server...
server.kicked.kick = You have been kicked from the server! server.kicked.kick = You have been kicked from the server!
server.kicked.whitelist = You are not whitelisted here. server.kicked.whitelist = You are not whitelisted here.

View File

@ -21,6 +21,7 @@ public class PlayerListFragment extends Fragment{
private boolean visible = false; private boolean visible = false;
private Table content = new Table().marginRight(13f).marginLeft(13f); private Table content = new Table().marginRight(13f).marginLeft(13f);
private Interval timer = new Interval(); private Interval timer = new Interval();
private TextField sField;
@Override @Override
public void build(Group parent){ public void build(Group parent){
@ -44,6 +45,12 @@ public class PlayerListFragment extends Fragment{
cont.table(Tex.buttonTrans, pane -> { cont.table(Tex.buttonTrans, pane -> {
pane.label(() -> Core.bundle.format(playerGroup.size() == 1 ? "players.single" : "players", playerGroup.size())); pane.label(() -> Core.bundle.format(playerGroup.size() == 1 ? "players.single" : "players", playerGroup.size()));
pane.row(); pane.row();
sField = pane.addField(null, text -> {
rebuild();
}).grow().pad(8).get();
sField.setMaxLength(maxNameLength);
sField.setMessageText(Core.bundle.format("players.search"));
pane.row();
pane.pane(content).grow().get().setScrollingDisabled(true, false); pane.pane(content).grow().get().setScrollingDisabled(true, false);
pane.row(); pane.row();
@ -71,6 +78,7 @@ public class PlayerListFragment extends Fragment{
NetConnection connection = user.con; NetConnection connection = user.con;
if(connection == null && net.server() && !user.isLocal) return; if(connection == null && net.server() && !user.isLocal) return;
if(sField.getText().length() > 0 && !user.name.toLowerCase().contains(sField.getText().toLowerCase()) && !Strings.stripColors(user.name.toLowerCase()).contains(sField.getText().toLowerCase())) return;
Table button = new Table(); Table button = new Table();
button.left(); button.left();
@ -105,9 +113,9 @@ public class PlayerListFragment extends Fragment{
t.defaults().size(bs); t.defaults().size(bs);
t.addImageButton(Icon.hammer, Styles.clearPartiali, t.addImageButton(Icon.hammer, Styles.clearPartiali,
() -> ui.showConfirm("$confirm", "$confirmban", () -> Call.onAdminRequest(user, AdminAction.ban))); () -> ui.showConfirm("$confirm", "$confirmban", () -> Call.onAdminRequest(user, AdminAction.ban)));
t.addImageButton(Icon.cancel, Styles.clearPartiali, t.addImageButton(Icon.cancel, Styles.clearPartiali,
() -> ui.showConfirm("$confirm", "$confirmkick", () -> Call.onAdminRequest(user, AdminAction.kick))); () -> ui.showConfirm("$confirm", "$confirmkick", () -> Call.onAdminRequest(user, AdminAction.kick)));
t.row(); t.row();
@ -122,10 +130,10 @@ public class PlayerListFragment extends Fragment{
ui.showConfirm("$confirm", "$confirmadmin", () -> netServer.admins.adminPlayer(id, user.usid)); ui.showConfirm("$confirm", "$confirmadmin", () -> netServer.admins.adminPlayer(id, user.usid));
} }
}) })
.update(b -> b.setChecked(user.isAdmin)) .update(b -> b.setChecked(user.isAdmin))
.disabled(b -> net.client()) .disabled(b -> net.client())
.touchable(() -> net.client() ? Touchable.disabled : Touchable.enabled) .touchable(() -> net.client() ? Touchable.disabled : Touchable.enabled)
.checked(user.isAdmin); .checked(user.isAdmin);
t.addImageButton(Icon.zoom, Styles.clearPartiali, () -> Call.onAdminRequest(user, AdminAction.trace)); t.addImageButton(Icon.zoom, Styles.clearPartiali, () -> Call.onAdminRequest(user, AdminAction.trace));
@ -134,7 +142,7 @@ public class PlayerListFragment extends Fragment{
button.add().growY(); button.add().growY();
button.addImageButton(Icon.hammer, Styles.clearPartiali, button.addImageButton(Icon.hammer, Styles.clearPartiali,
() -> ui.showConfirm("$confirm", "$confirmvotekick", () -> Call.sendChatMessage("/votekick " + user.name))).size(h); () -> ui.showConfirm("$confirm", "$confirmvotekick", () -> Call.sendChatMessage("/votekick " + user.name))).size(h);
} }
content.add(button).padBottom(-6).width(350f).maxHeight(h + 14); content.add(button).padBottom(-6).width(350f).maxHeight(h + 14);
@ -143,6 +151,10 @@ public class PlayerListFragment extends Fragment{
content.row(); content.row();
}); });
if(sField.getText().length() > 0 && !playerGroup.all().contains(user -> user.name.toLowerCase().contains(sField.getText().toLowerCase()))) {
content.add(Core.bundle.format("players.notfound")).padBottom(6).width(350f).maxHeight(h + 14);
}
content.marginBottom(5); content.marginBottom(5);
} }
@ -150,6 +162,9 @@ public class PlayerListFragment extends Fragment{
visible = !visible; visible = !visible;
if(visible){ if(visible){
rebuild(); rebuild();
}else{
Core.scene.setKeyboardFocus(null);
sField.clearText();
} }
} }