mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-19 20:28:00 +00:00
Support showing/hiding columns via checkboxes in options panel
Truncate ranking after 4 decimal places
This commit is contained in:
@@ -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) {
|
||||
|
||||
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user