diff --git a/src/main/java/de/studiocode/invui/gui/GUI.java b/src/main/java/de/studiocode/invui/gui/GUI.java index 24375d8..7fbec12 100644 --- a/src/main/java/de/studiocode/invui/gui/GUI.java +++ b/src/main/java/de/studiocode/invui/gui/GUI.java @@ -2,6 +2,9 @@ package de.studiocode.invui.gui; import de.studiocode.invui.animation.Animation; import de.studiocode.invui.gui.SlotElement.ItemStackHolder; +import de.studiocode.invui.gui.builder.GUIBuilder; +import de.studiocode.invui.gui.builder.PagedGUIBuilder; +import de.studiocode.invui.gui.builder.TabGUIBuilder; import de.studiocode.invui.gui.impl.*; import de.studiocode.invui.item.Item; import de.studiocode.invui.virtualinventory.VirtualInventory; @@ -32,7 +35,11 @@ import java.util.function.Predicate; * @see PagedGUI * @see SimpleGUI * @see SimplePagedItemsGUI - * @see SimplePagedGUIs + * @see SimplePagedGUIsGUI + * @see SimpleTabGUI + * @see GUIBuilder + * @see PagedGUIBuilder + * @see TabGUIBuilder */ public interface GUI extends GUIParent { diff --git a/src/main/java/de/studiocode/invui/gui/builder/PagedGUIBuilder.java b/src/main/java/de/studiocode/invui/gui/builder/PagedGUIBuilder.java index 60cf52f..5b81a56 100644 --- a/src/main/java/de/studiocode/invui/gui/builder/PagedGUIBuilder.java +++ b/src/main/java/de/studiocode/invui/gui/builder/PagedGUIBuilder.java @@ -3,7 +3,7 @@ package de.studiocode.invui.gui.builder; import de.studiocode.invui.gui.GUI; import de.studiocode.invui.gui.SlotElement; import de.studiocode.invui.gui.impl.PagedGUI; -import de.studiocode.invui.gui.impl.SimplePagedGUIs; +import de.studiocode.invui.gui.impl.SimplePagedGUIsGUI; import de.studiocode.invui.gui.impl.SimplePagedItemsGUI; import de.studiocode.invui.item.Item; import de.studiocode.invui.item.itembuilder.ItemBuilder; @@ -45,7 +45,7 @@ public class PagedGUIBuilder extends GUIBuilder { PagedGUI gui; if (contentType == ContentType.GUI) { - gui = new SimplePagedGUIs(width, height, backSlot, backFunction, + gui = new SimplePagedGUIsGUI(width, height, backSlot, backFunction, forwardSlot, forwardFunction, (List) content, listSlots); } else { gui = new SimplePagedItemsGUI(width, height, backSlot, backFunction, diff --git a/src/main/java/de/studiocode/invui/gui/impl/PagedGUI.java b/src/main/java/de/studiocode/invui/gui/impl/PagedGUI.java index b0d5082..8f3aa72 100644 --- a/src/main/java/de/studiocode/invui/gui/impl/PagedGUI.java +++ b/src/main/java/de/studiocode/invui/gui/impl/PagedGUI.java @@ -1,12 +1,21 @@ package de.studiocode.invui.gui.impl; +import de.studiocode.invui.gui.GUI; import de.studiocode.invui.gui.SlotElement; +import de.studiocode.invui.gui.builder.PagedGUIBuilder; import de.studiocode.invui.item.Item; import de.studiocode.invui.item.impl.pagedgui.BackItem; import de.studiocode.invui.item.impl.pagedgui.ForwardItem; import java.util.List; +/** + * A {@link GUI} with pages. + * + * @see PagedGUIBuilder + * @see SimplePagedItemsGUI + * @see SimplePagedGUIsGUI + */ public abstract class PagedGUI extends BaseGUI { private final boolean infinitePages; @@ -49,6 +58,7 @@ public abstract class PagedGUI extends BaseGUI { } protected void update() { + correctPage(); updateControlItems(); updatePageContent(); } @@ -58,19 +68,20 @@ public abstract class PagedGUI extends BaseGUI { forwardItem.notifyWindows(); } - private void updatePageContent() { - if (getCurrentPageIndex() < getPageAmount()) { - List slotElements = getPageItems(currentPage); - - for (int i = 0; i < itemListSlots.length; i++) { - if (slotElements.size() > i) setSlotElement(itemListSlots[i], slotElements.get(i)); - else remove(itemListSlots[i]); - } - } else setCurrentPage(getPageAmount() - 1); + private void correctPage() { + if (currentPage == 0) return; + int pageAmount = getPageAmount(); + if (currentPage < 0) currentPage = 0; + else if (currentPage >= pageAmount) currentPage = pageAmount - 1; } - public int getCurrentPageIndex() { - return currentPage; + private void updatePageContent() { + List slotElements = getPageElements(currentPage); + + for (int i = 0; i < itemListSlots.length; i++) { + if (slotElements.size() > i) setSlotElement(itemListSlots[i], slotElements.get(i)); + else remove(itemListSlots[i]); + } } private void setCurrentPage(int page) { @@ -96,6 +107,6 @@ public abstract class PagedGUI extends BaseGUI { public abstract int getPageAmount(); - protected abstract List getPageItems(int page); + protected abstract List getPageElements(int page); } diff --git a/src/main/java/de/studiocode/invui/gui/impl/SimpleGUI.java b/src/main/java/de/studiocode/invui/gui/impl/SimpleGUI.java index 6c2743d..28a348b 100644 --- a/src/main/java/de/studiocode/invui/gui/impl/SimpleGUI.java +++ b/src/main/java/de/studiocode/invui/gui/impl/SimpleGUI.java @@ -1,5 +1,10 @@ package de.studiocode.invui.gui.impl; +import de.studiocode.invui.gui.GUI; + +/** + * A normal {@link GUI} without any special features. + */ public class SimpleGUI extends BaseGUI { public SimpleGUI(int width, int height) { diff --git a/src/main/java/de/studiocode/invui/gui/impl/SimplePagedGUIs.java b/src/main/java/de/studiocode/invui/gui/impl/SimplePagedGUIsGUI.java similarity index 53% rename from src/main/java/de/studiocode/invui/gui/impl/SimplePagedGUIs.java rename to src/main/java/de/studiocode/invui/gui/impl/SimplePagedGUIsGUI.java index 085a655..7b73614 100644 --- a/src/main/java/de/studiocode/invui/gui/impl/SimplePagedGUIs.java +++ b/src/main/java/de/studiocode/invui/gui/impl/SimplePagedGUIsGUI.java @@ -2,6 +2,7 @@ package de.studiocode.invui.gui.impl; import de.studiocode.invui.gui.GUI; import de.studiocode.invui.gui.SlotElement; +import de.studiocode.invui.gui.builder.PagedGUIBuilder; import de.studiocode.invui.item.impl.pagedgui.BackItem; import de.studiocode.invui.item.impl.pagedgui.ForwardItem; import de.studiocode.invui.item.itembuilder.ItemBuilder; @@ -10,14 +11,20 @@ import java.util.Arrays; import java.util.List; import java.util.function.Function; -public class SimplePagedGUIs extends PagedGUI { +/** + * A {@link PagedGUI} where every page is it's own {@link GUI}. + * + * @see PagedGUIBuilder + * @see SimplePagedItemsGUI + */ +public class SimplePagedGUIsGUI extends PagedGUI { - private final List guis; + private List guis; - public SimplePagedGUIs(int width, int height, - int backItemSlot, Function backFunction, - int forwardItemSlot, Function forwardFunction, - List guis, int... itemListSlots) { + public SimplePagedGUIsGUI(int width, int height, + int backItemSlot, Function backFunction, + int forwardItemSlot, Function forwardFunction, + List guis, int... itemListSlots) { super(width, height, false, itemListSlots); this.guis = guis; @@ -34,8 +41,13 @@ public class SimplePagedGUIs extends PagedGUI { } @Override - protected List getPageItems(int page) { + protected List getPageElements(int page) { return Arrays.asList(guis.get(page).getSlotElements()); } + public void setGuis(List guis) { + this.guis = guis; + update(); + } + } diff --git a/src/main/java/de/studiocode/invui/gui/impl/SimplePagedItemsGUI.java b/src/main/java/de/studiocode/invui/gui/impl/SimplePagedItemsGUI.java index 51d6a64..910e0c4 100644 --- a/src/main/java/de/studiocode/invui/gui/impl/SimplePagedItemsGUI.java +++ b/src/main/java/de/studiocode/invui/gui/impl/SimplePagedItemsGUI.java @@ -2,6 +2,7 @@ package de.studiocode.invui.gui.impl; import de.studiocode.invui.gui.SlotElement; import de.studiocode.invui.gui.SlotElement.ItemSlotElement; +import de.studiocode.invui.gui.builder.PagedGUIBuilder; import de.studiocode.invui.item.Item; import de.studiocode.invui.item.impl.pagedgui.BackItem; import de.studiocode.invui.item.impl.pagedgui.ForwardItem; @@ -11,9 +12,15 @@ import java.util.List; import java.util.function.Function; import java.util.stream.Collectors; +/** + * A {@link PagedGUI} that is filled with {@link Item}s. + * + * @see PagedGUIBuilder + * @see SimplePagedGUIsGUI + */ public class SimplePagedItemsGUI extends PagedGUI { - private final List items; + private List items; public SimplePagedItemsGUI(int width, int height, int backItemSlot, Function backFunction, @@ -34,7 +41,7 @@ public class SimplePagedItemsGUI extends PagedGUI { } @Override - protected List getPageItems(int page) { + protected List getPageElements(int page) { int length = getItemListSlots().length; int from = page * length; int to = Math.min(from + length, items.size()); @@ -42,4 +49,8 @@ public class SimplePagedItemsGUI extends PagedGUI { return items.subList(from, to).stream().map(ItemSlotElement::new).collect(Collectors.toList()); } + public void setItems(List items) { + this.items = items; + update(); + } } diff --git a/src/main/java/de/studiocode/invui/gui/impl/SimpleTabGUI.java b/src/main/java/de/studiocode/invui/gui/impl/SimpleTabGUI.java index 3af5797..a69198d 100644 --- a/src/main/java/de/studiocode/invui/gui/impl/SimpleTabGUI.java +++ b/src/main/java/de/studiocode/invui/gui/impl/SimpleTabGUI.java @@ -2,6 +2,7 @@ package de.studiocode.invui.gui.impl; import de.studiocode.invui.gui.GUI; import de.studiocode.invui.gui.SlotElement; +import de.studiocode.invui.gui.builder.TabGUIBuilder; import de.studiocode.invui.item.impl.tabgui.TabItem; import de.studiocode.invui.item.itembuilder.ItemBuilder; @@ -11,6 +12,11 @@ import java.util.LinkedHashMap; import java.util.List; import java.util.function.Function; +/** + * A {@link GUI} that has multiple tabs with which users can switch between {@link GUI}s. + * + * @see TabGUIBuilder + */ public class SimpleTabGUI extends TabGUI { private final List tabs;