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.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<Entry<InventoryItem, Integer>, Comparable<?>>() {
@Override
public Comparable<?> apply(final Entry<InventoryItem, Integer> from) {
return toRanking(from.getKey());
return toRanking(from.getKey(), false);
}
},
new Function<Entry<? extends InventoryItem, Integer>, Object>() {
@Override
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(),
@@ -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<Entry<InventoryItem, Integer>, Comparable<?>>() {
@Override
public Comparable<?> apply(final Entry<InventoryItem, Integer> 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) {

View File

@@ -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<T extends InventoryItem> extends ItemView<T> {
final DefaultTableColumnModel colmodel = new DefaultTableColumnModel();
//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>>() {
@Override
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) {
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 {