diff --git a/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/views/ColumnDef.java b/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/views/ColumnDef.java index a4cfc3f4500..827158a2aab 100644 --- a/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/views/ColumnDef.java +++ b/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/views/ColumnDef.java @@ -19,6 +19,7 @@ package forge.gui.toolbox.itemmanager.views; import com.google.common.base.Function; import com.google.common.collect.Iterables; + import forge.Singletons; import forge.card.*; import forge.deck.io.DeckPreferences; @@ -32,8 +33,10 @@ import forge.item.InventoryItem; import forge.item.InventoryItemFromSet; import forge.item.PaperCard; import forge.limited.DraftRankCache; + import org.apache.commons.lang3.StringUtils; +import java.math.BigDecimal; import java.util.Map.Entry; import java.util.regex.Pattern; @@ -194,17 +197,17 @@ public enum ColumnDef { : (ai.getRemRandomDecks() ? "?" : ""); } }), - RANKING("Ranking", "Ranking", 30, true, SortState.ASC, new ItemCellRenderer(), + RANKING("Ranking", "Ranking", 50, true, SortState.ASC, new ItemCellRenderer(), new Function, Comparable>() { @Override public Comparable apply(final Entry from) { - return toRanking(from.getKey()); + return toRanking(from.getKey(), false); } }, new Function, Object>() { @Override public Object apply(final Entry from) { - return String.valueOf(toRanking(from.getKey())); + return toRanking(from.getKey(), true); } }), QUANTITY("Qty", "Quantity", 25, true, SortState.ASC, new ItemCellRenderer(), @@ -275,7 +278,7 @@ public enum ColumnDef { return toDeck(from.getKey()); } }), - DECK_ACTIONS("", "", 40, true, SortState.DESC, new ItemCellRenderer(), + DECK_ACTIONS("", "Delete/Edit", 40, true, SortState.DESC, new ItemCellRenderer(), new Function, Comparable>() { @Override public Comparable apply(final Entry from) { @@ -451,16 +454,18 @@ public enum ColumnDef { return i instanceof PaperCard ? ((IPaperCard) i).getRarity() : CardRarity.Unknown; } - private static Double toRanking(final InventoryItem i) { - Double ranking = 500D; - if (i != null && i instanceof PaperCard){ - PaperCard cp = (PaperCard) i; - ranking = DraftRankCache.getRanking(cp.getName(), cp.getEdition()); - if (ranking == null) { - ranking = 500D; + private static Double toRanking(final InventoryItem i, boolean truncate) { + if (i instanceof IPaperCard){ + IPaperCard cp = (IPaperCard) i; + Double ranking = DraftRankCache.getRanking(cp.getName(), cp.getEdition()); + if (ranking != null) { + if (truncate) { + return new BigDecimal(ranking).setScale(4, BigDecimal.ROUND_HALF_UP).doubleValue(); + } + return ranking; } } - return ranking; + return 500D; } private static DeckProxy toDeck(final InventoryItem i) { diff --git a/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/views/ItemListView.java b/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/views/ItemListView.java index 2dece6aeb07..9fef5a9280f 100644 --- a/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/views/ItemListView.java +++ b/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/views/ItemListView.java @@ -18,6 +18,7 @@ package forge.gui.toolbox.itemmanager.views; import forge.gui.MouseUtil; +import forge.gui.toolbox.FCheckBox; import forge.gui.toolbox.FMouseAdapter; import forge.gui.toolbox.FSkin; import forge.gui.toolbox.FSkin.*; @@ -29,11 +30,15 @@ import forge.item.InventoryItem; import javax.swing.*; import javax.swing.border.Border; import javax.swing.border.EmptyBorder; +import javax.swing.event.ChangeEvent; +import javax.swing.event.ChangeListener; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; import javax.swing.event.TableModelEvent; import javax.swing.table.*; +import org.apache.commons.lang3.StringUtils; + import java.awt.*; import java.awt.event.FocusAdapter; import java.awt.event.FocusEvent; @@ -107,7 +112,7 @@ public final class ItemListView extends ItemView { final DefaultTableColumnModel colmodel = new DefaultTableColumnModel(); //ensure columns ordered properly - List> list = new LinkedList>(cols.entrySet()); + final List> list = new LinkedList>(cols.entrySet()); Collections.sort(list, new Comparator>() { @Override public int compare(Entry arg0, Entry arg1) { @@ -115,14 +120,55 @@ public final class ItemListView extends ItemView { } }); + //hide table header if only showing single string column + boolean hideHeader = (cols.size() == 1 && cols.containsKey(ColumnDef.STRING)); + + getPnlOptions().removeAll(); + + int modelIndex = 0; for (Entry entry : list) { - ItemColumn col = entry.getValue(); - col.setModelIndex(colmodel.getColumnCount()); + final ColumnDef colDef = entry.getKey(); + final ItemColumn col = entry.getValue(); + col.setModelIndex(modelIndex++); if (col.isVisible()) { colmodel.addColumn(col); } + + if (!hideHeader) { + final FCheckBox chkBox = new FCheckBox(StringUtils.isEmpty(colDef.shortName) ? + colDef.longName : colDef.shortName, col.isVisible()); + chkBox.setFont(ROW_FONT); + chkBox.setToolTipText(colDef.longName); + chkBox.addChangeListener(new ChangeListener() { + @Override + public void stateChanged(ChangeEvent arg0) { + boolean visible = chkBox.isSelected(); + if (col.isVisible() != visible) { + col.setVisible(visible); + if (col.isVisible()) { + colmodel.addColumn(col); + + //move column into proper position + int oldIndex = colmodel.getColumnCount() - 1; + int newIndex = col.getModelIndex(); + for (int i = 0; i < col.getModelIndex(); i++) { + if (!list.get(i).getValue().isVisible()) { + newIndex--; + } + } + if (newIndex < oldIndex) { + colmodel.moveColumn(oldIndex, newIndex); + } + } + else { + colmodel.removeColumn(col); + } + } + } + }); + getPnlOptions().add(chkBox); + } } - //hide table header if only showing single string column - if (cols.size() == 1 && cols.containsKey(ColumnDef.STRING)) { + if (hideHeader) { this.table.getTableHeader().setPreferredSize(new Dimension(0, 0)); } else {