From 2dc464486d7541aca51688fbc2624613dcddd3c1 Mon Sep 17 00:00:00 2001 From: NichtStudioCode <51272202+NichtStudioCode@users.noreply.github.com> Date: Thu, 5 Aug 2021 16:53:21 +0200 Subject: [PATCH] Fixed TabGUI not working with nested GUIs --- .../invui/gui/impl/SimpleTabGUI.java | 23 +++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/InvUI/src/main/java/de/studiocode/invui/gui/impl/SimpleTabGUI.java b/InvUI/src/main/java/de/studiocode/invui/gui/impl/SimpleTabGUI.java index 75ae857..7d852ee 100644 --- a/InvUI/src/main/java/de/studiocode/invui/gui/impl/SimpleTabGUI.java +++ b/InvUI/src/main/java/de/studiocode/invui/gui/impl/SimpleTabGUI.java @@ -2,12 +2,14 @@ package de.studiocode.invui.gui.impl; import de.studiocode.invui.gui.GUI; import de.studiocode.invui.gui.SlotElement; +import de.studiocode.invui.gui.SlotElement.LinkedSlotElement; import de.studiocode.invui.gui.builder.GUIBuilder; import de.studiocode.invui.gui.structure.Structure; import org.jetbrains.annotations.NotNull; -import java.util.Arrays; +import java.util.ArrayList; import java.util.List; +import java.util.stream.Collectors; /** * A {@link GUI} that has multiple tabs with which users can switch between {@link GUI}s. @@ -17,9 +19,11 @@ import java.util.List; public class SimpleTabGUI extends TabGUI { private final List tabs; + private final List> linkingElements; public SimpleTabGUI(int width, int height, @NotNull List tabs, int[] listSlots) { super(width, height, tabs.size(), listSlots); + this.linkingElements = tabs.stream().map(this::getLinkingElements).collect(Collectors.toList()); this.tabs = tabs; update(); @@ -27,14 +31,29 @@ public class SimpleTabGUI extends TabGUI { public SimpleTabGUI(int width, int height, @NotNull List tabs, @NotNull Structure structure) { super(width, height, tabs.size(), structure); + this.linkingElements = tabs.stream().map(this::getLinkingElements).collect(Collectors.toList()); this.tabs = tabs; update(); } + private List getLinkingElements(GUI gui) { + List elements = new ArrayList<>(); + for (int slot = 0; slot < gui.getSize(); slot++) { + SlotElement link = new LinkedSlotElement(gui, slot); + elements.add(link); + } + + return elements; + } + + public List getTabs() { + return tabs; + } + @Override public List getSlotElements(int tab) { - return Arrays.asList(tabs.get(tab).getSlotElements()); + return linkingElements.get(tab); } }