mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-20 04:38: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.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) {
|
||||||
|
|||||||
@@ -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 {
|
||||||
|
|||||||
Reference in New Issue
Block a user