Merge remote-tracking branch 'origin/master'

This commit is contained in:
Anuken
2023-06-23 22:51:58 -04:00
4 changed files with 52 additions and 24 deletions

View File

@@ -5,10 +5,16 @@ import arc.*;
public class ServerGroup{
public String name;
public String[] addresses;
public boolean prioritized = false;
public ServerGroup(String name, String[] addresses){
public ServerGroup(String name, String[] addresses, boolean prioritized){
this.name = name;
this.addresses = addresses;
this.prioritized = prioritized;
}
public ServerGroup(String name, String[] addresses){
this(name, addresses, false);
}
public ServerGroup(){

View File

@@ -417,6 +417,9 @@ public class JoinDialog extends BaseDialog{
Table[] groupTable = {null, null};
if(group.prioritized){
addHeader(groupTable, group, hidden, false);
}
//table containing all groups
for(String address : group.addresses){
String resaddress = address.contains(":") ? address.split(":")[0] : address;
@@ -430,29 +433,10 @@ public class JoinDialog extends BaseDialog{
|| res.mapname.toLowerCase().contains(serverSearch)
|| (res.modeName != null && res.modeName.toLowerCase().contains(serverSearch)))) return;
//add header
if(groupTable[0] == null){
global.table(t -> groupTable[0] = t).fillX().left().row();
groupTable[0].table(head -> {
if(!group.name.isEmpty()){
head.add(group.name).color(Color.lightGray).padRight(4);
}
head.image().height(3f).growX().color(Color.lightGray);
//button for showing/hiding servers
ImageButton[] image = {null};
image[0] = head.button(hidden ? Icon.eyeOffSmall : Icon.eyeSmall, Styles.grayi, () -> {
group.setHidden(!group.hidden());
image[0].getStyle().imageUp = group.hidden() ? Icon.eyeOffSmall : Icon.eyeSmall;
if(group.hidden() && !showHidden){
groupTable[0].remove();
}
}).size(40f).get();
image[0].addListener(new Tooltip(t -> t.background(Styles.black6).margin(4).label(() -> !group.hidden() ? "@server.shown" : "@server.hidden")));
}).width(targetWidth() * columns()).padBottom(-2).row();
groupTable[1] = groupTable[0].row().table().top().left().grow().get();
addHeader(groupTable, group, hidden, true);
}else if(!groupTable[0].visible){
addHeader(groupTable, group, hidden, true);
}
addCommunityHost(res, groupTable[1]);
@@ -464,6 +448,37 @@ public class JoinDialog extends BaseDialog{
}
}
void addHeader(Table[] groupTable, ServerGroup group, boolean hidden, boolean doInit){ // outlined separately
if(groupTable[0] == null){
global.table(t -> groupTable[0] = t).fillX().left().row();
}
groupTable[0].visible(() -> doInit);
if(!doInit){
return;
}
groupTable[0].table(head -> {
Color col = group.prioritized ? Pal.accent : Color.lightGray;
if(!group.name.isEmpty()){
head.add(group.name).color(col).padRight(4);
}
head.image().height(3f).growX().color(col);
//button for showing/hiding servers
ImageButton[] image = {null};
image[0] = head.button(hidden ? Icon.eyeOffSmall : Icon.eyeSmall, Styles.grayi, () -> {
group.setHidden(!group.hidden());
image[0].getStyle().imageUp = group.hidden() ? Icon.eyeOffSmall : Icon.eyeSmall;
if(group.hidden() && !showHidden){
groupTable[0].remove();
}
}).size(40f).get();
image[0].addListener(new Tooltip(t -> t.background(Styles.black6).margin(4).label(() -> !group.hidden() ? "@server.shown" : "@server.hidden")));
}).width(targetWidth() * columns()).padBottom(-2).row();
groupTable[1] = groupTable[0].row().table().top().left().grow().get();
}
int columns(){
return Mathf.clamp((int)((Core.graphics.getWidth() / Scl.scl() * 0.9f) / targetWidth()), 1, 4);
}
@@ -604,13 +619,14 @@ public class JoinDialog extends BaseDialog{
Seq<ServerGroup> servers = new Seq<>();
val.asArray().each(child -> {
String name = child.getString("name", "");
boolean prioritized = child.getBool("prioritized", false);
String[] addresses;
if(child.has("addresses") || (child.has("address") && child.get("address").isArray())){
addresses = (child.has("addresses") ? child.get("addresses") : child.get("address")).asArray().map(Jval::asString).toArray(String.class);
}else{
addresses = new String[]{child.getString("address", "<invalid>")};
}
servers.add(new ServerGroup(name, addresses));
servers.add(new ServerGroup(name, addresses, prioritized));
});
//modify default servers on main thread
Core.app.post(() -> {