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