From 0ae8e9583afa242d704babe2162b0777704c739c Mon Sep 17 00:00:00 2001 From: CrushedPixel Date: Fri, 17 Jul 2015 01:25:50 +0200 Subject: [PATCH] Add Toolbar to GuiReplayOverlay, showing all Keybindings as handy buttons --- .../gui/overlay/GuiReplayOverlay.java | 91 ++++++++++++++++++- 1 file changed, 90 insertions(+), 1 deletion(-) diff --git a/src/main/java/eu/crushedpixel/replaymod/gui/overlay/GuiReplayOverlay.java b/src/main/java/eu/crushedpixel/replaymod/gui/overlay/GuiReplayOverlay.java index f23a8f5c..57671258 100755 --- a/src/main/java/eu/crushedpixel/replaymod/gui/overlay/GuiReplayOverlay.java +++ b/src/main/java/eu/crushedpixel/replaymod/gui/overlay/GuiReplayOverlay.java @@ -11,6 +11,7 @@ import eu.crushedpixel.replaymod.gui.elements.timelines.GuiMarkerTimeline; import eu.crushedpixel.replaymod.holders.AdvancedPosition; import eu.crushedpixel.replaymod.holders.Keyframe; import eu.crushedpixel.replaymod.holders.TimestampValue; +import eu.crushedpixel.replaymod.registry.KeybindRegistry; import eu.crushedpixel.replaymod.registry.ReplayGuiRegistry; import eu.crushedpixel.replaymod.replay.ReplayHandler; import eu.crushedpixel.replaymod.utils.CameraPathValidator; @@ -23,6 +24,7 @@ import net.minecraft.client.gui.GuiScreen; import net.minecraft.client.gui.inventory.GuiInventory; import net.minecraft.client.renderer.GlStateManager; import net.minecraft.client.resources.I18n; +import net.minecraft.client.settings.KeyBinding; import net.minecraft.entity.Entity; import net.minecraft.util.ResourceLocation; import net.minecraftforge.client.event.RenderGameOverlayEvent; @@ -30,9 +32,11 @@ import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.fml.client.FMLClientHandler; import net.minecraftforge.fml.common.FMLCommonHandler; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; +import org.lwjgl.input.Keyboard; import org.lwjgl.opengl.Display; import org.lwjgl.util.Point; +import java.awt.*; import java.io.IOException; import java.util.List; @@ -252,8 +256,93 @@ public class GuiReplayOverlay extends Gui { private final GuiReplaySpeedSlider speedSlider = new GuiReplaySpeedSlider(1, SPEED_X, TOP_ROW, I18n.format("replaymod.gui.speed")); + private final DelegatingElement toolbar = new DelegatingElement() { + + private boolean open = false; + + private void toggleOpen() { + open = !open; + } + + private GuiElement buttonOpenToolbar = new GuiArrowButton(-1, 10, HEIGHT-10-20, "", GuiArrowButton.Direction.UP) { + @Override + public void performAction() { + toggleOpen(); + } + }; + + private GuiElement buttonCloseToolbar = new GuiArrowButton(-1, 10, HEIGHT-10-20, "", GuiArrowButton.Direction.DOWN) { + @Override + public void performAction() { + toggleOpen(); + } + }; + + private ComposedElement openElements = new ComposedElement(buttonCloseToolbar); + + private int maxButtonY = -1; + + { + int buttonX = 10; + int maxWidth = 0; + int i = 0; + + for(final KeyBinding kb : KeybindRegistry.getReplayModKeyBindings()) { + int buttonY = HEIGHT-55-(i*25); + + if(buttonY < 80) { + buttonX += 25 + maxWidth + 5; + maxWidth = 0; + + i = 0; + buttonY = HEIGHT-55-(i*25); + } + + if(buttonY < maxButtonY || maxButtonY == -1) maxButtonY = buttonY; + + GuiElement button = new GuiAdvancedButton(buttonX, buttonY, 20, 20, Keyboard.getKeyName(kb.getKeyCode()), new Runnable() { + @Override + public void run() { + ReplayMod.keyInputHandler.handleCustomKeybindings(kb, false, kb.getKeyCode()); + } + }, null); + + String stringText = I18n.format(kb.getKeyDescription()); + int stringWidth = mc.fontRendererObj.getStringWidth(stringText); + + if(stringWidth > maxWidth) { + maxWidth = stringWidth; + } + + GuiString string = new GuiString(buttonX+25, buttonY+6, Color.WHITE, stringText); + + openElements.addPart(button); + openElements.addPart(string); + + i++; + } + } + + @Override + public GuiElement delegate() { + if(open) { + return openElements; + } else { + return buttonOpenToolbar; + } + } + + @Override + public void draw(Minecraft mc, int mouseX, int mouseY) { + if(open) { + drawGradientRect(0, maxButtonY - 10, WIDTH, HEIGHT, -1072689136, -804253680); + } + super.draw(mc, mouseX, mouseY); + } + }; + private final GuiElement content = new ComposedElement(buttonPlayPause, buttonExport, buttonPlace, buttonTime, - buttonPlayPausePath, buttonZoomIn, buttonZoomOut, timeline, timelineReal, scrollbar, speedSlider); + buttonPlayPausePath, buttonZoomIn, buttonZoomOut, timeline, timelineReal, scrollbar, speedSlider, toolbar); private float zoom_scale = 0.1f; //can see 1/10th of the timeline private double pos_left = 0f; //left border of timeline is at 0%