From 139553c15b55d3fc19057cf99cc82d7c5d7e4c63 Mon Sep 17 00:00:00 2001 From: johni0702 Date: Tue, 18 Aug 2015 13:42:03 +0200 Subject: [PATCH] Sort assets by name in AssetManager and ObjectManager --- .../replaymod/assets/ReplayAsset.java | 1 + .../replaymod/assets/ReplayImageAsset.java | 5 ++++ .../replaymod/gui/GuiAssetManager.java | 23 ++++++++++++++++++- .../replaymod/gui/GuiObjectManager.java | 13 +++++++++-- .../replaymod/gui/elements/GuiEntryList.java | 3 +++ 5 files changed, 42 insertions(+), 3 deletions(-) diff --git a/src/main/java/eu/crushedpixel/replaymod/assets/ReplayAsset.java b/src/main/java/eu/crushedpixel/replaymod/assets/ReplayAsset.java index 6bce2f33..7ec2ed91 100644 --- a/src/main/java/eu/crushedpixel/replaymod/assets/ReplayAsset.java +++ b/src/main/java/eu/crushedpixel/replaymod/assets/ReplayAsset.java @@ -15,6 +15,7 @@ public interface ReplayAsset extends GuiEntryListEntry { void drawToScreen(int x, int y, int maxWidth, int maxHeight); + String getAssetName(); void setAssetName(String name); ReplayAsset copy(); diff --git a/src/main/java/eu/crushedpixel/replaymod/assets/ReplayImageAsset.java b/src/main/java/eu/crushedpixel/replaymod/assets/ReplayImageAsset.java index 9ae04d1a..8e08c07d 100644 --- a/src/main/java/eu/crushedpixel/replaymod/assets/ReplayImageAsset.java +++ b/src/main/java/eu/crushedpixel/replaymod/assets/ReplayImageAsset.java @@ -40,6 +40,11 @@ public class ReplayImageAsset implements ReplayAsset { this.name = name; } + @Override + public String getAssetName() { + return name; + } + @Override public void setAssetName(String name) { this.name = name; diff --git a/src/main/java/eu/crushedpixel/replaymod/gui/GuiAssetManager.java b/src/main/java/eu/crushedpixel/replaymod/gui/GuiAssetManager.java index bf661c0d..2836509b 100644 --- a/src/main/java/eu/crushedpixel/replaymod/gui/GuiAssetManager.java +++ b/src/main/java/eu/crushedpixel/replaymod/gui/GuiAssetManager.java @@ -18,6 +18,9 @@ import java.awt.*; import java.io.File; import java.io.FileInputStream; import java.io.IOException; +import java.util.Collections; +import java.util.Comparator; +import java.util.List; public class GuiAssetManager extends GuiScreen implements GuiReplayOverlay.NoOverlay { @@ -63,6 +66,7 @@ public class GuiAssetManager extends GuiScreen implements GuiReplayOverlay.NoOve try { ReplayAsset newAsset = assetRepository.addAsset(file.getName(), new FileInputStream(file)); assetGuiEntryList.addElement(newAsset); + sortAssetList(); } catch(Exception e) { e.printStackTrace(); } @@ -109,7 +113,11 @@ public class GuiAssetManager extends GuiScreen implements GuiReplayOverlay.NoOve assetGuiEntryList.addSelectionListener(new SelectionListener() { @Override public void onSelectionChanged(int selectionIndex) { - currentAsset = assetGuiEntryList.getElement(selectionIndex); + ReplayAsset newAsset = assetGuiEntryList.getElement(selectionIndex); + if (newAsset == currentAsset) { + return; + } + currentAsset = newAsset; inputElements.setElementEnabled(currentAsset != null); assetNameInput.setText(currentAsset != null ? currentAsset.getDisplayString() : ""); @@ -121,6 +129,7 @@ public class GuiAssetManager extends GuiScreen implements GuiReplayOverlay.NoOve for(ReplayAsset asset : assetRepository.getCopyOfReplayAssets()) { assetGuiEntryList.addElement(asset); } + sortAssetList(); } int visibleEntries = (int)Math.floor(((double)this.height-(45+20+15+20))/14); @@ -179,6 +188,7 @@ public class GuiAssetManager extends GuiScreen implements GuiReplayOverlay.NoOve if(currentAsset != null) { currentAsset.setAssetName(assetNameInput.getText()); + sortAssetList(); } super.keyTyped(typedChar, keyCode); @@ -199,4 +209,15 @@ public class GuiAssetManager extends GuiScreen implements GuiReplayOverlay.NoOve } }, "replaymod-asset-saver").start(); } + + private void sortAssetList() { + List list = assetGuiEntryList.getElements(); + Collections.sort(list, new Comparator() { + @Override + public int compare(ReplayAsset o1, ReplayAsset o2) { + return o1.getAssetName().compareTo(o2.getAssetName()); + } + }); + assetGuiEntryList.setSelectionIndex(list.indexOf(currentAsset)); + } } diff --git a/src/main/java/eu/crushedpixel/replaymod/gui/GuiObjectManager.java b/src/main/java/eu/crushedpixel/replaymod/gui/GuiObjectManager.java index fb6ab952..60c05d29 100644 --- a/src/main/java/eu/crushedpixel/replaymod/gui/GuiObjectManager.java +++ b/src/main/java/eu/crushedpixel/replaymod/gui/GuiObjectManager.java @@ -23,6 +23,8 @@ import org.lwjgl.util.Point; import java.awt.*; import java.io.IOException; +import java.util.Collections; +import java.util.Comparator; import java.util.List; import java.util.UUID; @@ -129,11 +131,18 @@ public class GuiObjectManager extends GuiScreen implements GuiReplayOverlay.NoOv dropdownLabel = new GuiString(0, 0, Color.WHITE, I18n.format("replaymod.gui.assets.filechooser")+": "); assetDropdown = new GuiDropdown>(fontRendererObj, 0, 0, 0, 5); - if(ReplayHandler.getAssetRepository().getCopyOfReplayAssets().isEmpty()) { + List assets = ReplayHandler.getAssetRepository().getCopyOfReplayAssets(); + Collections.sort(assets, new Comparator() { + @Override + public int compare(ReplayAsset o1, ReplayAsset o2) { + return o1.getAssetName().compareTo(o2.getAssetName()); + } + }); + if(assets.isEmpty()) { assetDropdown.addElement(new GuiEntryListValueEntry(I18n.format("replaymod.gui.assets.emptylist"), null)); } else { assetDropdown.addElement(new GuiEntryListValueEntry(I18n.format("replaymod.gui.assets.noselection"), null)); - for(ReplayAsset asset : ReplayHandler.getAssetRepository().getCopyOfReplayAssets()) { + for(ReplayAsset asset : assets) { assetDropdown.addElement(new GuiEntryListValueEntry( asset.getDisplayString(), ReplayHandler.getAssetRepository().getUUIDForAsset(asset))); } diff --git a/src/main/java/eu/crushedpixel/replaymod/gui/elements/GuiEntryList.java b/src/main/java/eu/crushedpixel/replaymod/gui/elements/GuiEntryList.java index fa2de206..1ce7a515 100755 --- a/src/main/java/eu/crushedpixel/replaymod/gui/elements/GuiEntryList.java +++ b/src/main/java/eu/crushedpixel/replaymod/gui/elements/GuiEntryList.java @@ -153,6 +153,9 @@ public class GuiEntryList extends GuiAdvancedTextFi public List getCopyOfElements() { return new ArrayList(elements); } + public List getElements() { + return elements; + } public void replaceElement(int index, T replace) { elements.set(index, replace);