001package net.minecraftforge.client;
002
003import org.lwjgl.input.Mouse;
004import org.lwjgl.opengl.GL11;
005
006import net.minecraft.client.Minecraft;
007import net.minecraft.client.settings.GameSettings;
008import net.minecraft.client.gui.GuiControls;
009import net.minecraft.client.gui.GuiSlot;
010import net.minecraft.client.settings.KeyBinding;
011import net.minecraft.client.renderer.Tessellator;
012import net.minecraft.util.EnumChatFormatting;
013
014public class GuiControlsScrollPanel extends GuiSlot
015{
016    private GuiControls controls;
017    private GameSettings options;
018    private Minecraft mc;
019    private String[] message;
020    private int _mouseX;
021    private int _mouseY;
022    private int selected = -1;
023
024    public GuiControlsScrollPanel(GuiControls controls, GameSettings options, Minecraft mc)
025    {
026        super(mc, controls.width, controls.height, 16, (controls.height - 32) + 4, 25);
027        this.controls = controls;
028        this.options = options;
029        this.mc = mc;
030    }
031
032    @Override
033    protected int getSize()
034    {
035        return options.keyBindings.length;
036    }
037
038    @Override
039    protected void elementClicked(int i, boolean flag)
040    {
041        if (!flag)
042        {
043            if (selected == -1)
044            {
045                selected = i;
046            }
047            else
048            {
049                options.setKeyBinding(selected, -100);
050                selected = -1;
051                KeyBinding.resetKeyBindingArrayAndHash();
052            }
053        }
054    }
055
056    @Override
057    protected boolean isSelected(int i)
058    {
059        return false;
060    }
061
062    @Override
063    protected void drawBackground() {}
064
065    @Override
066    public void drawScreen(int mX, int mY, float f)
067    {
068        _mouseX = mX;
069        _mouseY = mY;
070
071        if (selected != -1 && !Mouse.isButtonDown(0) && Mouse.getDWheel() == 0)
072        {
073            if (Mouse.next() && Mouse.getEventButtonState())
074            {
075                System.out.println(Mouse.getEventButton());
076                options.setKeyBinding(selected, -100 + Mouse.getEventButton());
077                selected = -1;
078                KeyBinding.resetKeyBindingArrayAndHash();
079            }
080        }
081
082        super.drawScreen(mX, mY, f);
083    }
084
085    @Override
086    protected void drawSlot(int index, int xPosition, int yPosition, int l, Tessellator tessellator)
087    {
088        int width = 70;
089        int height = 20;
090        xPosition -= 20;
091        boolean flag = _mouseX >= xPosition && _mouseY >= yPosition && _mouseX < xPosition + width && _mouseY < yPosition + height;
092        int k = (flag ? 2 : 1);
093
094        mc.renderEngine.bindTexture("/gui/gui.png");
095        GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
096        controls.drawTexturedModalRect(xPosition, yPosition, 0, 46 + k * 20, width / 2, height);
097        controls.drawTexturedModalRect(xPosition + width / 2, yPosition, 200 - width / 2, 46 + k * 20, width / 2, height);
098        controls.drawString(mc.fontRenderer, options.getKeyBindingDescription(index), xPosition + width + 4, yPosition + 6, 0xFFFFFFFF);
099
100        boolean conflict = false;
101        for (int x = 0; x < options.keyBindings.length; x++)
102        {
103            if (x != index && options.keyBindings[x].keyCode == options.keyBindings[index].keyCode)
104            {
105                conflict = true;
106                break;
107            }
108        }
109
110        String str = (conflict ? EnumChatFormatting.RED : "") + options.getOptionDisplayString(index);
111        str = (index == selected ? EnumChatFormatting.WHITE + "> " + EnumChatFormatting.YELLOW + "??? " + EnumChatFormatting.WHITE + "<" : str);
112        controls.drawCenteredString(mc.fontRenderer, str, xPosition + (width / 2), yPosition + (height - 8) / 2, 0xFFFFFFFF);
113    }
114
115    public boolean keyTyped(char c, int i)
116    {
117        if (selected != -1)
118        {
119            options.setKeyBinding(selected, i);
120            selected = -1;
121            KeyBinding.resetKeyBindingArrayAndHash();
122            return false;
123        }
124        return true;
125    }
126}