Support showing/hiding columns via checkboxes in options panel

Truncate ranking after 4 decimal places
This commit is contained in:
drdev
2014-02-15 19:33:50 +00:00
parent f7256824bb
commit 45ce34ff0b
2 changed files with 68 additions and 17 deletions

View File

@@ -19,6 +19,7 @@ package forge.gui.toolbox.itemmanager.views;
import com.google.common.base.Function; import com.google.common.base.Function;
import com.google.common.collect.Iterables; import com.google.common.collect.Iterables;
import forge.Singletons; import forge.Singletons;
import forge.card.*; import forge.card.*;
import forge.deck.io.DeckPreferences; import forge.deck.io.DeckPreferences;
@@ -32,8 +33,10 @@ import forge.item.InventoryItem;
import forge.item.InventoryItemFromSet; import forge.item.InventoryItemFromSet;
import forge.item.PaperCard; import forge.item.PaperCard;
import forge.limited.DraftRankCache; import forge.limited.DraftRankCache;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import java.math.BigDecimal;
import java.util.Map.Entry; import java.util.Map.Entry;
import java.util.regex.Pattern; import java.util.regex.Pattern;
@@ -194,17 +197,17 @@ public enum ColumnDef {
: (ai.getRemRandomDecks() ? "?" : ""); : (ai.getRemRandomDecks() ? "?" : "");
} }
}), }),
RANKING("Ranking", "Ranking", 30, true, SortState.ASC, new ItemCellRenderer(), RANKING("Ranking", "Ranking", 50, true, SortState.ASC, new ItemCellRenderer(),
new Function<Entry<InventoryItem, Integer>, Comparable<?>>() { new Function<Entry<InventoryItem, Integer>, Comparable<?>>() {
@Override @Override
public Comparable<?> apply(final Entry<InventoryItem, Integer> from) { public Comparable<?> apply(final Entry<InventoryItem, Integer> from) {
return toRanking(from.getKey()); return toRanking(from.getKey(), false);
} }
}, },
new Function<Entry<? extends InventoryItem, Integer>, Object>() { new Function<Entry<? extends InventoryItem, Integer>, Object>() {
@Override @Override
public Object apply(final Entry<? extends InventoryItem, Integer> from) { public Object apply(final Entry<? extends InventoryItem, Integer> from) {
return String.valueOf(toRanking(from.getKey())); return toRanking(from.getKey(), true);
} }
}), }),
QUANTITY("Qty", "Quantity", 25, true, SortState.ASC, new ItemCellRenderer(), QUANTITY("Qty", "Quantity", 25, true, SortState.ASC, new ItemCellRenderer(),
@@ -275,7 +278,7 @@ public enum ColumnDef {
return toDeck(from.getKey()); return toDeck(from.getKey());
} }
}), }),
DECK_ACTIONS("", "", 40, true, SortState.DESC, new ItemCellRenderer(), DECK_ACTIONS("", "Delete/Edit", 40, true, SortState.DESC, new ItemCellRenderer(),
new Function<Entry<InventoryItem, Integer>, Comparable<?>>() { new Function<Entry<InventoryItem, Integer>, Comparable<?>>() {
@Override @Override
public Comparable<?> apply(final Entry<InventoryItem, Integer> from) { public Comparable<?> apply(final Entry<InventoryItem, Integer> from) {
@@ -451,16 +454,18 @@ public enum ColumnDef {
return i instanceof PaperCard ? ((IPaperCard) i).getRarity() : CardRarity.Unknown; return i instanceof PaperCard ? ((IPaperCard) i).getRarity() : CardRarity.Unknown;
} }
private static Double toRanking(final InventoryItem i) { private static Double toRanking(final InventoryItem i, boolean truncate) {
Double ranking = 500D; if (i instanceof IPaperCard){
if (i != null && i instanceof PaperCard){ IPaperCard cp = (IPaperCard) i;
PaperCard cp = (PaperCard) i; Double ranking = DraftRankCache.getRanking(cp.getName(), cp.getEdition());
ranking = DraftRankCache.getRanking(cp.getName(), cp.getEdition()); if (ranking != null) {
if (ranking == null) { if (truncate) {
ranking = 500D; return new BigDecimal(ranking).setScale(4, BigDecimal.ROUND_HALF_UP).doubleValue();
}
return ranking;
} }
} }
return ranking; return 500D;
} }
private static DeckProxy toDeck(final InventoryItem i) { private static DeckProxy toDeck(final InventoryItem i) {

View File

@@ -18,6 +18,7 @@
package forge.gui.toolbox.itemmanager.views; package forge.gui.toolbox.itemmanager.views;
import forge.gui.MouseUtil; import forge.gui.MouseUtil;
import forge.gui.toolbox.FCheckBox;
import forge.gui.toolbox.FMouseAdapter; import forge.gui.toolbox.FMouseAdapter;
import forge.gui.toolbox.FSkin; import forge.gui.toolbox.FSkin;
import forge.gui.toolbox.FSkin.*; import forge.gui.toolbox.FSkin.*;
@@ -29,11 +30,15 @@ import forge.item.InventoryItem;
import javax.swing.*; import javax.swing.*;
import javax.swing.border.Border; import javax.swing.border.Border;
import javax.swing.border.EmptyBorder; import javax.swing.border.EmptyBorder;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener; import javax.swing.event.ListSelectionListener;
import javax.swing.event.TableModelEvent; import javax.swing.event.TableModelEvent;
import javax.swing.table.*; import javax.swing.table.*;
import org.apache.commons.lang3.StringUtils;
import java.awt.*; import java.awt.*;
import java.awt.event.FocusAdapter; import java.awt.event.FocusAdapter;
import java.awt.event.FocusEvent; import java.awt.event.FocusEvent;
@@ -107,7 +112,7 @@ public final class ItemListView<T extends InventoryItem> extends ItemView<T> {
final DefaultTableColumnModel colmodel = new DefaultTableColumnModel(); final DefaultTableColumnModel colmodel = new DefaultTableColumnModel();
//ensure columns ordered properly //ensure columns ordered properly
List<Entry<ColumnDef, ItemColumn>> list = new LinkedList<Entry<ColumnDef, ItemColumn>>(cols.entrySet()); final List<Entry<ColumnDef, ItemColumn>> list = new LinkedList<Entry<ColumnDef, ItemColumn>>(cols.entrySet());
Collections.sort(list, new Comparator<Entry<ColumnDef, ItemColumn>>() { Collections.sort(list, new Comparator<Entry<ColumnDef, ItemColumn>>() {
@Override @Override
public int compare(Entry<ColumnDef, ItemColumn> arg0, Entry<ColumnDef, ItemColumn> arg1) { public int compare(Entry<ColumnDef, ItemColumn> arg0, Entry<ColumnDef, ItemColumn> arg1) {
@@ -115,14 +120,55 @@ public final class ItemListView<T extends InventoryItem> extends ItemView<T> {
} }
}); });
//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<ColumnDef, ItemColumn> entry : list) { for (Entry<ColumnDef, ItemColumn> entry : list) {
ItemColumn col = entry.getValue(); final ColumnDef colDef = entry.getKey();
col.setModelIndex(colmodel.getColumnCount()); final ItemColumn col = entry.getValue();
col.setModelIndex(modelIndex++);
if (col.isVisible()) { colmodel.addColumn(col); } 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 (hideHeader) {
if (cols.size() == 1 && cols.containsKey(ColumnDef.STRING)) {
this.table.getTableHeader().setPreferredSize(new Dimension(0, 0)); this.table.getTableHeader().setPreferredSize(new Dimension(0, 0));
} }
else { else {