package advancedsystemsmanager.flow.menus;
import advancedsystemsmanager.flow.FlowComponent;
import advancedsystemsmanager.flow.elements.CheckBox;
import advancedsystemsmanager.flow.elements.CheckBoxList;
import advancedsystemsmanager.flow.elements.RadioButton;
import advancedsystemsmanager.flow.elements.RadioButtonList;
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;
public class MenuSplit extends Menu
{
public static final int RADIO_X = 5;
public static final int RADIO_Y = 5;
public static final int CHECK_BOX_X = 15;
public static final int SPACING_Y = 15;
public static final String NBT_SPLIT = "Split";
public static final String NBT_FAIR = "Fair";
public static final String NBT_EMPTY = "Empty";
public RadioButtonList radioButtons;
public CheckBoxList checkBoxes;
public boolean useFair;
public boolean useEmpty;
public MenuSplit(FlowComponent parent)
{
super(parent);
radioButtons = new RadioButtonList(getParent());
radioButtons.add(new RadioButton(RADIO_X, RADIO_Y, Names.SEQUENTIAL));
radioButtons.add(new RadioButton(RADIO_X, RADIO_Y + SPACING_Y, Names.SPLIT));
checkBoxes = new CheckBoxList();
checkBoxes.addCheckBox(new CheckBox(getParent(), Names.FAIR_SPLIT, CHECK_BOX_X, RADIO_Y + 2 * SPACING_Y)
{
@Override
public void setValue(boolean val)
{
setFair(val);
}
@Override
public boolean getValue()
{
return useFair();
}
});
checkBoxes.addCheckBox(new CheckBox(getParent(), Names.EMPTY_PINS, CHECK_BOX_X, RADIO_Y + 3 * SPACING_Y)
{
@Override
public void setValue(boolean val)
{
setEmpty(val);
}
@Override
public boolean getValue()
{
return useEmpty();
}
});
}
public void setFair(boolean val)
{
useFair = val;
}
public boolean useFair()
{
return useFair;
}
public void setEmpty(boolean val)
{
useEmpty = val;
}
public boolean useEmpty()
{
return useEmpty;
}
@Override
public String getName()
{
return Names.SPLIT_MENU;
}
@SideOnly(Side.CLIENT)
@Override
public void draw(GuiManager gui, int mX, int mY)
{
if (useSplit())
{
checkBoxes.draw(gui, mX, mY);
}
radioButtons.draw(gui, mX, mY);
}
public boolean useSplit()
{
return radioButtons.getSelectedOption() == 1;
}
@SideOnly(Side.CLIENT)
@Override
public void drawMouseOver(GuiManager gui, int mX, int mY)
{
}
@Override
public void onClick(int mX, int mY, int button)
{
if (useSplit())
{
checkBoxes.onClick(mX, mY);
}
radioButtons.onClick(mX, mY, button);
}
@Override
public void copyFrom(Menu menu)
{
MenuSplit menuSplit = (MenuSplit)menu;
setSplit(menuSplit.useSplit());
setFair(menuSplit.useFair());
setEmpty(menuSplit.useEmpty());
}
@Override
public void readFromNBT(NBTTagCompound nbtTagCompound, boolean pickup)
{
setSplit(nbtTagCompound.getBoolean(NBT_SPLIT));
if (useSplit())
{
setFair(nbtTagCompound.getBoolean(NBT_FAIR));
setEmpty(nbtTagCompound.getBoolean(NBT_EMPTY));
}
}
@Override
public void writeToNBT(NBTTagCompound nbtTagCompound, boolean pickup)
{
nbtTagCompound.setBoolean(NBT_SPLIT, useSplit());
if (useSplit())
{
nbtTagCompound.setBoolean(NBT_FAIR, useFair());
nbtTagCompound.setBoolean(NBT_EMPTY, useEmpty());
}
}
@Override
public boolean isVisible()
{
return isSplitConnection(getParent());
}
public static boolean isSplitConnection(FlowComponent component)
{
return component.getConnectionSet() == ConnectionSet.MULTIPLE_OUTPUT_2 || component.getConnectionSet() == ConnectionSet.MULTIPLE_OUTPUT_5;
}
public void setSplit(boolean val)
{
radioButtons.setSelectedOption(val ? 1 : 0);
}
}