Page & Tab change handler

This commit is contained in:
NichtStudioCode 2022-02-27 21:18:50 +01:00
parent 09cfebd152
commit 22e74bc0b1
6 changed files with 113 additions and 26 deletions

@ -19,7 +19,7 @@ public abstract class PagedGUI extends BaseGUI {
private final boolean infinitePages; private final boolean infinitePages;
private final int[] itemListSlots; private final int[] itemListSlots;
protected int currentPage; private int currentPage;
public PagedGUI(int width, int height, boolean infinitePages, int... itemListSlots) { public PagedGUI(int width, int height, boolean infinitePages, int... itemListSlots) {
super(width, height); super(width, height);
@ -33,17 +33,21 @@ public abstract class PagedGUI extends BaseGUI {
} }
public void goForward() { public void goForward() {
if (hasNextPage()) { if (hasNextPage())
currentPage++; setPage(currentPage + 1);
update();
}
} }
public void goBack() { public void goBack() {
if (hasPageBefore()) { if (hasPageBefore())
currentPage--; setPage(currentPage - 1);
update();
} }
public void setPage(int page) {
int previous = currentPage;
currentPage = page;
update();
if (previous != currentPage)
handlePageChange(previous, currentPage);
} }
public boolean hasNextPage() { public boolean hasNextPage() {
@ -93,4 +97,6 @@ public abstract class PagedGUI extends BaseGUI {
protected abstract List<SlotElement> getPageElements(int page); protected abstract List<SlotElement> getPageElements(int page);
protected abstract void handlePageChange(int previous, int now);
} }

@ -106,8 +106,8 @@ public abstract class ScrollGUI extends BaseGUI {
} }
} }
abstract protected int getMaxLineIndex(); protected abstract int getMaxLineIndex();
abstract protected List<? extends SlotElement> getElements(int from, int to); protected abstract List<? extends SlotElement> getElements(int from, int to);
} }

