package advancedsystemsmanager.flow.elements;
import advancedsystemsmanager.api.network.IPacketSync;
import advancedsystemsmanager.flow.FlowComponent;
import advancedsystemsmanager.flow.menus.MenuContainer;
import advancedsystemsmanager.client.gui.GuiManager;
import advancedsystemsmanager.network.ASMPacket;
import advancedsystemsmanager.reference.Null;
import advancedsystemsmanager.registry.ThemeHandler;
import advancedsystemsmanager.tileentities.manager.TileEntityManager;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.regex.Pattern;
public class ScrollVariable extends ScrollController<Variable> implements IPacketSync
{
public int variable = -1;
private FlowComponent command;
private int id;
public ScrollVariable(FlowComponent command, int x, int y, int rows, int width)
{
this(command);
this.x = x;
this.y = y;
this.visibleRows = rows;
}
public ScrollVariable(FlowComponent command)
{
this.command = command;
if (command != null)
command.registerSyncable(this);
textBox = new TextBoxLogic(Null.NULL_PACKET, Integer.MAX_VALUE, TEXT_BOX_SIZE_W - TEXT_BOX_TEXT_X * 2)
{
@Override
public void onUpdate()
{
updateSearch();
}
};
textBox.setTextAndCursor("");
updateSearch();
}
@Override
public void updateSearch()
{
if (hasSearchBox)
{
result = updateSearch(textBox.getText(), textBox.getText().isEmpty());
} else
{
result = updateSearch("", false);
}
updateScrolling();
}
public TileEntityManager getManager()
{
return command.getManager();
}
@Override
public List<Variable> updateSearch(String search, boolean all)
{
List<Variable> variables = new ArrayList<Variable>();
if (all)
{
variables.addAll(getManager().getVariables());
} else
{
Pattern pattern = Pattern.compile(search, Pattern.CASE_INSENSITIVE);
for (Variable variable : getManager().getVariables())
{
if (pattern.matcher(variable.getNameFromColor()).find()) variables.add(variable);
}
}
Collections.sort(variables);
return variables;
}
@Override
public void onClick(Variable variable, int mX, int mY, int button)
{
int newSelected = variable.colour;
setSelected(newSelected == this.variable ? -1 : newSelected);
sendUpdate();
}
@Override
public void draw(GuiManager gui, Variable variable, int x, int y, boolean hover)
{
gui.drawColouredTexture(x, y, MenuContainer.INVENTORY_SRC_X, MenuContainer.INVENTORY_SRC_Y, MenuContainer.INVENTORY_SIZE, MenuContainer.INVENTORY_SIZE, ThemeHandler.theme.menus.checkboxes.getColour(this.variable == variable.colour, hover));
variable.draw(gui, x, y);
}
@Override
public void drawMouseOver(GuiManager gui, Variable variable, int mX, int mY)
{
gui.drawMouseOver(variable.getDescription(gui), mX, mY);
}
public void setSelected(int val)
{
variable = val;
}
public void sendUpdate()
{
ASMPacket packet = command.getSyncPacket();
packet.writeByte(id);
packet.writeMedium(variable);
packet.sendServerPacket();
}
@Override
public void setId(int id)
{
this.id = id;
}
@Override
public boolean readData(ASMPacket packet)
{
setSelected(packet.readUnsignedMedium());
return false;
}
}