    001    package net.minecraftforge.client;
    002
    003    import org.lwjgl.input.Mouse;
    004    import org.lwjgl.opengl.GL11;
    005
    006    import net.minecraft.client.Minecraft;
    007    import net.minecraft.client.settings.GameSettings;
    008    import net.minecraft.client.gui.GuiControls;
    009    import net.minecraft.client.gui.GuiSlot;
    010    import net.minecraft.client.settings.KeyBinding;
    011    import net.minecraft.client.renderer.Tessellator;
    012
    013    public 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    }