From ec862f05960c46e168f48ebf9d3d9fba7f06c81c Mon Sep 17 00:00:00 2001 From: Jonas Herzig Date: Sat, 7 Nov 2020 13:18:10 +0100 Subject: [PATCH] Update jGui --- jGui | 2 +- .../java/com/replaymod/core/utils/Utils.java | 32 ++----- .../playeroverview/PlayerOverviewGui.java | 4 +- .../extras/youtube/GuiYoutubeUpload.java | 54 +++++------- .../pathing/gui/GuiKeyframeRepository.java | 86 ++++++------------- .../render/gui/GuiRenderSettings.java | 33 ++----- .../gui/overlay/GuiEditMarkerPopup.java | 2 +- .../replay/gui/screen/GuiReplayViewer.java | 85 +++++++----------- .../simplepathing/gui/GuiEditKeyframe.java | 6 +- .../simplepathing/gui/GuiPathing.java | 21 ++--- 10 files changed, 108 insertions(+), 217 deletions(-) diff --git a/jGui b/jGui index 6b16892d..424959c6 160000 --- a/jGui +++ b/jGui @@ -1 +1 @@ -Subproject commit 6b16892d6489bf28cbf6945329f71c2effb52bc2 +Subproject commit 424959c6d6819b0c680463e38615063af816bc59 diff --git a/src/main/java/com/replaymod/core/utils/Utils.java b/src/main/java/com/replaymod/core/utils/Utils.java index a318c793..a1cda2bc 100644 --- a/src/main/java/com/replaymod/core/utils/Utils.java +++ b/src/main/java/com/replaymod/core/utils/Utils.java @@ -245,18 +245,10 @@ public class Utils { logger.trace("Opening crash report popup GUI"); GuiCrashReportPopup popup = new GuiCrashReportPopup(container, crashReportStr); - Futures.addCallback(popup.getFuture(), new FutureCallback() { - @Override - public void onSuccess(@Nullable Void result) { - logger.trace("Crash report popup closed"); - if (onClose != null) { - onClose.run(); - } - } - - @Override - public void onFailure(Throwable t) { - logger.error("During error popup:", t); + popup.onClosed(() -> { + logger.trace("Crash report popup closed"); + if (onClose != null) { + onClose.run(); } }); return popup; @@ -329,18 +321,10 @@ public class Utils { LOGGER.trace("Minimal mode active, denying action, opening popup"); MinimalModeUnsupportedPopup popup = new MinimalModeUnsupportedPopup(container); - Futures.addCallback(popup.getFuture(), new FutureCallback() { - @Override - public void onSuccess(@Nullable Void result) { - LOGGER.trace("Minimal mode popup closed"); - if (onPopupClosed != null) { - onPopupClosed.run(); - } - } - - @Override - public void onFailure(Throwable t) { - LOGGER.error("During minimal mode popup:", t); + popup.onClosed(() -> { + LOGGER.trace("Minimal mode popup closed"); + if (onPopupClosed != null) { + onPopupClosed.run(); } }); return false; diff --git a/src/main/java/com/replaymod/extras/playeroverview/PlayerOverviewGui.java b/src/main/java/com/replaymod/extras/playeroverview/PlayerOverviewGui.java index 01824f4f..97e0d20f 100644 --- a/src/main/java/com/replaymod/extras/playeroverview/PlayerOverviewGui.java +++ b/src/main/java/com/replaymod/extras/playeroverview/PlayerOverviewGui.java @@ -53,13 +53,13 @@ public class PlayerOverviewGui extends GuiScreen implements Closeable { public final GuiCheckbox checkAll = new GuiCheckbox(contentPanel){ @Override public void onClick() { - playersScrollable.forEach(IGuiCheckbox.class).setChecked(true); + playersScrollable.invokeAll(IGuiCheckbox.class, e -> e.setChecked(true)); } }.setLabel("").setChecked(true).setTooltip(new GuiTooltip().setI18nText("replaymod.gui.playeroverview.showall")); public final GuiCheckbox uncheckAll = new GuiCheckbox(contentPanel){ @Override public void onClick() { - playersScrollable.forEach(IGuiCheckbox.class).setChecked(false); + playersScrollable.invokeAll(IGuiCheckbox.class, e -> e.setChecked(false)); } }.setLabel("").setChecked(false).setTooltip(new GuiTooltip().setI18nText("replaymod.gui.playeroverview.hideall")); diff --git a/src/main/java/com/replaymod/extras/youtube/GuiYoutubeUpload.java b/src/main/java/com/replaymod/extras/youtube/GuiYoutubeUpload.java index e3097841..6c1358ef 100644 --- a/src/main/java/com/replaymod/extras/youtube/GuiYoutubeUpload.java +++ b/src/main/java/com/replaymod/extras/youtube/GuiYoutubeUpload.java @@ -31,7 +31,6 @@ import net.minecraft.util.Util; //$$ import org.lwjgl.Sys; //#endif -import javax.annotation.Nullable; import javax.imageio.ImageIO; import javax.imageio.ImageReader; import javax.imageio.stream.ImageInputStream; @@ -116,36 +115,27 @@ public class GuiYoutubeUpload extends GuiScreen { public final GuiButton thumbnailButton = new GuiButton().onClick(new Runnable() { @Override public void run() { - Futures.addCallback( - GuiFileChooserPopup.openLoadGui(GuiYoutubeUpload.this, "replaymod.gui.load", - ImageIO.getReaderFileSuffixes()).getFuture(), - new FutureCallback() { - @Override - public void onSuccess(@Nullable File result) { - if (result != null) { - thumbnailButton.setLabel(result.getName()); - Image image; - try { - thumbnailImage = IOUtils.toByteArray(new FileInputStream(result)); - ImageInputStream in = ImageIO.createImageInputStream(new ByteArrayInputStream(thumbnailImage)); - ImageReader reader = ImageIO.getImageReaders(in).next(); - thumbnailFormat = reader.getFormatName().toLowerCase(); - image = Image.read(new ByteArrayInputStream(thumbnailImage)); - } catch (Throwable t) { - t.printStackTrace(); - thumbnailImage = null; - image = null; - } - thumbnail.setTexture(image); - inputValidation.run(); - } - } - - @Override - public void onFailure(Throwable t) { - throw new RuntimeException(t); - } - }); + GuiFileChooserPopup.openLoadGui( + GuiYoutubeUpload.this, + "replaymod.gui.load", + ImageIO.getReaderFileSuffixes() + ).onAccept(file -> { + thumbnailButton.setLabel(file.getName()); + Image image; + try { + thumbnailImage = IOUtils.toByteArray(new FileInputStream(file)); + ImageInputStream in = ImageIO.createImageInputStream(new ByteArrayInputStream(thumbnailImage)); + ImageReader reader = ImageIO.getImageReaders(in).next(); + thumbnailFormat = reader.getFormatName().toLowerCase(); + image = Image.read(new ByteArrayInputStream(thumbnailImage)); + } catch (Throwable t) { + t.printStackTrace(); + thumbnailImage = null; + image = null; + } + thumbnail.setTexture(image); + inputValidation.run(); + }); } }).setSize(200, 20).setI18nLabel("replaymod.gui.videothumbnail"); @@ -191,7 +181,7 @@ public class GuiYoutubeUpload extends GuiScreen { } private void setState(boolean uploading) { - forEach(GuiElement.class).setEnabled(!uploading); + invokeAll(GuiElement.class, e -> e.setEnabled(!uploading)); uploadButton.setEnabled(); if (uploading) { uploadButton.onClick(() -> { diff --git a/src/main/java/com/replaymod/pathing/gui/GuiKeyframeRepository.java b/src/main/java/com/replaymod/pathing/gui/GuiKeyframeRepository.java index 34760873..6ac40e61 100644 --- a/src/main/java/com/replaymod/pathing/gui/GuiKeyframeRepository.java +++ b/src/main/java/com/replaymod/pathing/gui/GuiKeyframeRepository.java @@ -65,18 +65,15 @@ public class GuiKeyframeRepository extends GuiScreen implements Closeable, Typea public final GuiButton overwriteButton = new GuiButton().onClick(new Runnable() { @Override public void run() { - GuiYesNoPopup popup = GuiYesNoPopup.open(GuiKeyframeRepository.this, + GuiYesNoPopup.open(GuiKeyframeRepository.this, new GuiLabel().setI18nText("replaymod.gui.keyframerepo.overwrite").setColor(Colors.BLACK) - ).setYesI18nLabel("gui.yes").setNoI18nLabel("gui.no"); - Utils.addCallback(popup.getFuture(), doIt -> { - if (doIt) { - for (Entry entry : selectedEntries) { - timelines.put(entry.name, currentTimeline); - } - overwriteButton.setDisabled(); - save(); + ).setYesI18nLabel("gui.yes").setNoI18nLabel("gui.no").onAccept(() -> { + for (Entry entry : selectedEntries) { + timelines.put(entry.name, currentTimeline); } - }, Throwable::printStackTrace); + overwriteButton.setDisabled(); + save(); + }); } }).setSize(75, 20).setI18nLabel("replaymod.gui.overwrite").setDisabled(); public final GuiButton saveAsButton = new GuiButton().onClick(new Runnable() { @@ -103,21 +100,11 @@ public class GuiKeyframeRepository extends GuiScreen implements Closeable, Typea && !timelines.containsKey(nameField.getText())); } }); - Futures.addCallback(popup.getFuture(), new FutureCallback() { - @Override - public void onSuccess(Boolean save) { - if (save) { - String name = nameField.getText(); - timelines.put(name, currentTimeline); - list.getListPanel().addElements(null, new Entry(name)); - save(); - } - } - - @Override - public void onFailure(Throwable t) { - t.printStackTrace(); - } + popup.onAccept(() -> { + String name = nameField.getText(); + timelines.put(name, currentTimeline); + list.getListPanel().addElements(null, new Entry(name)); + save(); }); } }).setSize(75, 20).setI18nLabel("replaymod.gui.saveas"); @@ -161,50 +148,29 @@ public class GuiKeyframeRepository extends GuiScreen implements Closeable, Typea && !timelines.containsKey(nameField.getText())); } }); - Futures.addCallback(popup.getFuture(), new FutureCallback() { - @Override - public void onSuccess(Boolean save) { - if (save) { - String name = nameField.getText(); - timelines.put(name, timelines.remove(selectedEntry.name)); - selectedEntry.name = name; - selectedEntry.label.setText(name); - save(); - } - } - - @Override - public void onFailure(Throwable t) { - t.printStackTrace(); - } + popup.onAccept(() -> { + String name = nameField.getText(); + timelines.put(name, timelines.remove(selectedEntry.name)); + selectedEntry.name = name; + selectedEntry.label.setText(name); + save(); }); } }).setSize(75, 20).setI18nLabel("replaymod.gui.rename").setDisabled(); public final GuiButton removeButton = new GuiButton().onClick(new Runnable() { @Override public void run() { - GuiYesNoPopup popup = GuiYesNoPopup.open(GuiKeyframeRepository.this, + GuiYesNoPopup.open(GuiKeyframeRepository.this, new GuiLabel().setI18nText("replaymod.gui.keyframerepo.delete").setColor(Colors.BLACK) - ).setYesI18nLabel("replaymod.gui.delete").setNoI18nLabel("replaymod.gui.cancel"); - Futures.addCallback(popup.getFuture(), new FutureCallback() { - @Override - public void onSuccess(Boolean delete) { - if (delete) { - for (Entry entry : selectedEntries) { - timelines.remove(entry.name); - list.getListPanel().removeElement(entry); - } - - selectedEntries.clear(); - updateButtons(); - save(); - } + ).setYesI18nLabel("replaymod.gui.delete").setNoI18nLabel("replaymod.gui.cancel").onAccept(() -> { + for (Entry entry : selectedEntries) { + timelines.remove(entry.name); + list.getListPanel().removeElement(entry); } - @Override - public void onFailure(Throwable t) { - t.printStackTrace(); - } + selectedEntries.clear(); + updateButtons(); + save(); }); } }).setSize(75, 20).setI18nLabel("replaymod.gui.remove").setDisabled(); diff --git a/src/main/java/com/replaymod/render/gui/GuiRenderSettings.java b/src/main/java/com/replaymod/render/gui/GuiRenderSettings.java index 5a632c57..7333b58b 100644 --- a/src/main/java/com/replaymod/render/gui/GuiRenderSettings.java +++ b/src/main/java/com/replaymod/render/gui/GuiRenderSettings.java @@ -1,8 +1,6 @@ package com.replaymod.render.gui; import com.google.common.base.Preconditions; -import com.google.common.util.concurrent.FutureCallback; -import com.google.common.util.concurrent.Futures; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.InstanceCreator; @@ -39,7 +37,6 @@ import net.minecraft.client.gui.screen.NoticeScreen; import net.minecraft.client.resource.language.I18n; import net.minecraft.util.crash.CrashReport; -import javax.annotation.Nullable; import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; @@ -131,25 +128,13 @@ public class GuiRenderSettings extends AbstractGuiPopup { encodingPresetDropdown.getSelectedValue().getFileExtension()); popup.setFolder(outputFile.getParentFile()); popup.setFileName(outputFile.getName()); - Futures.addCallback( - popup.getFuture(), - new FutureCallback() { - @Override - public void onSuccess(@Nullable File result) { - if (result != null) { - if (!result.getName().equals(outputFile.getName())) { - userDefinedOutputFileName = true; - } - outputFile = result; - outputFileButton.setLabel(result.getName()); - } - } - - @Override - public void onFailure(Throwable t) { - throw new RuntimeException(t); - } - }); + popup.onAccept(file -> { + if (!file.getName().equals(outputFile.getName())) { + userDefinedOutputFileName = true; + } + outputFile = file; + outputFileButton.setLabel(file.getName()); + }); } }); @@ -401,10 +386,10 @@ public class GuiRenderSettings extends AbstractGuiPopup { case CUBIC: case EQUIRECTANGULAR: case ODS: - stabilizePanel.forEach(IGuiCheckbox.class).setEnabled(); + stabilizePanel.invokeAll(IGuiCheckbox.class, GuiElement::setEnabled); break; default: - stabilizePanel.forEach(IGuiCheckbox.class).setDisabled(); + stabilizePanel.invokeAll(IGuiCheckbox.class, GuiElement::setDisabled); } // Enable/Disable Spherical FOV slider diff --git a/src/main/java/com/replaymod/replay/gui/overlay/GuiEditMarkerPopup.java b/src/main/java/com/replaymod/replay/gui/overlay/GuiEditMarkerPopup.java index 2d0d5be4..ab2a3d78 100644 --- a/src/main/java/com/replaymod/replay/gui/overlay/GuiEditMarkerPopup.java +++ b/src/main/java/com/replaymod/replay/gui/overlay/GuiEditMarkerPopup.java @@ -93,7 +93,7 @@ public class GuiEditMarkerPopup extends AbstractGuiPopup imp popup.setLayout(new VerticalLayout().setSpacing(5)) .addElements(new VerticalLayout.Data(0.5), title, inputs, buttons); - popup.forEach(IGuiLabel.class).setColor(Colors.BLACK); + popup.invokeAll(IGuiLabel.class, e -> e.setColor(Colors.BLACK)); nameField.setText(Strings.nullToEmpty(marker.getName())); timeField.setValue(marker.getTime()); diff --git a/src/main/java/com/replaymod/replay/gui/screen/GuiReplayViewer.java b/src/main/java/com/replaymod/replay/gui/screen/GuiReplayViewer.java index 5c227644..7e4ea045 100644 --- a/src/main/java/com/replaymod/replay/gui/screen/GuiReplayViewer.java +++ b/src/main/java/com/replaymod/replay/gui/screen/GuiReplayViewer.java @@ -1,8 +1,5 @@ package com.replaymod.replay.gui.screen; -import com.google.common.base.Supplier; -import com.google.common.util.concurrent.FutureCallback; -import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.SettableFuture; import com.replaymod.render.gui.GuiRenderQueue; import com.replaymod.render.rendering.VideoRenderer; @@ -63,6 +60,7 @@ import java.util.List; import java.util.Map; import java.util.Optional; import java.util.Set; +import java.util.function.Supplier; import java.util.stream.Collectors; import static com.replaymod.replay.ReplayModReplay.LOGGER; @@ -151,67 +149,46 @@ public class GuiReplayViewer extends GuiScreen { popup.getYesButton().setEnabled(!nameField.getText().isEmpty() && !new File(file.getParentFile(), Utils.replayNameToFileName(nameField.getText())).exists()); }); - Futures.addCallback(popup.getFuture(), new FutureCallback() { - @Override - public void onSuccess(Boolean delete) { - if (delete) { - // Sanitize their input - String name = nameField.getText().trim(); - // This file is what they want - File targetFile = new File(file.getParentFile(), Utils.replayNameToFileName(name)); - try { - // Finally, try to move it - FileUtils.moveFile(file, targetFile); - } catch (IOException e) { - // We failed (might also be their OS) - e.printStackTrace(); - getMinecraft().openScreen(new NoticeScreen( - //#if MC>=11400 - GuiReplayViewer.this::display, - new TranslatableText("replaymod.gui.viewer.delete.failed1"), - new TranslatableText("replaymod.gui.viewer.delete.failed2") - //#else - //$$ I18n.format("replaymod.gui.viewer.delete.failed1"), - //$$ I18n.format("replaymod.gui.viewer.delete.failed2") - //#endif - )); - return; - } - list.load(); - } - } - - @Override - public void onFailure(Throwable t) { - t.printStackTrace(); + popup.onAccept(() -> { + // Sanitize their input + String newName = nameField.getText().trim(); + // This file is what they want + File targetFile = new File(file.getParentFile(), Utils.replayNameToFileName(newName)); + try { + // Finally, try to move it + FileUtils.moveFile(file, targetFile); + } catch (IOException e) { + // We failed (might also be their OS) + e.printStackTrace(); + getMinecraft().openScreen(new NoticeScreen( + //#if MC>=11400 + GuiReplayViewer.this::display, + new TranslatableText("replaymod.gui.viewer.delete.failed1"), + new TranslatableText("replaymod.gui.viewer.delete.failed2") + //#else + //$$ I18n.format("replaymod.gui.viewer.delete.failed1"), + //$$ I18n.format("replaymod.gui.viewer.delete.failed2") + //#endif + )); + return; } + list.load(); }); } }).setSize(73, 20).setI18nLabel("replaymod.gui.rename").setDisabled(); public final GuiButton deleteButton = new GuiButton().onClick(() -> { for (GuiReplayEntry entry : list.getSelected()) { String name = entry.name.getText(); - GuiYesNoPopup popup = GuiYesNoPopup.open(GuiReplayViewer.this, + GuiYesNoPopup.open(GuiReplayViewer.this, new GuiLabel().setI18nText("replaymod.gui.viewer.delete.linea").setColor(Colors.BLACK), new GuiLabel().setI18nText("replaymod.gui.viewer.delete.lineb", name + Formatting.RESET).setColor(Colors.BLACK) - ).setYesI18nLabel("replaymod.gui.delete").setNoI18nLabel("replaymod.gui.cancel"); - Futures.addCallback(popup.getFuture(), new FutureCallback() { - @Override - public void onSuccess(Boolean delete) { - if (delete) { - try { - FileUtils.forceDelete(entry.file); - } catch (IOException e) { - e.printStackTrace(); - } - list.load(); - } - } - - @Override - public void onFailure(Throwable t) { - t.printStackTrace(); + ).setYesI18nLabel("replaymod.gui.delete").setNoI18nLabel("replaymod.gui.cancel").onAccept(() -> { + try { + FileUtils.forceDelete(entry.file); + } catch (IOException e) { + e.printStackTrace(); } + list.load(); }); } }).setSize(73, 20).setI18nLabel("replaymod.gui.delete").setDisabled(); diff --git a/src/main/java/com/replaymod/simplepathing/gui/GuiEditKeyframe.java b/src/main/java/com/replaymod/simplepathing/gui/GuiEditKeyframe.java index 27fd2fd1..eb3561ec 100644 --- a/src/main/java/com/replaymod/simplepathing/gui/GuiEditKeyframe.java +++ b/src/main/java/com/replaymod/simplepathing/gui/GuiEditKeyframe.java @@ -155,7 +155,7 @@ public abstract class GuiEditKeyframe> extends Abst link(timeMinField, timeSecField, timeMSecField); - popup.forEach(IGuiLabel.class).setColor(Colors.BLACK); + popup.invokeAll(IGuiLabel.class, e -> e.setColor(Colors.BLACK)); } @Override @@ -194,7 +194,7 @@ public abstract class GuiEditKeyframe> extends Abst link(timestampMinField, timestampSecField, timestampMSecField, timeMinField, timeSecField, timeMSecField); - popup.forEach(IGuiLabel.class).setColor(Colors.BLACK); + popup.invokeAll(IGuiLabel.class, e -> e.setColor(Colors.BLACK)); } @Override @@ -252,7 +252,7 @@ public abstract class GuiEditKeyframe> extends Abst link(xField, yField, zField, yawField, pitchField, rollField, timeMinField, timeSecField, timeMSecField); - popup.forEach(IGuiLabel.class).setColor(Colors.BLACK); + popup.invokeAll(IGuiLabel.class, e -> e.setColor(Colors.BLACK)); } @Override diff --git a/src/main/java/com/replaymod/simplepathing/gui/GuiPathing.java b/src/main/java/com/replaymod/simplepathing/gui/GuiPathing.java index f805dd58..dc9c6b4b 100644 --- a/src/main/java/com/replaymod/simplepathing/gui/GuiPathing.java +++ b/src/main/java/com/replaymod/simplepathing/gui/GuiPathing.java @@ -399,23 +399,12 @@ public class GuiPathing { } public void clearKeyframesButtonPressed() { - GuiYesNoPopup popup = GuiYesNoPopup.open(replayHandler.getOverlay(), + GuiYesNoPopup.open(replayHandler.getOverlay(), new GuiLabel().setI18nText("replaymod.gui.clearcallback.title").setColor(Colors.BLACK) - ).setYesI18nLabel("gui.yes").setNoI18nLabel("gui.no"); - Futures.addCallback(popup.getFuture(), new FutureCallback() { - @Override - public void onSuccess(Boolean delete) { - if (delete) { - mod.clearCurrentTimeline(); - if (entityTracker != null) { - mod.getCurrentTimeline().setEntityTracker(entityTracker); - } - } - } - - @Override - public void onFailure(Throwable t) { - t.printStackTrace(); + ).setYesI18nLabel("gui.yes").setNoI18nLabel("gui.no").onAccept(() -> { + mod.clearCurrentTimeline(); + if (entityTracker != null) { + mod.getCurrentTimeline().setEntityTracker(entityTracker); } }); }