Don't retain selection when clicking to change column sort

Support showing color deck options in proper order with no column header
This commit is contained in:
drdev
2014-01-19 18:15:02 +00:00
parent 95709401a3
commit f0ce722aa4
16 changed files with 151 additions and 64 deletions

View File

@@ -5,6 +5,7 @@ import java.util.Arrays;
import java.util.List;
import javax.swing.JPanel;
import net.miginfocom.swing.MigLayout;
import org.apache.commons.lang3.StringUtils;
@@ -113,8 +114,16 @@ public class FDeckChooser extends JPanel implements IDecksComboBoxListener {
}
private class ColorDeckGenerator extends DeckGenerator {
public ColorDeckGenerator(String name0) {
private int index;
public ColorDeckGenerator(String name0, int index0) {
super(name0);
this.index = index0;
}
@Override
public Comparable<?> getCompareValue() {
return this.index; //ensure color items appear in proper order
}
@Override
@@ -133,15 +142,12 @@ public class FDeckChooser extends JPanel implements IDecksComboBoxListener {
private void updateColors() {
lstDecks.setAllowMultipleSelections(true);
String[] colors = new String[] { "Random 1", "Random 2", "Random 3",
"White", "Blue", "Black", "Red", "Green" };
ArrayList<Deck> decks = new ArrayList<Deck>();
decks.add(new ColorDeckGenerator("Random 1"));
decks.add(new ColorDeckGenerator("Random 2"));
decks.add(new ColorDeckGenerator("Random 3"));
decks.add(new ColorDeckGenerator("White"));
decks.add(new ColorDeckGenerator("Blue"));
decks.add(new ColorDeckGenerator("Black"));
decks.add(new ColorDeckGenerator("Red"));
decks.add(new ColorDeckGenerator("Green"));
for (int i = 0; i < colors.length; i++) {
decks.add(new ColorDeckGenerator(colors[i], i));
}
lstDecks.setPool(decks);
lstDecks.update(true);

View File

@@ -6,8 +6,6 @@ import java.awt.Rectangle;
import java.awt.event.MouseEvent;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import javax.swing.JMenu;
import javax.swing.JTable;
import javax.swing.event.ListSelectionEvent;
@@ -56,7 +54,7 @@ public final class DeckManager extends ItemManager<Deck> {
private static final FSkin.SkinIcon icoEditOver = FSkin.getIcon(FSkin.InterfaceIcons.ICO_EDIT_OVER);
private final GameType gametype;
private boolean nameOnly, preventEdit;
private boolean stringOnly, preventEdit;
private Command cmdDelete, cmdSelect;
private final Map<ColumnDef, ItemColumn> columns = SColumnUtil.getColumns(
ColumnDef.DECK_ACTIONS,
@@ -102,28 +100,27 @@ public final class DeckManager extends ItemManager<Deck> {
public void update() {
update(false, false);
}
public void update(boolean nameOnly0) {
update(nameOnly0, nameOnly0);
public void update(boolean stringOnly0) {
update(stringOnly0, stringOnly0);
}
public void update(boolean nameOnly0, boolean preventEdit0) {
if (this.nameOnly != nameOnly0) {
this.nameOnly = nameOnly0;
boolean visible = !nameOnly0;
for (Entry<ColumnDef, ItemColumn> column : columns.entrySet()) {
if (column.getKey() != ColumnDef.NAME) {
column.getValue().setVisible(visible);
}
}
public void update(boolean stringOnly0, boolean preventEdit0) {
if (this.stringOnly != stringOnly0) {
this.stringOnly = stringOnly0;
this.restoreDefaultFilters();
}
if (nameOnly0) {
if (stringOnly0) {
preventEdit0 = true; //if name only, always prevent edit
}
if (this.preventEdit != preventEdit0) {
this.preventEdit = preventEdit0;
columns.get(ColumnDef.DECK_ACTIONS).setVisible(!preventEdit0);
}
this.getTable().setup(columns);
if (stringOnly0) {
this.getTable().setup(SColumnUtil.getStringColumn());
}
else {
this.getTable().setup(columns);
}
}
/**
@@ -146,7 +143,7 @@ public final class DeckManager extends ItemManager<Deck> {
@Override
protected void addDefaultFilters() {
if (!this.nameOnly) {
if (!this.stringOnly) {
addFilter(new DeckColorFilter(this));
}
}
@@ -158,7 +155,7 @@ public final class DeckManager extends ItemManager<Deck> {
@Override
protected void buildAddFilterMenu(JMenu menu) {
if (this.nameOnly) { return; }
if (this.stringOnly) { return; }
GuiUtils.addSeparator(menu); //separate from current search item

View File

@@ -917,7 +917,7 @@ public abstract class ItemManager<T extends InventoryItem> extends JPanel {
this.model.addItems(this.pool);
}
this.table.refresh(itemsToSelect, backupIndexToSelect, false);
this.table.refresh(itemsToSelect, backupIndexToSelect);
for (ItemFilter<? extends T> filter : this.orderedFilters) {
filter.afterFiltersApplied();

View File

@@ -52,7 +52,6 @@ import forge.limited.DraftRankCache;
*
* @param <T> a generic type
*/
public class ItemColumn extends TableColumn {
private static final long serialVersionUID = 3749431834643427572L;
@@ -166,6 +165,19 @@ public class ItemColumn extends TableColumn {
}
public enum ColumnDef {
STRING("", "", 0, -1, -1, SortState.ASC, new ItemCellRenderer(),
new Function<Entry<InventoryItem, Integer>, Comparable<?>>() {
@Override
public Comparable<?> apply(final Entry<InventoryItem, Integer> from) {
return from.getKey().getCompareValue();
}
},
new Function<Entry<? extends InventoryItem, Integer>, Object>() {
@Override
public Object apply(final Entry<? extends InventoryItem, Integer> from) {
return from.getKey().toString();
}
}),
NAME("Name", "Name", 180, -1, -1, SortState.ASC, new ItemCellRenderer(),
new Function<Entry<InventoryItem, Integer>, Comparable<?>>() {
@Override

View File

@@ -20,6 +20,7 @@ package forge.gui.toolbox.itemmanager.views;
import java.awt.Color;
import java.awt.Component;
import java.awt.Cursor;
import java.awt.Dimension;
import java.awt.KeyboardFocusManager;
import java.awt.Point;
import java.awt.Rectangle;
@@ -53,8 +54,6 @@ import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableColumn;
import javax.swing.table.TableColumnModel;
import org.apache.commons.lang3.ArrayUtils;
import forge.gui.toolbox.FMouseAdapter;
import forge.gui.toolbox.FSkin;
import forge.gui.toolbox.FSkin.SkinnedTable;
@@ -75,6 +74,8 @@ import forge.util.ItemPoolSorter;
*/
@SuppressWarnings("serial")
public final class ItemListView<T extends InventoryItem> extends ItemView<T> {
private static final int ROW_HEIGHT = 20;
private final ItemTable table = new ItemTable();
private final ItemTableModel tableModel;
@@ -127,8 +128,7 @@ public final class ItemListView<T extends InventoryItem> extends ItemView<T> {
this.table.setFont(FSkin.getFont(12));
this.table.setBorder((Border)null);
this.table.getTableHeader().setBorder(null);
this.table.setRowHeight(20);
this.table.setRowHeight(ROW_HEIGHT);
this.table.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);
// prevent tables from intercepting tab focus traversals
@@ -160,14 +160,20 @@ public final class ItemListView<T extends InventoryItem> extends ItemView<T> {
if (col.isVisible()) { colmodel.addColumn(col); }
}
//hide table header if only showing single string column
if (cols.size() == 1 && cols.containsKey(ColumnDef.STRING)) {
this.table.getTableHeader().setPreferredSize(new Dimension(0, 0));
}
else {
this.table.getTableHeader().setPreferredSize(new Dimension(0, ROW_HEIGHT));
}
this.tableModel.addListeners();
this.table.setModel(this.tableModel);
this.table.setColumnModel(colmodel);
this.tableModel.setup();
this.refresh(selectedItemsBefore, 0, false);
this.table.getTableHeader().setBackground(new Color(200, 200, 200));
this.refresh(selectedItemsBefore, 0);
}
public JTable getTable() {
@@ -292,6 +298,8 @@ public final class ItemListView<T extends InventoryItem> extends ItemView<T> {
return tableColumn.getLongName();
}
};
header.setBorder(null);
header.setBackground(new Color(200, 200, 200));
((DefaultTableCellRenderer)header.getDefaultRenderer()).setHorizontalAlignment(SwingConstants.LEFT);
return header;
}
@@ -412,22 +420,22 @@ public final class ItemListView<T extends InventoryItem> extends ItemView<T> {
public void setup() {
final Enumeration<TableColumn> e = table.getColumnModel().getColumns();
final TableColumn[] sortcols = new TableColumn[table.getColumnCount()];
final ItemColumn[] sortcols = new ItemColumn[table.getColumnCount()];
// Assemble priority sort.
while (e.hasMoreElements()) {
final ItemColumn col = (ItemColumn) e.nextElement();
if (col.getSortPriority() > 0 && col.getSortPriority() < sortcols.length) {
sortcols[col.getSortPriority()] = col;
if (col.getSortPriority() > 0 && col.getSortPriority() <= sortcols.length) {
sortcols[col.getSortPriority() - 1] = col;
}
}
cascadeManager.reset();
ArrayUtils.reverse(sortcols);
for (int i = 1; i < sortcols.length; i++) {
if (sortcols[i] != null) {
cascadeManager.add((ItemColumn) sortcols[i], true);
for (int i = sortcols.length - 1; i >= 0; i--) {
ItemColumn col = sortcols[i];
if (col != null) {
cascadeManager.add(col, true);
}
}
}
@@ -499,14 +507,12 @@ public final class ItemListView<T extends InventoryItem> extends ItemView<T> {
return;
}
//backup selected items to restore
final Iterable<T> selectedItemsBefore = getSelectedItems();
// This will invert if needed
ItemTableModel.this.cascadeManager.add((ItemColumn) table.getColumnModel().getColumn(columnModelIndex), false);
refresh(selectedItemsBefore, 0, true);
ItemTableModel.this.refreshSort();
table.tableChanged(new TableModelEvent(ItemTableModel.this));
table.repaint();
ItemListView.this.setSelectedIndex(0);
SItemManagerIO.savePreferences(getItemManager());
}

View File

@@ -59,20 +59,9 @@ public abstract class ItemView<T extends InventoryItem> {
return this.isIncrementalSearchActive;
}
public void refresh(final Iterable<T> itemsToSelect, final int backupIndexToSelect, final boolean delaySelection) {
public void refresh(final Iterable<T> itemsToSelect, final int backupIndexToSelect) {
onRefresh();
if (delaySelection) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
fixSelection(itemsToSelect, backupIndexToSelect);
}
});
}
else {
fixSelection(itemsToSelect, backupIndexToSelect);
}
fixSelection(itemsToSelect, backupIndexToSelect);
}
protected abstract void onRefresh();
private void fixSelection(final Iterable<T> itemsToSelect, final int backupIndexToSelect) {

View File

@@ -46,6 +46,12 @@ public final class SColumnUtil {
return columns;
}
public static Map<ColumnDef, ItemColumn> getStringColumn() {
Map<ColumnDef, ItemColumn> columns = getColumns(ColumnDef.STRING);
columns.get(ColumnDef.STRING).setSortPriority(1);
return columns;
}
public static Map<ColumnDef, ItemColumn> getCatalogDefaultColumns() {
Map<ColumnDef, ItemColumn> columns = getColumns(
ColumnDef.FAVORITE,

View File

@@ -19,7 +19,6 @@ import forge.util.ItemPool;
*
*/
public class QuestRewardCardChooser extends QuestRewardCard implements InventoryItem {
/**
* Possible types for this object.
*/
@@ -61,6 +60,16 @@ public class QuestRewardCardChooser extends QuestRewardCard implements Inventory
return description;
}
@Override
public String toString() {
return description;
}
@Override
public Comparable<?> getCompareValue() {
return description;
}
/**
* The item type.
*

View File

@@ -14,7 +14,6 @@ import forge.util.ItemPool;
*
*/
public class QuestRewardCardDuplicate implements IQuestRewardCard {
private final String description;
/**
@@ -45,6 +44,16 @@ public class QuestRewardCardDuplicate implements IQuestRewardCard {
return "duplicate card";
}
@Override
public String toString() {
return description;
}
@Override
public Comparable<?> getCompareValue() {
return description;
}
/**
* Produces a list of options to choose from, in this case,
* the player's current cards.

View File

@@ -15,7 +15,6 @@ import forge.item.PaperCard;
*
*/
public class QuestRewardCardFiltered extends QuestRewardCard implements IQuestRewardCard {
private final String description;
private final Predicate<PaperCard> predicates;
@@ -39,6 +38,15 @@ public class QuestRewardCardFiltered extends QuestRewardCard implements IQuestRe
return description;
}
@Override
public String toString() {
return description;
}
@Override
public Comparable<?> getCompareValue() {
return description;
}
/**
* The item type.