package advancedsystemsmanager.flow.menus;
import advancedsystemsmanager.flow.FlowComponent;
import advancedsystemsmanager.flow.elements.CheckBox;
import advancedsystemsmanager.flow.elements.CheckBoxList;
import advancedsystemsmanager.flow.elements.RadioButtonList;
import advancedsystemsmanager.client.gui.GuiManager;
import advancedsystemsmanager.helpers.LocalizationHelper;
import advancedsystemsmanager.network.ASMPacket;
import advancedsystemsmanager.reference.Names;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraftforge.common.util.ForgeDirection;
import java.util.List;
public abstract class MenuRedstoneSides extends Menu
{
public static final int RADIO_BUTTON_X_LEFT = 5;
public static final int RADIO_BUTTON_X_RIGHT = 65;
public static final int RADIO_BUTTON_Y = 23;
public static final int CHECKBOX_X = 5;
public static final int CHECKBOX_Y = 35;
public static final int CHECKBOX_SPACING_X = 70;
public static final int CHECKBOX_SPACING_Y = 12;
public static final int MENU_WIDTH = 120;
public static final int TEXT_MARGIN_X = 5;
public static final int TEXT_Y = 5;
public static final String NBT_ACTIVE = "Selection";
public static final String NBT_ALL = "RequireAll";
public CheckBoxList checkBoxList;
public RadioButtonList radioButtonList;
public int selection;
public MenuRedstoneSides(FlowComponent parent)
{
super(parent);
selection = 0x3F; //All selected
checkBoxList = new CheckBoxList();
for (int i = 0; i < ForgeDirection.VALID_DIRECTIONS.length; i++)
{
checkBoxList.addCheckBox(new CheckBoxSide(i));
}
radioButtonList = new RadioButtonList(getParent());
radioButtonList.setSelectedOption(1);
initRadioButtons();
}
public abstract void initRadioButtons();
public void writeData(ASMPacket dw, boolean syncRequire)
{
dw.writeBoolean(syncRequire);
if (syncRequire)
{
dw.writeBoolean(useFirstOption());
} else
{
dw.writeByte(selection);
}
}
public boolean useFirstOption()
{
return radioButtonList.getSelectedOption() == 0;
}
@SideOnly(Side.CLIENT)
@Override
public void draw(GuiManager gui, int mX, int mY)
{
gui.drawSplitString(getMessage(), TEXT_MARGIN_X, TEXT_Y, MENU_WIDTH - TEXT_MARGIN_X, 0.7F, 0x404040);
checkBoxList.draw(gui, mX, mY);
radioButtonList.draw(gui, mX, mY);
}
public abstract String getMessage();
@SideOnly(Side.CLIENT)
@Override
public void drawMouseOver(GuiManager gui, int mX, int mY)
{
}
@Override
public void onClick(int mX, int mY, int button)
{
checkBoxList.onClick(mX, mY);
radioButtonList.onClick(mX, mY, button);
}
@Override
public void copyFrom(Menu menu)
{
MenuRedstoneSides menuRedstone = (MenuRedstoneSides)menu;
selection = menuRedstone.selection;
setFirstOption(menuRedstone.useFirstOption());
}
public void setFirstOption(boolean val)
{
radioButtonList.setSelectedOption(val ? 0 : 1);
}
@Override
public void readFromNBT(NBTTagCompound nbtTagCompound, boolean pickup)
{
selection = nbtTagCompound.getByte(NBT_ACTIVE);
setFirstOption(nbtTagCompound.getBoolean(NBT_ALL));
}
@Override
public void writeToNBT(NBTTagCompound nbtTagCompound, boolean pickup)
{
nbtTagCompound.setByte(NBT_ACTIVE, (byte)selection);
nbtTagCompound.setBoolean(NBT_ALL, useFirstOption());
}
@Override
public void addErrors(List<String> errors)
{
if (isVisible() && selection == 0)
{
errors.add(Names.NO_REDSTONE_SIDES_ERROR);
}
}
public boolean isSideRequired(int i)
{
return (selection & (1 << i)) != 0;
}
public class CheckBoxSide extends CheckBox
{
public int id;
public CheckBoxSide(int id)
{
super(getParent(), LocalizationHelper.getDirectionString(id), CHECKBOX_X + CHECKBOX_SPACING_X * (id % 2), CHECKBOX_Y + CHECKBOX_SPACING_Y * (id / 2));
this.id = id;
}
@Override
public void setValue(boolean val)
{
if (val)
{
selection |= 1 << id;
} else
{
selection &= ~(1 << id);
}
}
@Override
public boolean getValue()
{
return (selection & (1 << id)) != 0;
}
}
}