package advancedsystemsmanager.flow.menus;
import advancedsystemsmanager.flow.FlowComponent;
import advancedsystemsmanager.flow.elements.RadioButton;
import advancedsystemsmanager.flow.elements.RadioButtonList;
import advancedsystemsmanager.flow.elements.TextBoxNumber;
import advancedsystemsmanager.flow.elements.TextBoxNumberList;
import advancedsystemsmanager.client.gui.GuiManager;
import advancedsystemsmanager.reference.Names;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.nbt.NBTTagCompound;
public class MenuRedstoneOutput extends Menu
{
public static final int RADIO_BUTTON_X = 5;
public static final int RADIO_BUTTON_Y = 22;
public static final int RADIO_SPACING_X = 68;
public static final int RADIO_SPACING_Y = 12;
public static final int TEXT_BOX_X = 80;
public static final int TEXT_BOX_Y = 5;
public static final int TEXT_X = 5;
public static final int TEXT_Y = 9;
public static final String NBT_NUMBER = "Strength";
public static final String NBT_TYPE = "OutputType";
public TextBoxNumberList textBoxes;
public TextBoxNumber textBox;
public RadioButtonList radioButtons;
public MenuRedstoneOutput(FlowComponent parent)
{
super(parent);
textBoxes = new TextBoxNumberList();
textBoxes.addTextBox(textBox = new TextBoxNumber(getParent(), TEXT_BOX_X, TEXT_BOX_Y, 2, true)
{
@Override
public int getMaxNumber()
{
return 15;
}
});
textBox.setNumber(15);
radioButtons = new RadioButtonList(getParent());
for (int i = 0; i < Settings.values().length; i++)
{
int ix = i % 2;
int iy = i / 2;
int x = RADIO_BUTTON_X + ix * RADIO_SPACING_X;
int y = RADIO_BUTTON_Y + iy * RADIO_SPACING_Y;
radioButtons.add(new RadioButton(x, y, Settings.values()[i].getName()));
}
}
public int getSelectedStrength()
{
return textBox.getNumber();
}
@Override
public String getName()
{
return Names.REDSTONE_OUTPUT_MENU;
}
@SideOnly(Side.CLIENT)
@Override
public void draw(GuiManager gui, int mX, int mY)
{
if (useStrengthSetting())
{
gui.drawString(Names.REDSTONE_STRENGTH, TEXT_X, TEXT_Y, 0.7F, 0x404040);
textBoxes.draw(gui, mX, mY);
} else
{
gui.drawString(Names.DIGITAL_TOGGLE, TEXT_X, TEXT_Y, 0.7F, 0x404040);
}
radioButtons.draw(gui, mX, mY);
}
@SideOnly(Side.CLIENT)
@Override
public void onClick(int mX, int mY, int button)
{
if (useStrengthSetting())
{
textBoxes.onClick(mX, mY, button);
}
radioButtons.onClick(mX, mY, button);
}
@SideOnly(Side.CLIENT)
@Override
public boolean onKeyStroke(GuiManager gui, char c, int k)
{
if (useStrengthSetting())
{
return textBoxes.onKeyStroke(gui, c, k);
} else
{
return super.onKeyStroke(gui, c, k);
}
}
@Override
public void copyFrom(Menu menu)
{
MenuRedstoneOutput menuOutput = (MenuRedstoneOutput)menu;
textBox.setNumber(menuOutput.textBox.getNumber());
radioButtons.setSelectedOption(menuOutput.radioButtons.getSelectedOption());
}
@Override
public void readFromNBT(NBTTagCompound nbtTagCompound, boolean pickup)
{
textBox.setNumber(nbtTagCompound.getByte(NBT_NUMBER));
radioButtons.setSelectedOption(nbtTagCompound.getByte(NBT_TYPE));
}
@Override
public void writeToNBT(NBTTagCompound nbtTagCompound, boolean pickup)
{
nbtTagCompound.setByte(NBT_NUMBER, (byte)textBox.getNumber());
nbtTagCompound.setByte(NBT_TYPE, (byte)radioButtons.getSelectedOption());
}
public boolean useStrengthSetting()
{
return getSelectedSetting() != Settings.TOGGLE;
}
public Settings getSelectedSetting()
{
return Settings.values()[radioButtons.getSelectedOption()];
}
public static enum Settings
{
FIXED(Names.FIXED),
TOGGLE(Names.TOGGLE),
MAX(Names.MAX),
MIN(Names.MIN),
INCREASE(Names.INCREASE),
DECREASE(Names.DECREASE),
FORWARD(Names.FORWARD),
BACKWARD(Names.BACKWARD);
public String name;
Settings(String name)
{
this.name = name;
}
public String getName()
{
return name;
}
@Override
public String toString()
{
return name;
}
}
}