Add "Add to Queue" button to keyframe repository (closes #168)
This commit is contained in:
2
jGui
2
jGui
Submodule jGui updated: 6aeba190a6...87fd32049b
@@ -6,6 +6,9 @@ import com.google.common.util.concurrent.SettableFuture;
|
||||
import com.replaymod.core.ReplayMod;
|
||||
import com.replaymod.core.utils.Utils;
|
||||
import com.replaymod.core.versions.MCVer;
|
||||
import com.replaymod.render.gui.GuiRenderQueue;
|
||||
import com.replaymod.render.gui.GuiRenderSettings;
|
||||
import com.replaymod.replay.ReplayHandler;
|
||||
import com.replaymod.replay.ReplayModReplay;
|
||||
import com.replaymod.replaystudio.pathing.PathingRegistry;
|
||||
import com.replaymod.replaystudio.pathing.path.Path;
|
||||
@@ -39,11 +42,13 @@ import org.apache.logging.log4j.LogManager;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayDeque;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static de.johni0702.minecraft.gui.versions.MCVer.getClipboardString;
|
||||
import static de.johni0702.minecraft.gui.versions.MCVer.setClipboardString;
|
||||
@@ -245,6 +250,45 @@ public class GuiKeyframeRepository extends GuiScreen implements Closeable, Typea
|
||||
}
|
||||
}).setSize(75, 20).setI18nLabel("replaymod.gui.paste");
|
||||
|
||||
public final GuiButton addToQueueButton = new GuiButton().onClick(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
ReplayHandler replayHandler = ReplayModReplay.instance.getReplayHandler();
|
||||
GuiRenderQueue queue = new GuiRenderQueue(GuiKeyframeRepository.this, replayHandler, null);
|
||||
queue.open();
|
||||
|
||||
Set<String> selected = selectedEntries.stream().map(e -> e.name).collect(Collectors.toSet());
|
||||
ArrayDeque<Map.Entry<String, Timeline>> toBeAdded = new ArrayDeque<>();
|
||||
// Iterating over timelines to get consistent ordering (cause selectedEntries is an unordered set)
|
||||
// and we need to get the Timelines anyway.
|
||||
for (Map.Entry<String, Timeline> entry : timelines.entrySet()) {
|
||||
if (selected.contains(entry.getKey())) {
|
||||
toBeAdded.offerLast(entry);
|
||||
}
|
||||
}
|
||||
new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
Map.Entry<String, Timeline> entry = toBeAdded.pollFirst();
|
||||
if (entry == null) {
|
||||
return;
|
||||
}
|
||||
String name = entry.getKey();
|
||||
Timeline timeline = entry.getValue();
|
||||
GuiRenderSettings settingsGui = queue.addJob(timeline);
|
||||
settingsGui.buttonPanel.removeElement(settingsGui.renderButton);
|
||||
settingsGui.setOutputFileBaseName(name);
|
||||
Runnable orgOnClick = settingsGui.queueButton.getOnClick();
|
||||
settingsGui.queueButton.onClick(() -> {
|
||||
orgOnClick.run();
|
||||
this.run();
|
||||
});
|
||||
settingsGui.open();
|
||||
}
|
||||
}.run();
|
||||
}
|
||||
}).setSize(75, 20).setI18nLabel("replaymod.gui.rendersettings.addtoqueue");
|
||||
|
||||
public final GuiPanel buttonPanel = new GuiPanel(contentPanel)
|
||||
.setLayout(new GridLayout()
|
||||
.setColumns(4)
|
||||
@@ -252,7 +296,7 @@ public class GuiKeyframeRepository extends GuiScreen implements Closeable, Typea
|
||||
.setSpacingY(5))
|
||||
.addElements(null,
|
||||
overwriteButton, saveAsButton, renameButton, removeButton,
|
||||
loadButton, copyButton, pasteButton);
|
||||
loadButton, addToQueueButton, copyButton, pasteButton);
|
||||
|
||||
private final Map<String, Timeline> timelines = new LinkedHashMap<>();
|
||||
private final Timeline currentTimeline;
|
||||
@@ -298,6 +342,8 @@ public class GuiKeyframeRepository extends GuiScreen implements Closeable, Typea
|
||||
if (entry.getKey().isEmpty()) continue; // don't show auto-save slot
|
||||
list.getListPanel().addElements(null, new Entry(entry.getKey()));
|
||||
}
|
||||
|
||||
updateButtons();
|
||||
}
|
||||
|
||||
private void updateButtons() {
|
||||
@@ -308,6 +354,7 @@ public class GuiKeyframeRepository extends GuiScreen implements Closeable, Typea
|
||||
renameButton.setEnabled(selected == 1);
|
||||
removeButton.setEnabled(selected >= 1);
|
||||
copyButton.setEnabled(selected >= 1);
|
||||
addToQueueButton.setEnabled(selected >= 1);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -235,7 +235,7 @@ public class GuiRenderQueue extends AbstractGuiPopup<GuiRenderQueue> implements
|
||||
|
||||
@Override
|
||||
public void open() {
|
||||
if (jobs.isEmpty()) {
|
||||
if (jobs.isEmpty() && timelineSupplier != null) {
|
||||
if (addButtonClicked() == null) {
|
||||
close();
|
||||
}
|
||||
@@ -261,6 +261,7 @@ public class GuiRenderQueue extends AbstractGuiPopup<GuiRenderQueue> implements
|
||||
|
||||
public void updateButtons() {
|
||||
int selected = selectedEntries.size();
|
||||
addButton.setEnabled(timelineSupplier != null);
|
||||
editButton.setEnabled(selected == 1);
|
||||
removeButton.setEnabled(selected >= 1);
|
||||
renderButton.setEnabled(selected > 0);
|
||||
|
||||
@@ -45,6 +45,7 @@ import java.io.FileNotFoundException;
|
||||
import java.io.IOException;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.InvalidPathException;
|
||||
import java.nio.file.NoSuchFileException;
|
||||
import java.nio.file.Path;
|
||||
import java.text.SimpleDateFormat;
|
||||
@@ -573,6 +574,20 @@ public class GuiRenderSettings extends AbstractGuiPopup<GuiRenderSettings> {
|
||||
return screen;
|
||||
}
|
||||
|
||||
public void setOutputFileBaseName(String base) {
|
||||
RenderSettings.EncodingPreset preset = encodingPresetDropdown.getSelectedValue();
|
||||
File file = new File(outputFile.getParentFile(), base + "." + preset.getFileExtension());
|
||||
// Ensure the file name is valid
|
||||
try {
|
||||
//noinspection ResultOfMethodCallIgnored
|
||||
file.toPath();
|
||||
outputFile = file;
|
||||
outputFileButton.setLabel(file.getName());
|
||||
} catch (InvalidPathException ignored) {
|
||||
setOutputFileBaseName("filename_invalid_" + base.hashCode());
|
||||
}
|
||||
}
|
||||
|
||||
protected File conformExtension(File file, RenderSettings.EncodingPreset preset) {
|
||||
String name = file.getName();
|
||||
if (name.contains(".")) {
|
||||
|
||||
Reference in New Issue
Block a user