Add multi-select to Replay Viewer list (closes #354)
This commit is contained in:
2
jGui
2
jGui
Submodule jGui updated: 7325494316...19bd7ec052
@@ -43,7 +43,7 @@ public class GuiHandler extends EventRegistrations {
|
|||||||
replayViewer.replaySpecificButtons.add(new GuiButton(replayViewer.editorButton).onClick(() -> {
|
replayViewer.replaySpecificButtons.add(new GuiButton(replayViewer.editorButton).onClick(() -> {
|
||||||
if (Utils.ifMinimalModeDoPopup(replayViewer, () -> {})) return;
|
if (Utils.ifMinimalModeDoPopup(replayViewer, () -> {})) return;
|
||||||
try {
|
try {
|
||||||
new GuiEditReplay(replayViewer, replayViewer.list.getSelected().file.toPath()) {
|
new GuiEditReplay(replayViewer, replayViewer.list.getSelected().get(0).file.toPath()) {
|
||||||
@Override
|
@Override
|
||||||
protected void close() {
|
protected void close() {
|
||||||
super.close();
|
super.close();
|
||||||
|
|||||||
@@ -72,15 +72,7 @@ import net.minecraft.text.TranslatableText;
|
|||||||
public class GuiReplayViewer extends GuiScreen {
|
public class GuiReplayViewer extends GuiScreen {
|
||||||
private final ReplayModReplay mod;
|
private final ReplayModReplay mod;
|
||||||
|
|
||||||
public final GuiReplayList list = new GuiReplayList(this).onSelectionChanged(new Runnable() {
|
public final GuiReplayList list = new GuiReplayList(this).onSelectionChanged(this::updateButtons).onSelectionDoubleClicked(() -> {
|
||||||
@Override
|
|
||||||
public void run() {
|
|
||||||
replaySpecificButtons.forEach(b -> b.setEnabled(list.getSelected() != null));
|
|
||||||
if (list.getSelected() != null && list.getSelected().incompatible) {
|
|
||||||
loadButton.setDisabled();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}).onSelectionDoubleClicked(() -> {
|
|
||||||
if (this.loadButton.isEnabled()) {
|
if (this.loadButton.isEnabled()) {
|
||||||
this.loadButton.onClick();
|
this.loadButton.onClick();
|
||||||
}
|
}
|
||||||
@@ -90,7 +82,7 @@ public class GuiReplayViewer extends GuiScreen {
|
|||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
try {
|
try {
|
||||||
mod.startReplay(list.getSelected().file);
|
mod.startReplay(list.getSelected().get(0).file);
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
} finally {
|
} finally {
|
||||||
@@ -116,7 +108,7 @@ public class GuiReplayViewer extends GuiScreen {
|
|||||||
public final GuiButton renameButton = new GuiButton().onClick(new Runnable() {
|
public final GuiButton renameButton = new GuiButton().onClick(new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
final File file = list.getSelected().file;
|
final File file = list.getSelected().get(0).file;
|
||||||
String name = Utils.fileNameToReplayName(file.getName());
|
String name = Utils.fileNameToReplayName(file.getName());
|
||||||
final GuiTextField nameField = new GuiTextField().setSize(200, 20).setFocused(true).setText(name);
|
final GuiTextField nameField = new GuiTextField().setSize(200, 20).setFocused(true).setText(name);
|
||||||
final GuiYesNoPopup popup = GuiYesNoPopup.open(GuiReplayViewer.this,
|
final GuiYesNoPopup popup = GuiYesNoPopup.open(GuiReplayViewer.this,
|
||||||
@@ -172,10 +164,9 @@ public class GuiReplayViewer extends GuiScreen {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
}).setSize(73, 20).setI18nLabel("replaymod.gui.rename").setDisabled();
|
}).setSize(73, 20).setI18nLabel("replaymod.gui.rename").setDisabled();
|
||||||
public final GuiButton deleteButton = new GuiButton().onClick(new Runnable() {
|
public final GuiButton deleteButton = new GuiButton().onClick(() -> {
|
||||||
@Override
|
for (GuiReplayEntry entry : list.getSelected()) {
|
||||||
public void run() {
|
String name = entry.name.getText();
|
||||||
String name = list.getSelected().name.getText();
|
|
||||||
GuiYesNoPopup popup = GuiYesNoPopup.open(GuiReplayViewer.this,
|
GuiYesNoPopup popup = GuiYesNoPopup.open(GuiReplayViewer.this,
|
||||||
new GuiLabel().setI18nText("replaymod.gui.viewer.delete.linea").setColor(Colors.BLACK),
|
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)
|
new GuiLabel().setI18nText("replaymod.gui.viewer.delete.lineb", name + Formatting.RESET).setColor(Colors.BLACK)
|
||||||
@@ -185,7 +176,7 @@ public class GuiReplayViewer extends GuiScreen {
|
|||||||
public void onSuccess(Boolean delete) {
|
public void onSuccess(Boolean delete) {
|
||||||
if (delete) {
|
if (delete) {
|
||||||
try {
|
try {
|
||||||
FileUtils.forceDelete(list.getSelected().file);
|
FileUtils.forceDelete(entry.file);
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
@@ -215,7 +206,7 @@ public class GuiReplayViewer extends GuiScreen {
|
|||||||
}).setSize(73, 20).setI18nLabel("replaymod.gui.cancel");
|
}).setSize(73, 20).setI18nLabel("replaymod.gui.cancel");
|
||||||
|
|
||||||
public final List<GuiButton> replaySpecificButtons = new ArrayList<>();
|
public final List<GuiButton> replaySpecificButtons = new ArrayList<>();
|
||||||
{ replaySpecificButtons.addAll(Arrays.asList(loadButton, renameButton, deleteButton)); }
|
{ replaySpecificButtons.addAll(Arrays.asList(loadButton, renameButton)); }
|
||||||
public final GuiPanel editorButton = new GuiPanel();
|
public final GuiPanel editorButton = new GuiPanel();
|
||||||
|
|
||||||
public final GuiPanel upperButtonPanel = new GuiPanel().setLayout(new HorizontalLayout().setSpacing(5))
|
public final GuiPanel upperButtonPanel = new GuiPanel().setLayout(new HorizontalLayout().setSpacing(5))
|
||||||
@@ -253,6 +244,17 @@ public class GuiReplayViewer extends GuiScreen {
|
|||||||
return mod;
|
return mod;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void updateButtons() {
|
||||||
|
List<GuiReplayEntry> selected = list.getSelected();
|
||||||
|
int count = selected.size();
|
||||||
|
|
||||||
|
replaySpecificButtons.forEach(b -> b.setEnabled(count == 1));
|
||||||
|
deleteButton.setEnabled(count > 0);
|
||||||
|
if (count == 1 && selected.get(0).incompatible) {
|
||||||
|
loadButton.setDisabled();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private static final GuiImage DEFAULT_THUMBNAIL = new GuiImage().setTexture(Utils.DEFAULT_THUMBNAIL);
|
private static final GuiImage DEFAULT_THUMBNAIL = new GuiImage().setTexture(Utils.DEFAULT_THUMBNAIL);
|
||||||
|
|
||||||
public static class GuiSelectReplayPopup extends AbstractGuiPopup<GuiSelectReplayPopup> {
|
public static class GuiSelectReplayPopup extends AbstractGuiPopup<GuiSelectReplayPopup> {
|
||||||
@@ -281,10 +283,10 @@ public class GuiReplayViewer extends GuiScreen {
|
|||||||
acceptButton.setEnabled(list.getSelected() != null);
|
acceptButton.setEnabled(list.getSelected() != null);
|
||||||
}).onSelectionDoubleClicked(() -> {
|
}).onSelectionDoubleClicked(() -> {
|
||||||
close();
|
close();
|
||||||
future.set(list.getSelected().file);
|
future.set(list.getSelected().get(0).file);
|
||||||
});
|
});
|
||||||
acceptButton.onClick(() -> {
|
acceptButton.onClick(() -> {
|
||||||
future.set(list.getSelected().file);
|
future.set(list.getSelected().get(0).file);
|
||||||
close();
|
close();
|
||||||
});
|
});
|
||||||
cancelButton.onClick(() -> {
|
cancelButton.onClick(() -> {
|
||||||
@@ -407,7 +409,17 @@ public class GuiReplayViewer extends GuiScreen {
|
|||||||
load();
|
load();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (filterTextField.typeKey(mousePosition, keyCode, keyChar, ctrlDown, shiftDown)) {
|
boolean filterHasPriority = !filterTextField.getText().isEmpty();
|
||||||
|
if (filterHasPriority && filterTextField.typeKey(mousePosition, keyCode, keyChar, ctrlDown, shiftDown)) {
|
||||||
|
scrollY(0); // ensure we scroll to top if most entries are filtered
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (super.typeKey(mousePosition, keyCode, keyChar, ctrlDown, shiftDown)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!filterHasPriority && filterTextField.typeKey(mousePosition, keyCode, keyChar, ctrlDown, shiftDown)) {
|
||||||
scrollY(0); // ensure we scroll to top if most entries are filtered
|
scrollY(0); // ensure we scroll to top if most entries are filtered
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user