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 7d852ee..1602966 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 @@ -8,6 +8,7 @@ import de.studiocode.invui.gui.structure.Structure; import org.jetbrains.annotations.NotNull; import java.util.ArrayList; +import java.util.Collections; import java.util.List; import java.util.stream.Collectors; @@ -38,6 +39,8 @@ public class SimpleTabGUI extends TabGUI { } private List getLinkingElements(GUI gui) { + if (gui == null) return null; + List elements = new ArrayList<>(); for (int slot = 0; slot < gui.getSize(); slot++) { SlotElement link = new LinkedSlotElement(gui, slot); @@ -48,7 +51,7 @@ public class SimpleTabGUI extends TabGUI { } public List getTabs() { - return tabs; + return Collections.unmodifiableList(tabs); } @Override @@ -56,4 +59,9 @@ public class SimpleTabGUI extends TabGUI { return linkingElements.get(tab); } + @Override + public boolean isTabAvailable(int tab) { + return tabs.get(tab) != null; + } + } diff --git a/InvUI/src/main/java/de/studiocode/invui/gui/impl/TabGUI.java b/InvUI/src/main/java/de/studiocode/invui/gui/impl/TabGUI.java index b6668c9..808c124 100644 --- a/InvUI/src/main/java/de/studiocode/invui/gui/impl/TabGUI.java +++ b/InvUI/src/main/java/de/studiocode/invui/gui/impl/TabGUI.java @@ -12,7 +12,7 @@ public abstract class TabGUI extends BaseGUI implements Controllable { private final int tabAmount; private final int[] listSlots; - private int currentTab; + private int currentTab = -1; public TabGUI(int width, int height, int tabAmount, int... listSlots) { super(width, height); @@ -28,12 +28,16 @@ public abstract class TabGUI extends BaseGUI implements Controllable { public void showTab(int tab) { if (tab < 0 || tab >= tabAmount) throw new IllegalArgumentException("Tab out of bounds"); + if (!isTabAvailable(tab)) + return; currentTab = tab; update(); } protected void update() { + if (currentTab == -1) currentTab = getFirstAvailableTab(); + updateControlItems(); updateContent(); } @@ -47,10 +51,20 @@ public abstract class TabGUI extends BaseGUI implements Controllable { } } + public int getFirstAvailableTab() { + for (int tab = 0; tab < tabAmount; tab++) { + if (isTabAvailable(tab)) return tab; + } + + throw new UnsupportedOperationException("At least one tab needs to be available"); + } + public int getCurrentTab() { return currentTab; } public abstract List getSlotElements(int tab); + public abstract boolean isTabAvailable(int tab); + }