From d8a3df1f024910d53b9133fcaddb5698fa1f7786 Mon Sep 17 00:00:00 2001 From: johni0702 Date: Sun, 11 Oct 2015 11:10:34 +0200 Subject: [PATCH] Allow sorting of children of a GuiContainer --- .../gui/container/AbstractGuiContainer.java | 40 +++++++++++++++++-- .../minecraft/gui/container/GuiContainer.java | 3 ++ 2 files changed, 39 insertions(+), 4 deletions(-) diff --git a/src/main/java/de/johni0702/minecraft/gui/container/AbstractGuiContainer.java b/src/main/java/de/johni0702/minecraft/gui/container/AbstractGuiContainer.java index d20d3578..a5862fe0 100644 --- a/src/main/java/de/johni0702/minecraft/gui/container/AbstractGuiContainer.java +++ b/src/main/java/de/johni0702/minecraft/gui/container/AbstractGuiContainer.java @@ -22,6 +22,8 @@ package de.johni0702.minecraft.gui.container; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.Ordering; import de.johni0702.minecraft.gui.GuiRenderer; import de.johni0702.minecraft.gui.OffsetGuiRenderer; import de.johni0702.minecraft.gui.RenderInfo; @@ -40,10 +42,7 @@ import org.lwjgl.util.ReadableColor; import org.lwjgl.util.ReadableDimension; import org.lwjgl.util.ReadablePoint; -import java.util.Collection; -import java.util.Collections; -import java.util.LinkedHashMap; -import java.util.Map; +import java.util.*; import java.util.concurrent.Callable; import static com.google.common.base.Preconditions.checkState; @@ -219,6 +218,39 @@ public abstract class AbstractGuiContainer> return layout.calcMinSize(this); } + @Override + public T sortElements() { + sortElements(new Comparator() { + @SuppressWarnings("unchecked") + @Override + public int compare(GuiElement o1, GuiElement o2) { + if (o1 instanceof Comparable && o2 instanceof Comparable) { + return ((Comparable) o1).compareTo(o2); + } + return o1.hashCode() - o2.hashCode(); + } + }); + return getThis(); + } + + @Override + public T sortElements(final Comparator comparator) { + Ordering> ordering = new Ordering>() { + @Override + public int compare(Map.Entry left, Map.Entry right) { + return comparator.compare(left.getKey(), right.getKey()); + } + }; + if (!ordering.isOrdered(elements.entrySet())) { + ImmutableList> sorted = ordering.immutableSortedCopy(elements.entrySet()); + elements.clear(); + for (Map.Entry entry : sorted) { + elements.put(entry.getKey(), entry.getValue()); + } + } + return getThis(); + } + @Override public ReadableColor getBackgroundColor() { return backgroundColor; diff --git a/src/main/java/de/johni0702/minecraft/gui/container/GuiContainer.java b/src/main/java/de/johni0702/minecraft/gui/container/GuiContainer.java index afc442da..4e1e444c 100644 --- a/src/main/java/de/johni0702/minecraft/gui/container/GuiContainer.java +++ b/src/main/java/de/johni0702/minecraft/gui/container/GuiContainer.java @@ -29,6 +29,7 @@ import de.johni0702.minecraft.gui.layout.LayoutData; import org.lwjgl.util.Point; import org.lwjgl.util.ReadableColor; +import java.util.Comparator; import java.util.Map; public interface GuiContainer> extends ComposedGuiElement { @@ -41,6 +42,8 @@ public interface GuiContainer> extends ComposedGuiElem Map getElements(); T addElements(LayoutData layoutData, GuiElement...elements); T removeElement(GuiElement element); + T sortElements(); + T sortElements(Comparator comparator); ReadableColor getBackgroundColor(); T setBackgroundColor(ReadableColor backgroundColor);