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 }