@ -10,6 +10,7 @@ import org.jetbrains.annotations.Nullable;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.function.BiConsumer;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
@ -21,6 +22,7 @@ import java.util.stream.Collectors;
public class SimplePagedItemsGUI extends PagedGUI { public class SimplePagedItemsGUI extends PagedGUI {
private List<Item> items; private List<Item> items;
private List<BiConsumer<Integer, Integer>> pageChangeHandlers;
public SimplePagedItemsGUI(int width, int height, @Nullable List<Item> items, int... itemListSlots) { public SimplePagedItemsGUI(int width, int height, @Nullable List<Item> items, int... itemListSlots) {
super(width, height, false, itemListSlots); super(width, height, false, itemListSlots);
@ -37,6 +39,29 @@ public class SimplePagedItemsGUI extends PagedGUI {
return (int) Math.ceil((double) items.size() / (double) getItemListSlots().length); return (int) Math.ceil((double) items.size() / (double) getItemListSlots().length);
} }
public void setItems(@Nullable List<Item> items) {
this.items = items != null ? items : new ArrayList<>();
update();
}
public void addPageChangeHandler(@NotNull BiConsumer<Integer, Integer> pageChangeHandler) {
if (pageChangeHandlers == null) pageChangeHandlers = new ArrayList<>();
pageChangeHandlers.add(pageChangeHandler);
}
public void removePageChangeHandler(@NotNull BiConsumer<Integer, Integer> pageChangeHandler) {
if (pageChangeHandlers != null) pageChangeHandlers.remove(pageChangeHandler);
}
@Nullable
public List<BiConsumer<Integer, Integer>> getPageChangeHandlers() {
return pageChangeHandlers;
}
public void setPageChangeHandlers(@Nullable List<BiConsumer<Integer, Integer>> pageChangeHandlers) {
this.pageChangeHandlers = pageChangeHandlers;
}
@Override @Override
protected List<SlotElement> getPageElements(int page) { protected List<SlotElement> getPageElements(int page) {
int length = getItemListSlots().length; int length = getItemListSlots().length;
@ -46,9 +71,9 @@ 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(@Nullable List<Item> items) { @Override
this.items = items != null ? items : new ArrayList<>(); protected void handlePageChange(int previous, int now) {
update(); if (pageChangeHandlers != null) pageChangeHandlers.forEach(handler -> handler.accept(previous, now));
} }
} }

@ -9,6 +9,7 @@ import org.jetbrains.annotations.Nullable;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.function.BiConsumer;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import java.util.stream.IntStream; import java.util.stream.IntStream;
@ -21,6 +22,7 @@ import java.util.stream.IntStream;
public class SimplePagedNestedGUI extends PagedGUI { public class SimplePagedNestedGUI extends PagedGUI {
private List<GUI> guis; private List<GUI> guis;
private List<BiConsumer<Integer, Integer>> pageChangeHandlers;
public SimplePagedNestedGUI(int width, int height, @Nullable List<GUI> guis, int... itemListSlots) { public SimplePagedNestedGUI(int width, int height, @Nullable List<GUI> guis, int... itemListSlots) {
super(width, height, false, itemListSlots); super(width, height, false, itemListSlots);
@ -37,6 +39,34 @@ public class SimplePagedNestedGUI extends PagedGUI {
return guis.size(); return guis.size();
} }
public void setGuis(@Nullable List<GUI> guis) {
this.guis = guis == null ? new ArrayList<>() : guis;
update();
}
public void addPageChangeHandler(@NotNull BiConsumer<Integer, Integer> pageChangeHandler) {
if (pageChangeHandlers == null) pageChangeHandlers = new ArrayList<>();
pageChangeHandlers.add(pageChangeHandler);
}
public void removePageChangeHandler(@NotNull BiConsumer<Integer, Integer> pageChangeHandler) {
if (pageChangeHandlers != null) pageChangeHandlers.remove(pageChangeHandler);
}
@Nullable
public List<BiConsumer<Integer, Integer>> getPageChangeHandlers() {
return pageChangeHandlers;
}
public void setPageChangeHandlers(@Nullable List<BiConsumer<Integer, Integer>> pageChangeHandlers) {
this.pageChangeHandlers = pageChangeHandlers;
}
@Override
protected void handlePageChange(int previous, int now) {
if (pageChangeHandlers != null) pageChangeHandlers.forEach(handler -> handler.accept(previous, now));
}
@Override @Override
protected List<SlotElement> getPageElements(int page) { protected List<SlotElement> getPageElements(int page) {
if (guis.size() <= page) return new ArrayList<>(); if (guis.size() <= page) return new ArrayList<>();
@ -49,9 +79,4 @@ public class SimplePagedNestedGUI extends PagedGUI {
.collect(Collectors.toList()); .collect(Collectors.toList());
} }
public void setGuis(@Nullable List<GUI> guis) {
this.guis = guis == null ? new ArrayList<>() : guis;
update();
}
} }

@ -6,10 +6,12 @@ import de.studiocode.invui.gui.SlotElement.LinkedSlotElement;
import de.studiocode.invui.gui.builder.GUIBuilder; import de.studiocode.invui.gui.builder.GUIBuilder;
import de.studiocode.invui.gui.structure.Structure; import de.studiocode.invui.gui.structure.Structure;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.function.BiConsumer;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
@ -21,6 +23,7 @@ public class SimpleTabGUI extends TabGUI {
private final List<GUI> tabs; private final List<GUI> tabs;
private final List<List<SlotElement>> linkingElements; private final List<List<SlotElement>> linkingElements;
private List<BiConsumer<Integer, Integer>> tabChangeHandlers;
public SimpleTabGUI(int width, int height, @NotNull List<GUI> tabs, int[] listSlots) { public SimpleTabGUI(int width, int height, @NotNull List<GUI> tabs, int[] listSlots) {
super(width, height, tabs.size(), listSlots); super(width, height, tabs.size(), listSlots);
@ -54,14 +57,37 @@ public class SimpleTabGUI extends TabGUI {
return Collections.unmodifiableList(tabs); return Collections.unmodifiableList(tabs);
} }
@Override
public List<SlotElement> getSlotElements(int tab) {
return linkingElements.get(tab);
}
@Override @Override
public boolean isTabAvailable(int tab) { public boolean isTabAvailable(int tab) {
return tabs.get(tab) != null; return tabs.get(tab) != null;
} }
public void addTabChangeHandler(@NotNull BiConsumer<Integer, Integer> tabChangeHandler) {
if (tabChangeHandlers == null) tabChangeHandlers = new ArrayList<>();
tabChangeHandlers.add(tabChangeHandler);
}
public void removeTabChangeHandler(@NotNull BiConsumer<Integer, Integer> tabChangeHandler) {
if (tabChangeHandlers != null) tabChangeHandlers.remove(tabChangeHandler);
}
@Nullable
public List<BiConsumer<Integer, Integer>> getTabChangeHandlers() {
return tabChangeHandlers;
}
public void setTabChangeHandlers(@Nullable List<BiConsumer<Integer, Integer>> tabChangeHandlers) {
this.tabChangeHandlers = tabChangeHandlers;
}
@Override
protected void handleTabChange(int previous, int now) {
if (tabChangeHandlers != null) tabChangeHandlers.forEach(handler -> handler.accept(previous, now));
}
@Override
protected List<SlotElement> getSlotElements(int tab) {
return linkingElements.get(tab);
}
} }

@ -31,8 +31,11 @@ public abstract class TabGUI extends BaseGUI implements Controllable {
if (!isTabAvailable(tab)) if (!isTabAvailable(tab))
return; return;
int previous = currentTab;
currentTab = tab; currentTab = tab;
update(); update();
handleTabChange(previous, currentTab);
} }
protected void update() { protected void update() {
@ -63,8 +66,10 @@ public abstract class TabGUI extends BaseGUI implements Controllable {
return currentTab; return currentTab;
} }
public abstract List<SlotElement> getSlotElements(int tab);
public abstract boolean isTabAvailable(int tab); public abstract boolean isTabAvailable(int tab);
protected abstract List<SlotElement> getSlotElements(int tab);
protected abstract void handleTabChange(int previous, int now);
} }