improve client server guis
This commit is contained in:
parent
18f37874fa
commit
3d0cc9665a
4 changed files with 57 additions and 19 deletions
|
@ -2,12 +2,14 @@ package client.gui;
|
||||||
|
|
||||||
import java.security.KeyPair;
|
import java.security.KeyPair;
|
||||||
import java.security.PublicKey;
|
import java.security.PublicKey;
|
||||||
|
import java.util.Base64;
|
||||||
|
|
||||||
import client.gui.GuiConnect.ServerInfo;
|
import client.gui.GuiConnect.ServerInfo;
|
||||||
import client.gui.element.ActButton;
|
import client.gui.element.ActButton;
|
||||||
import client.gui.element.ButtonCallback;
|
import client.gui.element.ButtonCallback;
|
||||||
import client.gui.element.Label;
|
import client.gui.element.Label;
|
||||||
import client.gui.element.NavButton;
|
import client.gui.element.NavButton;
|
||||||
|
import client.gui.element.PasswordField;
|
||||||
import client.gui.element.PressType;
|
import client.gui.element.PressType;
|
||||||
import client.gui.element.Toggle;
|
import client.gui.element.Toggle;
|
||||||
import client.gui.element.FieldAction;
|
import client.gui.element.FieldAction;
|
||||||
|
@ -15,6 +17,7 @@ import client.gui.element.Field;
|
||||||
import client.gui.element.FieldCallback;
|
import client.gui.element.FieldCallback;
|
||||||
import client.vars.CVarCategory;
|
import client.vars.CVarCategory;
|
||||||
import client.vars.Variable;
|
import client.vars.Variable;
|
||||||
|
import client.window.Window;
|
||||||
import common.color.TextColor;
|
import common.color.TextColor;
|
||||||
import common.network.IPlayer;
|
import common.network.IPlayer;
|
||||||
import common.util.EncryptUtil;
|
import common.util.EncryptUtil;
|
||||||
|
@ -28,8 +31,8 @@ public class GuiServer extends Gui implements FieldCallback {
|
||||||
private Field addrBox;
|
private Field addrBox;
|
||||||
private Field portBox;
|
private Field portBox;
|
||||||
private Field userBox;
|
private Field userBox;
|
||||||
private Field passBox;
|
private PasswordField passBox;
|
||||||
private Field accBox;
|
private PasswordField accBox;
|
||||||
private Label nameLabel;
|
private Label nameLabel;
|
||||||
private Label addrLabel;
|
private Label addrLabel;
|
||||||
private Label portLabel;
|
private Label portLabel;
|
||||||
|
@ -42,6 +45,8 @@ public class GuiServer extends Gui implements FieldCallback {
|
||||||
private Toggle encToggle;
|
private Toggle encToggle;
|
||||||
private ActButton keyButton;
|
private ActButton keyButton;
|
||||||
private ActButton resetButton;
|
private ActButton resetButton;
|
||||||
|
private ActButton copyKeyButton;
|
||||||
|
private ActButton copyIdButton;
|
||||||
private KeyPair keypair;
|
private KeyPair keypair;
|
||||||
private String keyDigest;
|
private String keyDigest;
|
||||||
private PublicKey serverKey;
|
private PublicKey serverKey;
|
||||||
|
@ -72,8 +77,8 @@ public class GuiServer extends Gui implements FieldCallback {
|
||||||
int port = this.server == null ? this.lastPort : this.server.getPort();
|
int port = this.server == null ? this.lastPort : this.server.getPort();
|
||||||
this.portBox = this.add(new Field(404, 20, 76, 24, 5, this, port < 0 ? "" : "" + port));
|
this.portBox = this.add(new Field(404, 20, 76, 24, 5, this, port < 0 ? "" : "" + port));
|
||||||
this.userBox = this.add(new Field(0, 70, 220, 24, IPlayer.MAX_USER_LENGTH, this, IPlayer.VALID_USER, this.server == null ? this.lastUser : this.server.getUser()));
|
this.userBox = this.add(new Field(0, 70, 220, 24, IPlayer.MAX_USER_LENGTH, this, IPlayer.VALID_USER, this.server == null ? this.lastUser : this.server.getUser()));
|
||||||
this.passBox = this.add(new Field(0, this.server == null ? 120 : 170, 480, 24, IPlayer.MAX_PASS_LENGTH, this, this.server == null ? this.lastPass : this.server.getPassword()));
|
this.passBox = this.add(new PasswordField(0, this.server == null ? 120 : 170, 480, 24, IPlayer.MAX_PASS_LENGTH, this, this.server == null ? this.lastPass : this.server.getPassword()));
|
||||||
this.accBox = this.add(new Field(0, this.server == null ? 170 : 220, 480, 24, IPlayer.MAX_PASS_LENGTH, this, this.server == null ? this.lastAcc : this.server.getAccess()));
|
this.accBox = this.add(new PasswordField(0, this.server == null ? 170 : 220, 480, 24, IPlayer.MAX_PASS_LENGTH, this, this.server == null ? this.lastAcc : this.server.getAccess()));
|
||||||
this.add(new ActButton(0, this.server == null ? 220 : 350, 480, 24, new ButtonCallback() {
|
this.add(new ActButton(0, this.server == null ? 220 : 350, 480, 24, new ButtonCallback() {
|
||||||
public void use(ActButton elem, PressType action) {
|
public void use(ActButton elem, PressType action) {
|
||||||
GuiServer.this.connect();
|
GuiServer.this.connect();
|
||||||
|
@ -89,7 +94,7 @@ public class GuiServer extends Gui implements FieldCallback {
|
||||||
this.passLabel = this.add(new Label(0, this.server == null ? 100 : 150, 480, 20, (this.keypair == null ? "Anmelde" : "Ersatz") + "-Passwort (mind. 8 Zeichen)", true));
|
this.passLabel = this.add(new Label(0, this.server == null ? 100 : 150, 480, 20, (this.keypair == null ? "Anmelde" : "Ersatz") + "-Passwort (mind. 8 Zeichen)", true));
|
||||||
this.accLabel = this.add(new Label(0, this.server == null ? 150 : 200, 480, 20, "Server-Passwort (mind. 8 Zeichen)", true));
|
this.accLabel = this.add(new Label(0, this.server == null ? 150 : 200, 480, 20, "Server-Passwort (mind. 8 Zeichen)", true));
|
||||||
if(this.server != null) {
|
if(this.server != null) {
|
||||||
this.keyButton = this.add(new ActButton(0, 120, 480, 24, new ButtonCallback() {
|
this.keyButton = this.add(new ActButton(0, 120, 391, 24, new ButtonCallback() {
|
||||||
public void use(ActButton elem, PressType action) {
|
public void use(ActButton elem, PressType action) {
|
||||||
if(GuiServer.this.keypair == null) {
|
if(GuiServer.this.keypair == null) {
|
||||||
GuiServer.this.keypair = EncryptUtil.generateKeyPair();
|
GuiServer.this.keypair = EncryptUtil.generateKeyPair();
|
||||||
|
@ -97,6 +102,7 @@ public class GuiServer extends Gui implements FieldCallback {
|
||||||
GuiServer.this.keyLabel.setText("Anmelde-Pubkey: RSA-2048 " + GuiServer.this.keyDigest);
|
GuiServer.this.keyLabel.setText("Anmelde-Pubkey: RSA-2048 " + GuiServer.this.keyDigest);
|
||||||
GuiServer.this.keyButton.setText("Schlüsselpaar entfernen");
|
GuiServer.this.keyButton.setText("Schlüsselpaar entfernen");
|
||||||
GuiServer.this.passLabel.setText("Ersatz-Passwort (mind. 8 Zeichen)");
|
GuiServer.this.passLabel.setText("Ersatz-Passwort (mind. 8 Zeichen)");
|
||||||
|
GuiServer.this.copyKeyButton.enabled = true;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
final String name = GuiServer.this.nameBox.getText();
|
final String name = GuiServer.this.nameBox.getText();
|
||||||
|
@ -122,6 +128,8 @@ public class GuiServer extends Gui implements FieldCallback {
|
||||||
GuiServer.this.serverDigest = sdigest;
|
GuiServer.this.serverDigest = sdigest;
|
||||||
GuiServer.this.idLabel.setText("Server-Pubkey: " + (key != null ? "RSA-2048 " + GuiServer.this.serverDigest : "nicht vorhanden"));
|
GuiServer.this.idLabel.setText("Server-Pubkey: " + (key != null ? "RSA-2048 " + GuiServer.this.serverDigest : "nicht vorhanden"));
|
||||||
GuiServer.this.resetButton.enabled = key != null;
|
GuiServer.this.resetButton.enabled = key != null;
|
||||||
|
GuiServer.this.copyIdButton.enabled = key != null;
|
||||||
|
GuiServer.this.copyKeyButton.enabled = !confirmed;
|
||||||
if(confirmed) {
|
if(confirmed) {
|
||||||
GuiServer.this.keypair = null;
|
GuiServer.this.keypair = null;
|
||||||
GuiServer.this.keyDigest = null;
|
GuiServer.this.keyDigest = null;
|
||||||
|
@ -141,22 +149,37 @@ public class GuiServer extends Gui implements FieldCallback {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}, this.keypair == null ? "Neues Schlüsselpaar generieren" : "Schlüsselpaar entfernen"));
|
}, this.keypair == null ? "Neues Schlüsselpaar generieren" : "Schlüsselpaar entfernen"));
|
||||||
|
this.copyKeyButton = this.add(new ActButton(395, 120, 85, 24, new ButtonCallback() {
|
||||||
|
public void use(ActButton elem, PressType action) {
|
||||||
|
if(GuiServer.this.keypair != null)
|
||||||
|
Window.setClipboard(Base64.getEncoder().encodeToString(GuiServer.this.keypair.getPublic().getEncoded()));
|
||||||
|
}
|
||||||
|
}, "Kopieren"));
|
||||||
|
this.copyKeyButton.enabled = this.keypair != null;
|
||||||
this.keyLabel = this.add(new Label(0, 100, 480, 20, "Anmelde-Pubkey: " + (this.keypair != null ? "RSA-2048 " + this.keyDigest : "nicht vorhanden"), true));
|
this.keyLabel = this.add(new Label(0, 100, 480, 20, "Anmelde-Pubkey: " + (this.keypair != null ? "RSA-2048 " + this.keyDigest : "nicht vorhanden"), true));
|
||||||
this.encToggle = this.add(new Toggle(0, 250, 480, 24, false, this.server.requiresEncryption(), null, "Nur Verschlüsselte Verbindung akzeptieren"));
|
this.encToggle = this.add(new Toggle(0, 250, 480, 24, false, this.server.requiresEncryption(), null, "Nur Verschlüsselte Verbindung akzeptieren"));
|
||||||
this.serverKey = this.server.getServerKey();
|
this.serverKey = this.server.getServerKey();
|
||||||
this.serverDigest = this.serverKey == null ? null : EncryptUtil.getXorSha512Hash(this.serverKey.getEncoded());
|
this.serverDigest = this.serverKey == null ? null : EncryptUtil.getXorSha512Hash(this.serverKey.getEncoded());
|
||||||
this.idLabel = this.add(new Label(0, 280, 480, 20, "Server-Pubkey: " + (this.serverKey != null ? "RSA-2048 " + this.serverDigest : "nicht vorhanden"), true));
|
this.idLabel = this.add(new Label(0, 280, 480, 20, "Server-Pubkey: " + (this.serverKey != null ? "RSA-2048 " + this.serverDigest : "nicht vorhanden"), true));
|
||||||
this.resetButton = this.add(new ActButton(0, 300, 480, 24, new ButtonCallback() {
|
this.resetButton = this.add(new ActButton(0, 300, 391, 24, new ButtonCallback() {
|
||||||
public void use(ActButton elem, PressType action) {
|
public void use(ActButton elem, PressType action) {
|
||||||
if(GuiServer.this.serverKey != null) {
|
if(GuiServer.this.serverKey != null) {
|
||||||
GuiServer.this.serverKey = null;
|
GuiServer.this.serverKey = null;
|
||||||
GuiServer.this.serverDigest = null;
|
GuiServer.this.serverDigest = null;
|
||||||
GuiServer.this.idLabel.setText("Server-Pubkey: nicht vorhanden");
|
GuiServer.this.idLabel.setText("Server-Pubkey: nicht vorhanden");
|
||||||
GuiServer.this.resetButton.enabled = false;
|
GuiServer.this.resetButton.enabled = false;
|
||||||
|
GuiServer.this.copyIdButton.enabled = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}, "Server-Identifizierung / Pubkey zurücksetzen"));
|
}, "Server-Identifizierung / Pubkey zurücksetzen"));
|
||||||
this.resetButton.enabled = this.serverKey != null;
|
this.resetButton.enabled = this.serverKey != null;
|
||||||
|
this.copyIdButton = this.add(new ActButton(395, 300, 85, 24, new ButtonCallback() {
|
||||||
|
public void use(ActButton elem, PressType action) {
|
||||||
|
if(GuiServer.this.serverKey != null)
|
||||||
|
Window.setClipboard(Base64.getEncoder().encodeToString(GuiServer.this.serverKey.getEncoded()));
|
||||||
|
}
|
||||||
|
}, "Kopieren"));
|
||||||
|
this.copyIdButton.enabled = this.serverKey != null;
|
||||||
}
|
}
|
||||||
this.shift();
|
this.shift();
|
||||||
}
|
}
|
||||||
|
|
|
@ -34,7 +34,7 @@ public class Field extends Textbox {
|
||||||
public void updateText() {
|
public void updateText() {
|
||||||
this.textWidth = Drawing.txt_size(this.pos_x + this.margin_x1, this.pos_y + this.margin_y1,
|
this.textWidth = Drawing.txt_size(this.pos_x + this.margin_x1, this.pos_y + this.margin_y1,
|
||||||
this.pos_x + this.margin_x1, this.pos_y + this.margin_y1,
|
this.pos_x + this.margin_x1, this.pos_y + this.margin_y1,
|
||||||
Integer.MAX_VALUE, Integer.MAX_VALUE, this.text).xpos;
|
Integer.MAX_VALUE, Integer.MAX_VALUE, this.getDrawnText()).xpos;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void mouserel() {
|
public void mouserel() {
|
||||||
|
@ -95,7 +95,7 @@ public class Field extends Textbox {
|
||||||
|
|
||||||
protected void updateCursor(int offset, boolean shift, int x1, int y1, int x2, int y2) {
|
protected void updateCursor(int offset, boolean shift, int x1, int y1, int x2, int y2) {
|
||||||
Vec2i coord = Drawing.txt_coord(offset, x1 + this.text_x, y1 + this.text_y,
|
Vec2i coord = Drawing.txt_coord(offset, x1 + this.text_x, y1 + this.text_y,
|
||||||
x1 + this.text_x, y1 + this.text_y, 0x7fffffff, 0x7fffffff, this.text);
|
x1 + this.text_x, y1 + this.text_y, 0x7fffffff, 0x7fffffff, this.getDrawnText());
|
||||||
this.cursorPos = coord.xpos;
|
this.cursorPos = coord.xpos;
|
||||||
if(shift) {
|
if(shift) {
|
||||||
if(this.cursorPos < x1)
|
if(this.cursorPos < x1)
|
||||||
|
@ -108,7 +108,7 @@ public class Field extends Textbox {
|
||||||
|
|
||||||
protected int onCursorOffset(int x, int y, int x1, int y1, int x2, int y2) {
|
protected int onCursorOffset(int x, int y, int x1, int y1, int x2, int y2) {
|
||||||
Offset off = Drawing.txt_offset(x, y, x1 + this.text_x, y1 + this.text_y,
|
Offset off = Drawing.txt_offset(x, y, x1 + this.text_x, y1 + this.text_y,
|
||||||
x1 + this.text_x, y1 + this.text_y, 0x7fffffff, 0x7fffffff, this.text);
|
x1 + this.text_x, y1 + this.text_y, 0x7fffffff, 0x7fffffff, this.getDrawnText());
|
||||||
if(off != null) {
|
if(off != null) {
|
||||||
this.cursorPos = off.xpos;
|
this.cursorPos = off.xpos;
|
||||||
}
|
}
|
||||||
|
@ -130,17 +130,21 @@ public class Field extends Textbox {
|
||||||
protected void drawForeground(int x1, int y1, int x2, int y2) {
|
protected void drawForeground(int x1, int y1, int x2, int y2) {
|
||||||
Drawing.txt_draw(x1 + this.text_x, y1 + this.text_y,
|
Drawing.txt_draw(x1 + this.text_x, y1 + this.text_y,
|
||||||
x1 + this.text_x, y1 + this.text_y,
|
x1 + this.text_x, y1 + this.text_y,
|
||||||
Integer.MAX_VALUE, Integer.MAX_VALUE, this.enabled ? this.gm.style.text_field : Util.mulColor(this.gm.style.text_field, 0.5f), this.text);
|
Integer.MAX_VALUE, Integer.MAX_VALUE, this.enabled ? this.gm.style.text_field : Util.mulColor(this.gm.style.text_field, 0.5f), this.getDrawnText());
|
||||||
if(this.sel_start >= 0 && this.sel_end != this.sel_start)
|
if(this.sel_start >= 0 && this.sel_end != this.sel_start)
|
||||||
Drawing.txt_overlay(this.sel_start, this.sel_end, x1 + this.text_x, y1 + this.text_y,
|
Drawing.txt_overlay(this.sel_start, this.sel_end, x1 + this.text_x, y1 + this.text_y,
|
||||||
x1 + this.text_x, y1 + this.text_y,
|
x1 + this.text_x, y1 + this.text_y,
|
||||||
Integer.MAX_VALUE, Integer.MAX_VALUE, this.enabled ? 0x808080ff : 0x80404040, this.text);
|
Integer.MAX_VALUE, Integer.MAX_VALUE, this.enabled ? 0x808080ff : 0x80404040, this.getDrawnText());
|
||||||
}
|
}
|
||||||
|
|
||||||
protected char getNewline() {
|
protected char getNewline() {
|
||||||
return ' ';
|
return ' ';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected String getDrawnText() {
|
||||||
|
return this.text;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
package client.gui.element;
|
package client.gui.element;
|
||||||
|
|
||||||
import client.renderer.Drawing;
|
|
||||||
import common.util.Util;
|
import common.util.Util;
|
||||||
|
|
||||||
public class PasswordField extends Field {
|
public class PasswordField extends Field {
|
||||||
|
@ -8,13 +7,21 @@ public class PasswordField extends Field {
|
||||||
super(x, y, w, h, cap, callback, text);
|
super(x, y, w, h, cap, callback, text);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void drawForeground(int x1, int y1, int x2, int y2) {
|
// protected void drawForeground(int x1, int y1, int x2, int y2) {
|
||||||
Drawing.txt_draw(x1 + this.text_x, y1 + this.text_y,
|
// Drawing.txt_draw(x1 + this.text_x, y1 + this.text_y,
|
||||||
x1 + this.text_x, y1 + this.text_y,
|
// x1 + this.text_x, y1 + this.text_y,
|
||||||
Integer.MAX_VALUE, Integer.MAX_VALUE, this.enabled ? this.gm.style.text_field : Util.mulColor(this.gm.style.text_field, 0.5f), this.text.isEmpty() ? "" : "****");
|
// Integer.MAX_VALUE, Integer.MAX_VALUE, this.enabled ? this.gm.style.text_field : Util.mulColor(this.gm.style.text_field, 0.5f), this.text.isEmpty() ? "" : "****");
|
||||||
|
// }
|
||||||
|
|
||||||
|
// protected int getCursorX(int x1, int x2) {
|
||||||
|
// return x1;
|
||||||
|
// }
|
||||||
|
|
||||||
|
protected String getDrawnText() {
|
||||||
|
return Util.repeatString("*", this.text.length());
|
||||||
}
|
}
|
||||||
|
|
||||||
protected int getCursorX(int x1, int x2) {
|
protected boolean canCopy() {
|
||||||
return x1;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -51,6 +51,10 @@ abstract class Textbox extends Element {
|
||||||
return 4;
|
return 4;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected boolean canCopy() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
public void setText(String str) {
|
public void setText(String str) {
|
||||||
if(this.validator != null)
|
if(this.validator != null)
|
||||||
str = this.validator.filter(str);
|
str = this.validator.filter(str);
|
||||||
|
@ -91,7 +95,7 @@ abstract class Textbox extends Element {
|
||||||
this.sel_end = this.text.length();
|
this.sel_end = this.text.length();
|
||||||
}
|
}
|
||||||
else if(ctrl && (key == Keysym.C) || (this.editable && (key == Keysym.X))) {
|
else if(ctrl && (key == Keysym.C) || (this.editable && (key == Keysym.X))) {
|
||||||
if(this.sel_start >= 0 && this.sel_start != this.sel_end) { // fix empty
|
if(this.canCopy() && this.sel_start >= 0 && this.sel_start != this.sel_end) { // fix empty
|
||||||
String str = Util.strip(this.text, this.sel_start, this.sel_end - this.sel_start, '\n', (char)0, '?');
|
String str = Util.strip(this.text, this.sel_start, this.sel_end - this.sel_start, '\n', (char)0, '?');
|
||||||
Window.setClipboard(str);
|
Window.setClipboard(str);
|
||||||
if(key == Keysym.X)
|
if(key == Keysym.X)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue