mirror of
https://github.com/GTNewHorizons/NotEnoughItems.git
synced 2026-11-15 09:44:44 +00:00
138 lines
3.1 KiB
Java
138 lines
3.1 KiB
Java
package codechicken.nei.config;
|
|
|
|
import static codechicken.lib.gui.GuiDraw.drawRect;
|
|
import static codechicken.lib.gui.GuiDraw.drawStringC;
|
|
|
|
import java.awt.Rectangle;
|
|
|
|
import org.lwjgl.input.Keyboard;
|
|
|
|
import codechicken.nei.NEIClientUtils;
|
|
import codechicken.nei.util.NEIKeyboardUtils;
|
|
|
|
public class OptionKeyBind extends OptionButton {
|
|
|
|
private boolean editing = false;
|
|
private boolean useHash = false;
|
|
private int keyboard = Keyboard.CHAR_NONE;
|
|
|
|
public OptionKeyBind(String name) {
|
|
this(name, false);
|
|
}
|
|
|
|
public OptionKeyBind(final String name, final boolean useHash) {
|
|
super("keys." + name);
|
|
this.useHash = useHash;
|
|
}
|
|
|
|
@Override
|
|
public void onMouseClicked(int mousex, int mousey, int button) {
|
|
if (editing) {
|
|
resetChanges();
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void keyTyped(char c, int keycode) {
|
|
|
|
if (!editing) {
|
|
return;
|
|
}
|
|
|
|
if (keycode == Keyboard.KEY_RETURN) {
|
|
applyChanges();
|
|
return;
|
|
}
|
|
|
|
keyboard = useHash ? NEIClientUtils.getKeyHash() : keycode;
|
|
|
|
if (keyboard != Keyboard.CHAR_NONE) {
|
|
applyChanges();
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public boolean onClick(int btn) {
|
|
|
|
if (editing) {
|
|
return true;
|
|
} else if (btn == 0) {
|
|
editing = true;
|
|
return true;
|
|
} else if (btn == 1) {
|
|
keyboard = Keyboard.CHAR_NONE;
|
|
applyChanges();
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
protected void applyChanges() {
|
|
setValue(keyboard);
|
|
resetChanges();
|
|
}
|
|
|
|
protected void resetChanges() {
|
|
editing = false;
|
|
keyboard = Keyboard.CHAR_NONE;
|
|
}
|
|
|
|
public boolean conflicted() {
|
|
final int keyboard = getValue();
|
|
|
|
if (keyboard <= 0) {
|
|
return false;
|
|
}
|
|
|
|
for (Option o : getSlot().options) {
|
|
if (o instanceof OptionKeyBind && o != this && ((OptionKeyBind) o).getValue() == keyboard) {
|
|
return true;
|
|
}
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
public void setValue(int keycode) {
|
|
getTag().setIntValue(keycode);
|
|
}
|
|
|
|
public int getValue() {
|
|
return renderTag().getIntValue();
|
|
}
|
|
|
|
@Override
|
|
public String getPrefix() {
|
|
return translateN(name);
|
|
}
|
|
|
|
@Override
|
|
public void drawButton(int mx, int my) {
|
|
|
|
if (editing) {
|
|
Rectangle b = buttonSize();
|
|
drawRect(b.x, b.y, b.width, b.height, -6250336);
|
|
drawRect(b.x + 1, b.y + 1, b.width - 2, b.height - 2, -16777216);
|
|
drawStringC(getButtonText(), b.x, b.y, b.width, b.height, getTextColour(mx, my));
|
|
} else {
|
|
super.drawButton(mx, my);
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public String getButtonText() {
|
|
|
|
if (editing) {
|
|
return NEIKeyboardUtils.getHashName(NEIClientUtils.getMetaHash());
|
|
}
|
|
|
|
return NEIKeyboardUtils.getKeyName(Math.max(getValue(), 0));
|
|
}
|
|
|
|
@Override
|
|
public int getTextColour(int mousex, int mousey) {
|
|
return !editing && conflicted() ? 0xFFFF6666 : -1;
|
|
}
|
|
}
|