From bde5967ef48ddef721c7a440a8d35b4803ac7f71 Mon Sep 17 00:00:00 2001 From: drdev Date: Sun, 3 Nov 2013 17:47:57 +0000 Subject: [PATCH] Remember column order in Deck Editor --- .../toolbox/itemmanager/SItemManagerIO.java | 8 ++++- .../toolbox/itemmanager/table/ItemTable.java | 10 ++++++ .../itemmanager/table/TableColumnInfo.java | 25 +++++++++++++-- src/main/java/forge/util/TypeUtil.java | 31 +++++++++++++++++++ 4 files changed, 70 insertions(+), 4 deletions(-) diff --git a/src/main/java/forge/gui/toolbox/itemmanager/SItemManagerIO.java b/src/main/java/forge/gui/toolbox/itemmanager/SItemManagerIO.java index 456252726e9..1850f8391c4 100644 --- a/src/main/java/forge/gui/toolbox/itemmanager/SItemManagerIO.java +++ b/src/main/java/forge/gui/toolbox/itemmanager/SItemManagerIO.java @@ -7,7 +7,6 @@ import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.TreeMap; - import javax.swing.JTable; import javax.xml.stream.XMLEventFactory; import javax.xml.stream.XMLEventReader; @@ -37,6 +36,7 @@ public class SItemManagerIO { enumval, /** */ identifier, /** */ show, /** */ + index, /** */ sortpriority, /** */ sortstate, /** */ width @@ -135,6 +135,7 @@ public class SItemManagerIO { if (index == -1) { index = COLS.get(c).getModelIndex(); } + COLS.get(c).setIndex(index); //update index property of column writer.add(TAB); writer.add(EVENT_FACTORY.createStartElement("", "", "col")); @@ -144,6 +145,8 @@ public class SItemManagerIO { ColumnProperty.identifier.toString(), COLS.get(c).getIdentifier().toString())); writer.add(EVENT_FACTORY.createAttribute( ColumnProperty.show.toString(), String.valueOf(COLS.get(c).isShowing()))); + writer.add(EVENT_FACTORY.createAttribute( + ColumnProperty.index.toString(), String.valueOf(index))); writer.add(EVENT_FACTORY.createAttribute( ColumnProperty.sortpriority.toString(), String.valueOf(COLS.get(c).getSortPriority()))); writer.add(EVENT_FACTORY.createAttribute( @@ -228,6 +231,9 @@ public class SItemManagerIO { else if (attribute.getName().toString().equals(ColumnProperty.show.toString())) { tempcol.setShowing(Boolean.valueOf(attribute.getValue())); } + else if (attribute.getName().toString().equals(ColumnProperty.index.toString())) { + tempcol.setIndex(Integer.valueOf(attribute.getValue())); + } else if (attribute.getName().toString().equals(ColumnProperty.sortpriority.toString())) { tempcol.setSortPriority(Integer.valueOf(attribute.getValue())); } diff --git a/src/main/java/forge/gui/toolbox/itemmanager/table/ItemTable.java b/src/main/java/forge/gui/toolbox/itemmanager/table/ItemTable.java index 08dad88eedd..dabafb3769b 100644 --- a/src/main/java/forge/gui/toolbox/itemmanager/table/ItemTable.java +++ b/src/main/java/forge/gui/toolbox/itemmanager/table/ItemTable.java @@ -26,6 +26,8 @@ import java.awt.event.FocusEvent; import java.awt.event.FocusListener; import java.awt.event.MouseEvent; import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; import java.util.List; import javax.swing.JComponent; @@ -118,6 +120,14 @@ public final class ItemTable extends JTable { */ public void setup(final List> cols) { final DefaultTableColumnModel colmodel = new DefaultTableColumnModel(); + + //ensure columns ordered properly + Collections.sort(cols, new Comparator>() { + @Override + public int compare(TableColumnInfo arg0, TableColumnInfo arg1) { + return Integer.compare(arg0.getIndex(), arg1.getIndex()); + } + }); for (TableColumnInfo item : cols) { item.setModelIndex(colmodel.getColumnCount()); diff --git a/src/main/java/forge/gui/toolbox/itemmanager/table/TableColumnInfo.java b/src/main/java/forge/gui/toolbox/itemmanager/table/TableColumnInfo.java index 80ff753b142..711c74393f1 100644 --- a/src/main/java/forge/gui/toolbox/itemmanager/table/TableColumnInfo.java +++ b/src/main/java/forge/gui/toolbox/itemmanager/table/TableColumnInfo.java @@ -39,6 +39,7 @@ public class TableColumnInfo extends TableColumn { private int sortPriority = 0; private boolean show = true; private String enumval; + private int index = 0; private Function, Comparable> fnSort; private Function, Object> fnDisplay; @@ -65,6 +66,24 @@ public class TableColumnInfo extends TableColumn { public void setEnumValue(final String val0) { this.enumval = val0; } + + /** + * Index within table columns + * + * @return int + */ + public int getIndex() { + return this.index; + } + + /** + * Index within table columns + * + * @param index0   int + */ + public void setIndex(final int index0) { + this.index = index0; + } /** * Position in sort cascade, 0 for no priority. @@ -78,10 +97,10 @@ public class TableColumnInfo extends TableColumn { /** * Position in sort cascade, 0 for no priority. * - * @param position0   int + * @param sortPriority0   int */ - public void setSortPriority(final int position0) { - this.sortPriority = position0; + public void setSortPriority(final int sortPriority0) { + this.sortPriority = sortPriority0; } /** @return {@link forge.gui.toolbox.itemmanager.ItemTableModel.SortState} */ diff --git a/src/main/java/forge/util/TypeUtil.java b/src/main/java/forge/util/TypeUtil.java index e969d5c3cd4..daa9c83a710 100644 --- a/src/main/java/forge/util/TypeUtil.java +++ b/src/main/java/forge/util/TypeUtil.java @@ -3,6 +3,13 @@ package forge.util; import java.awt.Component; import java.awt.Container; import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.LinkedHashMap; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; public class TypeUtil { @@ -44,4 +51,28 @@ public class TypeUtil { } } } + + public static > Map sortMap(Map unsortedMap, final boolean ascending){ + List> list = new LinkedList>(unsortedMap.entrySet()); + + //sort the list based on values + Collections.sort(list, new Comparator>() { + public int compare(Entry o1, Entry o2) { + if (ascending) { + return o1.getValue().compareTo(o2.getValue()); + } + else { + return o2.getValue().compareTo(o1.getValue()); + } + } + }); + + //maintain insertion order with the help of LinkedList + Map sortedMap = new LinkedHashMap(); + for (Entry entry : list) { + sortedMap.put(entry.getKey(), entry.getValue()); + } + + return sortedMap; + } }