Fix crash when setting two keyframes to the same time via the edit keyframe gui

The save button is now disabled if the configured time is already occupied.
This commit is contained in:
johni0702
2016-10-23 14:06:17 +02:00
parent 18f83039af
commit 4805e5e9f5

View File

@@ -19,6 +19,7 @@ import de.johni0702.minecraft.gui.layout.HorizontalLayout;
import de.johni0702.minecraft.gui.layout.VerticalLayout; import de.johni0702.minecraft.gui.layout.VerticalLayout;
import de.johni0702.minecraft.gui.popup.AbstractGuiPopup; import de.johni0702.minecraft.gui.popup.AbstractGuiPopup;
import de.johni0702.minecraft.gui.utils.Colors; import de.johni0702.minecraft.gui.utils.Colors;
import de.johni0702.minecraft.gui.utils.Consumer;
import org.apache.commons.lang3.tuple.Triple; import org.apache.commons.lang3.tuple.Triple;
import org.lwjgl.input.Keyboard; import org.lwjgl.input.Keyboard;
import org.lwjgl.util.ReadablePoint; import org.lwjgl.util.ReadablePoint;
@@ -71,9 +72,10 @@ public abstract class GuiEditKeyframe<T extends GuiEditKeyframe<T>> extends Abst
this.path = path; this.path = path;
long time = keyframe.getTime(); long time = keyframe.getTime();
timeMinField.setValue(time / 1000 / 60); Consumer<String> updateSaveButtonState = s -> saveButton.setEnabled(canSave());
timeSecField.setValue(time / 1000 % 60); timeMinField.setValue(time / 1000 / 60).onTextChanged(updateSaveButtonState);
timeMSecField.setValue(time % 1000); timeSecField.setValue(time / 1000 % 60).onTextChanged(updateSaveButtonState);
timeMSecField.setValue(time % 1000).onTextChanged(updateSaveButtonState);
title.setI18nText("replaymod.gui.editkeyframe.title." + type); title.setI18nText("replaymod.gui.editkeyframe.title." + type);
saveButton.onClick(() -> { saveButton.onClick(() -> {
@@ -87,6 +89,14 @@ public abstract class GuiEditKeyframe<T extends GuiEditKeyframe<T>> extends Abst
}); });
} }
private boolean canSave() {
long newTime = (timeMinField.getInteger() * 60 + timeSecField.getInteger()) * 1000 + timeMSecField.getInteger();
if (newTime != keyframe.getTime() && path.getKeyframe(newTime) != null) {
return false;
}
return true;
}
@Override @Override
public boolean typeKey(ReadablePoint mousePosition, int keyCode, char keyChar, boolean ctrlDown, boolean shiftDown) { public boolean typeKey(ReadablePoint mousePosition, int keyCode, char keyChar, boolean ctrlDown, boolean shiftDown) {
if (keyCode == Keyboard.KEY_ESCAPE) { if (keyCode == Keyboard.KEY_ESCAPE) {