package advancedsystemsmanager.flow.menus; import advancedsystemsmanager.flow.FlowComponent; import advancedsystemsmanager.flow.elements.RadioButton; import advancedsystemsmanager.flow.elements.RadioButtonList; import advancedsystemsmanager.flow.elements.ScrollVariable; import advancedsystemsmanager.flow.elements.Variable; import advancedsystemsmanager.client.gui.GuiManager; import advancedsystemsmanager.reference.Names; import advancedsystemsmanager.registry.ConnectionSet; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.nbt.NBTTagCompound; import java.util.List; public class MenuVariable extends Menu { public static final int RADIO_BUTTON_X = 5; public static final int RADIO_BUTTON_Y = 40; public static final int RADIO_BUTTON_SPACING = 12; public static final String NBT_VARIABLE = "Variable"; public static final String NBT_MODE = "Mode"; public static final String NBT_EXECUTED = "Executed"; public RadioButtonList radioButtons; public ScrollVariable variables; public boolean executed; public MenuVariable(final FlowComponent parent) { super(parent); radioButtons = new RadioButtonList(getParent()); for (VariableMode mode : VariableMode.values()) { int y = 52; int x = RADIO_BUTTON_X + mode.ordinal() * 34; radioButtons.add(new RadioButton(x, y, mode.toString()) { @Override public boolean isVisible() { return !isDeclaration(); } }); } variables = new ScrollVariable(parent) { @Override public void setSelected(int val) { boolean declaration = isDeclaration(); if (declaration) { getParent().getManager().removeVariableDeclaration(variables.variable, getParent()); variable = val; getParent().getManager().updateDeclaration(getParent(), variables.variable); } else { variable = val; } } @Override public int getVisibleRows() { return isDeclaration() ? super.getVisibleRows() : 1; } }; variables.variable = -1; } public boolean isDeclaration() { return getParent().getConnectionSet() == ConnectionSet.EMPTY; } public VariableMode getVariableMode() { return VariableMode.values()[radioButtons.getSelectedOption()]; } @Override public String getName() { return Names.VARIABLE_MENU; } @SideOnly(Side.CLIENT) @Override public void draw(GuiManager gui, int mX, int mY) { radioButtons.draw(gui, mX, mY); variables.draw(gui, mX, mY); } @SideOnly(Side.CLIENT) @Override public void drawMouseOver(GuiManager gui, int mX, int mY) { variables.drawMouseOver(gui, mX, mY); } @Override public void onClick(int mX, int mY, int button) { radioButtons.onClick(mX, mY, button); variables.onClick(mX, mY, button); } @Override public void onRelease(int mX, int mY, int button, boolean isMenuOpen) { variables.onRelease(mX, mY); } @SideOnly(Side.CLIENT) @Override public boolean onKeyStroke(GuiManager gui, char c, int k) { return variables.onKeyStroke(gui, c, k); } @Override public void copyFrom(Menu menu) { variables.setSelected(((MenuVariable)menu).getSelectedVariable()); radioButtons.setSelectedOption(((MenuVariable)menu).radioButtons.getSelectedOption()); executed = ((MenuVariable)menu).executed; } public int getSelectedVariable() { return variables.variable; } @Override public void readFromNBT(NBTTagCompound nbtTagCompound, boolean pickup) { variables.setSelected(nbtTagCompound.getInteger(NBT_VARIABLE)); radioButtons.setSelectedOption(nbtTagCompound.getByte(NBT_MODE)); executed = nbtTagCompound.getBoolean(NBT_EXECUTED); } @Override public void writeToNBT(NBTTagCompound nbtTagCompound, boolean pickup) { nbtTagCompound.setInteger(NBT_VARIABLE, variables.variable); nbtTagCompound.setByte(NBT_MODE, (byte)radioButtons.getSelectedOption()); nbtTagCompound.setBoolean(NBT_EXECUTED, executed); } @Override public void addErrors(List<String> errors) { Variable variable = getVariable(); if (variable == null || !variable.isValid()) { errors.add(Names.NOT_DECLARED_ERROR); } else if (isDeclaration() && variable.getDeclaration().getId() != getParent().getId()) { errors.add(Names.ALREADY_DECLARED_ERROR); } } @Override public void update(float partial) { variables.update(partial); } @Override public void doScroll(int scroll) { variables.doScroll(scroll); } public Variable getVariable() { return getParent().getManager().getVariable(getSelectedVariable()); } public enum VariableMode { ADD(Names.ADD), SET(Names.SET), REMOVE(Names.REMOVE); public String name; VariableMode(String name) { this.name = name; } @Override public String toString() { return name; } } }