From 3dd35240023d9aa12ddd6dae9c53837e91b68922 Mon Sep 17 00:00:00 2001 From: johni0702 Date: Fri, 4 Dec 2015 09:23:28 +0100 Subject: [PATCH] Add gui for editing marker keyframes --- .../gui/overlay/GuiEditMarkerPopup.java | 110 ++++++++++++++++++ .../replay/gui/overlay/GuiMarkerTimeline.java | 2 +- 2 files changed, 111 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/replaymod/replay/gui/overlay/GuiEditMarkerPopup.java diff --git a/src/main/java/com/replaymod/replay/gui/overlay/GuiEditMarkerPopup.java b/src/main/java/com/replaymod/replay/gui/overlay/GuiEditMarkerPopup.java new file mode 100644 index 00000000..874c0168 --- /dev/null +++ b/src/main/java/com/replaymod/replay/gui/overlay/GuiEditMarkerPopup.java @@ -0,0 +1,110 @@ +package com.replaymod.replay.gui.overlay; + +import com.google.common.base.Strings; +import com.replaymod.replay.ReplayHandler; +import de.johni0702.minecraft.gui.container.GuiContainer; +import de.johni0702.minecraft.gui.container.GuiPanel; +import de.johni0702.minecraft.gui.element.*; +import de.johni0702.minecraft.gui.layout.GridLayout; +import de.johni0702.minecraft.gui.layout.HorizontalLayout; +import de.johni0702.minecraft.gui.layout.VerticalLayout; +import de.johni0702.minecraft.gui.popup.AbstractGuiPopup; +import de.johni0702.minecraft.gui.utils.Colors; +import de.johni0702.replaystudio.data.Marker; + +public class GuiEditMarkerPopup extends AbstractGuiPopup { + private final ReplayHandler replayHandler; + private final Marker marker; + + public final GuiLabel title = new GuiLabel().setI18nText("replaymod.gui.editkeyframe.title.marker"); + + public final GuiTextField nameField = new GuiTextField().setSize(150, 20); + // TODO: Replace with a min/sec/msec field + public final GuiNumberField timeField = new GuiNumberField().setSize(150, 20).setPrecision(0); + + public final GuiNumberField xField = new GuiNumberField().setSize(150, 20).setPrecision(10); + public final GuiNumberField yField = new GuiNumberField().setSize(150, 20).setPrecision(10); + public final GuiNumberField zField = new GuiNumberField().setSize(150, 20).setPrecision(10); + + public final GuiNumberField yawField = new GuiNumberField().setSize(150, 20).setPrecision(5); + public final GuiNumberField pitchField = new GuiNumberField().setSize(150, 20).setPrecision(5); + public final GuiNumberField rollField = new GuiNumberField().setSize(150, 20).setPrecision(5); + + public final GuiPanel inputs = GuiPanel.builder() + .layout(new GridLayout().setColumns(2).setSpacingX(7).setSpacingY(3)) + .with(new GuiLabel().setI18nText("replaymod.gui.editkeyframe.markername"), new GridLayout.Data(0, 0.5)) + .with(nameField, new GridLayout.Data(1, 0.5)) + .with(new GuiLabel().setI18nText("replaymod.gui.editkeyframe.timestamp"), new GridLayout.Data(0, 0.5)) + .with(timeField, new GridLayout.Data(1, 0.5)) + .with(new GuiLabel().setI18nText("replaymod.gui.editkeyframe.xpos"), new GridLayout.Data(0, 0.5)) + .with(xField, new GridLayout.Data(1, 0.5)) + .with(new GuiLabel().setI18nText("replaymod.gui.editkeyframe.ypos"), new GridLayout.Data(0, 0.5)) + .with(yField, new GridLayout.Data(1, 0.5)) + .with(new GuiLabel().setI18nText("replaymod.gui.editkeyframe.zpos"), new GridLayout.Data(0, 0.5)) + .with(zField, new GridLayout.Data(1, 0.5)) + .with(new GuiLabel().setI18nText("replaymod.gui.editkeyframe.camyaw"), new GridLayout.Data(0, 0.5)) + .with(yawField, new GridLayout.Data(1, 0.5)) + .with(new GuiLabel().setI18nText("replaymod.gui.editkeyframe.campitch"), new GridLayout.Data(0, 0.5)) + .with(pitchField, new GridLayout.Data(1, 0.5)) + .with(new GuiLabel().setI18nText("replaymod.gui.editkeyframe.camroll"), new GridLayout.Data(0, 0.5)) + .with(rollField, new GridLayout.Data(1, 0.5)) + .build(); + + public final GuiButton saveButton = new GuiButton().onClick(new Runnable() { + @Override + public void run() { + marker.setName(Strings.emptyToNull(nameField.getText())); + marker.setTime(timeField.getInteger()); + marker.setX(xField.getDouble()); + marker.setY(yField.getDouble()); + marker.setZ(zField.getDouble()); + marker.setYaw(yawField.getFloat()); + marker.setPitch(pitchField.getFloat()); + marker.setRoll(rollField.getFloat()); + replayHandler.saveMarkers(); + close(); + } + }).setSize(150, 20).setI18nLabel("replaymod.gui.save"); + + public final GuiButton cancelButton = new GuiButton().onClick(new Runnable() { + @Override + public void run() { + close(); + } + }).setSize(150, 20).setI18nLabel("replaymod.gui.cancel"); + + public final GuiPanel buttons = new GuiPanel() + .setLayout(new HorizontalLayout(HorizontalLayout.Alignment.CENTER).setSpacing(7)) + .addElements(new HorizontalLayout.Data(0.5), saveButton, cancelButton); + + public GuiEditMarkerPopup(ReplayHandler replayHandler, GuiContainer container, Marker marker) { + super(container); + this.replayHandler = replayHandler; + this.marker = marker; + + setBackgroundColor(Colors.DARK_TRANSPARENT); + + popup.setLayout(new VerticalLayout().setSpacing(5)) + .addElements(new VerticalLayout.Data(0.5), title, inputs, buttons); + popup.forEach(IGuiLabel.class).setColor(Colors.BLACK); + + nameField.setText(Strings.nullToEmpty(marker.getName())); + timeField.setValue(marker.getTime()); + xField.setValue(marker.getX()); + yField.setValue(marker.getY()); + zField.setValue(marker.getZ()); + yawField.setValue(marker.getYaw()); + pitchField.setValue(marker.getPitch()); + rollField.setValue(marker.getRoll()); + } + + @Override + public void open() { + super.open(); + } + + @Override + protected GuiEditMarkerPopup getThis() { + return this; + } +} diff --git a/src/main/java/com/replaymod/replay/gui/overlay/GuiMarkerTimeline.java b/src/main/java/com/replaymod/replay/gui/overlay/GuiMarkerTimeline.java index eee428dd..d272722f 100644 --- a/src/main/java/com/replaymod/replay/gui/overlay/GuiMarkerTimeline.java +++ b/src/main/java/com/replaymod/replay/gui/overlay/GuiMarkerTimeline.java @@ -121,7 +121,7 @@ public class GuiMarkerTimeline extends AbstractGuiTimeline im draggingStartX = position.getX(); draggingTimeDelta = marker.getTime() - getTimeAt(position.getX(), position.getY()); } else { // Double click - // TODO: Open Edit GUI + new GuiEditMarkerPopup(replayHandler, getContainer(), marker).open(); } lastClickTime = now; } else if (button == 1) { // Right click