    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}