package codechicken.nei;
import net.minecraft.client.gui.GuiScreen;
import net.minecraft.util.ChatAllowedCharacters;
import org.lwjgl.input.Keyboard;
import static codechicken.lib.gui.GuiDraw.drawString;
import static codechicken.lib.gui.GuiDraw.getStringWidth;
import static codechicken.nei.NEIClientUtils.translate;
public abstract class SaveLoadButton extends Button
{
public SaveLoadButton(String s)
{
super(s);
}
@Override
public boolean handleClick(int mousex, int mousey, int button)
{
if(button == 1)
{
label = "";
onTextChange();
focused = true;
NEIClientUtils.playClickSound();
return true;
}
return super.handleClick(mousex, mousey, button);
}
public abstract void onTextChange();
@Override
public void onGuiClick(int i, int j)
{
if(!contains(i, j))
focused = false;
}
@Override
public boolean handleKeyPress(int keyID, char keyChar)
{
if(!focused)
return false;
if(keyID == Keyboard.KEY_BACK)
{
if(label.length() > 0)
{
label = label.substring(0, label.length() - 1);
onTextChange();
backdowntime = System.currentTimeMillis();
}
}
else if(keyID == Keyboard.KEY_RETURN)
{
focused = false;
}
else if(keyChar == 22)//paste
{
String pastestring = GuiScreen.getClipboardString();
if(pastestring == null)
pastestring = "";
label = label + pastestring;
onTextChange();
}
else if(ChatAllowedCharacters.isAllowedCharacter(keyChar))
{
label = label + keyChar;
onTextChange();
}
return true;
}
@Override
public void update()
{
cursorCounter++;
if(backdowntime > 0)
{
if(Keyboard.isKeyDown(Keyboard.KEY_BACK) && label.length() > 5)
{
if(System.currentTimeMillis() - backdowntime > 200 / (1+backs * 0.3F))
{
label = label.substring(0, label.length() - 1);
onTextChange();
backdowntime = System.currentTimeMillis();
backs++;
}
}
else
{
backdowntime = 0;
backs = 0;
}
}
}
@Override
public void draw(int mousex, int mousey)
{
super.draw(mousex, mousey);
if(focused && (cursorCounter / 6) % 2 == 0)
drawString("_", x + (w + getStringWidth(getRenderLabel())) / 2, y + (h - 8) / 2, 0xFFFFFFFF);
}
@Override
public String getRenderLabel()
{
return translate(saved ? "load" : "save") + " " + label;
}
public boolean saved;
public long backdowntime;
public int backs;
public int cursorCounter;
public boolean focused;
}