Javadoc & Changeable elements in PagedGUI implementations

This commit is contained in:
NichtStudioCode 2021-02-05 11:09:04 +01:00
parent 612d21ca8b
commit c7dc050845
7 changed files with 76 additions and 24 deletions

@ -2,6 +2,9 @@ package de.studiocode.invui.gui;
import de.studiocode.invui.animation.Animation; import de.studiocode.invui.animation.Animation;
import de.studiocode.invui.gui.SlotElement.ItemStackHolder; 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.gui.impl.*;
import de.studiocode.invui.item.Item; import de.studiocode.invui.item.Item;
import de.studiocode.invui.virtualinventory.VirtualInventory; import de.studiocode.invui.virtualinventory.VirtualInventory;
@ -32,7 +35,11 @@ import java.util.function.Predicate;
* @see PagedGUI * @see PagedGUI
* @see SimpleGUI * @see SimpleGUI
* @see SimplePagedItemsGUI * @see SimplePagedItemsGUI
* @see SimplePagedGUIs * @see SimplePagedGUIsGUI
* @see SimpleTabGUI
* @see GUIBuilder
* @see PagedGUIBuilder
* @see TabGUIBuilder
*/ */
public interface GUI extends GUIParent { public interface GUI extends GUIParent {

@ -3,7 +3,7 @@ package de.studiocode.invui.gui.builder;
import de.studiocode.invui.gui.GUI; import de.studiocode.invui.gui.GUI;
import de.studiocode.invui.gui.SlotElement; import de.studiocode.invui.gui.SlotElement;
import de.studiocode.invui.gui.impl.PagedGUI; 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.gui.impl.SimplePagedItemsGUI;
import de.studiocode.invui.item.Item; import de.studiocode.invui.item.Item;
import de.studiocode.invui.item.itembuilder.ItemBuilder; import de.studiocode.invui.item.itembuilder.ItemBuilder;
@ -45,7 +45,7 @@ public class PagedGUIBuilder extends GUIBuilder {
PagedGUI gui; PagedGUI gui;
if (contentType == ContentType.GUI) { if (contentType == ContentType.GUI) {
gui = new SimplePagedGUIs(width, height, backSlot, backFunction, gui = new SimplePagedGUIsGUI(width, height, backSlot, backFunction,
forwardSlot, forwardFunction, (List<GUI>) content, listSlots); forwardSlot, forwardFunction, (List<GUI>) content, listSlots);
} else { } else {
gui = new SimplePagedItemsGUI(width, height, backSlot, backFunction, gui = new SimplePagedItemsGUI(width, height, backSlot, backFunction,

@ -1,12 +1,21 @@
package de.studiocode.invui.gui.impl; package de.studiocode.invui.gui.impl;
import de.studiocode.invui.gui.GUI;
import de.studiocode.invui.gui.SlotElement; import de.studiocode.invui.gui.SlotElement;
import de.studiocode.invui.gui.builder.PagedGUIBuilder;
import de.studiocode.invui.item.Item; import de.studiocode.invui.item.Item;
import de.studiocode.invui.item.impl.pagedgui.BackItem; import de.studiocode.invui.item.impl.pagedgui.BackItem;
import de.studiocode.invui.item.impl.pagedgui.ForwardItem; import de.studiocode.invui.item.impl.pagedgui.ForwardItem;
import java.util.List; import java.util.List;
/**
* A {@link GUI} with pages.
*
* @see PagedGUIBuilder
* @see SimplePagedItemsGUI
* @see SimplePagedGUIsGUI
*/
public abstract class PagedGUI extends BaseGUI { public abstract class PagedGUI extends BaseGUI {
private final boolean infinitePages; private final boolean infinitePages;
@ -49,6 +58,7 @@ public abstract class PagedGUI extends BaseGUI {
} }
protected void update() { protected void update() {
correctPage();
updateControlItems(); updateControlItems();
updatePageContent(); updatePageContent();
} }
@ -58,19 +68,20 @@ public abstract class PagedGUI extends BaseGUI {
forwardItem.notifyWindows(); forwardItem.notifyWindows();
} }
private void correctPage() {
if (currentPage == 0) return;
int pageAmount = getPageAmount();
if (currentPage < 0) currentPage = 0;
else if (currentPage >= pageAmount) currentPage = pageAmount - 1;
}
private void updatePageContent() { private void updatePageContent() {
if (getCurrentPageIndex() < getPageAmount()) { List<SlotElement> slotElements = getPageElements(currentPage);
List<SlotElement> slotElements = getPageItems(currentPage);
for (int i = 0; i < itemListSlots.length; i++) { for (int i = 0; i < itemListSlots.length; i++) {
if (slotElements.size() > i) setSlotElement(itemListSlots[i], slotElements.get(i)); if (slotElements.size() > i) setSlotElement(itemListSlots[i], slotElements.get(i));
else remove(itemListSlots[i]); else remove(itemListSlots[i]);
} }
} else setCurrentPage(getPageAmount() - 1);
}
public int getCurrentPageIndex() {
return currentPage;
} }
private void setCurrentPage(int page) { private void setCurrentPage(int page) {
@ -96,6 +107,6 @@ public abstract class PagedGUI extends BaseGUI {
public abstract int getPageAmount(); public abstract int getPageAmount();
protected abstract List<SlotElement> getPageItems(int page); protected abstract List<SlotElement> getPageElements(int page);
} }

@ -1,5 +1,10 @@
package de.studiocode.invui.gui.impl; 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 class SimpleGUI extends BaseGUI {
public SimpleGUI(int width, int height) { public SimpleGUI(int width, int height) {

@ -2,6 +2,7 @@ package de.studiocode.invui.gui.impl;
import de.studiocode.invui.gui.GUI; import de.studiocode.invui.gui.GUI;
import de.studiocode.invui.gui.SlotElement; 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.BackItem;
import de.studiocode.invui.item.impl.pagedgui.ForwardItem; import de.studiocode.invui.item.impl.pagedgui.ForwardItem;
import de.studiocode.invui.item.itembuilder.ItemBuilder; import de.studiocode.invui.item.itembuilder.ItemBuilder;
@ -10,11 +11,17 @@ import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.function.Function; 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<GUI> guis; private List<GUI> guis;
public SimplePagedGUIs(int width, int height, public SimplePagedGUIsGUI(int width, int height,
int backItemSlot, Function<PagedGUI, ItemBuilder> backFunction, int backItemSlot, Function<PagedGUI, ItemBuilder> backFunction,
int forwardItemSlot, Function<PagedGUI, ItemBuilder> forwardFunction, int forwardItemSlot, Function<PagedGUI, ItemBuilder> forwardFunction,
List<GUI> guis, int... itemListSlots) { List<GUI> guis, int... itemListSlots) {
@ -34,8 +41,13 @@ public class SimplePagedGUIs extends PagedGUI {
} }
@Override @Override
protected List<SlotElement> getPageItems(int page) { protected List<SlotElement> getPageElements(int page) {
return Arrays.asList(guis.get(page).getSlotElements()); return Arrays.asList(guis.get(page).getSlotElements());
} }
public void setGuis(List<GUI> guis) {
this.guis = guis;
update();
}
} }

@ -2,6 +2,7 @@ package de.studiocode.invui.gui.impl;
import de.studiocode.invui.gui.SlotElement; import de.studiocode.invui.gui.SlotElement;
import de.studiocode.invui.gui.SlotElement.ItemSlotElement; 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.Item;
import de.studiocode.invui.item.impl.pagedgui.BackItem; import de.studiocode.invui.item.impl.pagedgui.BackItem;
import de.studiocode.invui.item.impl.pagedgui.ForwardItem; import de.studiocode.invui.item.impl.pagedgui.ForwardItem;
@ -11,9 +12,15 @@ import java.util.List;
import java.util.function.Function; import java.util.function.Function;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/**
* A {@link PagedGUI} that is filled with {@link Item}s.
*
* @see PagedGUIBuilder
* @see SimplePagedGUIsGUI
*/
public class SimplePagedItemsGUI extends PagedGUI { public class SimplePagedItemsGUI extends PagedGUI {
private final List<Item> items; private List<Item> items;
public SimplePagedItemsGUI(int width, int height, public SimplePagedItemsGUI(int width, int height,
int backItemSlot, Function<PagedGUI, ItemBuilder> backFunction, int backItemSlot, Function<PagedGUI, ItemBuilder> backFunction,
@ -34,7 +41,7 @@ public class SimplePagedItemsGUI extends PagedGUI {
} }
@Override @Override
protected List<SlotElement> getPageItems(int page) { protected List<SlotElement> getPageElements(int page) {
int length = getItemListSlots().length; int length = getItemListSlots().length;
int from = page * length; int from = page * length;
int to = Math.min(from + length, items.size()); 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()); return items.subList(from, to).stream().map(ItemSlotElement::new).collect(Collectors.toList());
} }
public void setItems(List<Item> items) {
this.items = items;
update();
}
} }

@ -2,6 +2,7 @@ package de.studiocode.invui.gui.impl;
import de.studiocode.invui.gui.GUI; import de.studiocode.invui.gui.GUI;
import de.studiocode.invui.gui.SlotElement; 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.impl.tabgui.TabItem;
import de.studiocode.invui.item.itembuilder.ItemBuilder; import de.studiocode.invui.item.itembuilder.ItemBuilder;
@ -11,6 +12,11 @@ import java.util.LinkedHashMap;
import java.util.List; import java.util.List;
import java.util.function.Function; 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 { public class SimpleTabGUI extends TabGUI {
private final List<GUI> tabs; private final List<GUI> tabs;