diff --git a/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/ItemManager.java b/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/ItemManager.java index 85dcaf4dca9..5a0b5f7288e 100644 --- a/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/ItemManager.java +++ b/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/ItemManager.java @@ -30,6 +30,7 @@ import javax.swing.JPopupMenu; import javax.swing.JScrollPane; import javax.swing.KeyStroke; import javax.swing.ListSelectionModel; +import javax.swing.SwingUtilities; import javax.swing.event.ListSelectionListener; import com.google.common.base.Predicate; @@ -74,7 +75,7 @@ public abstract class ItemManager extends JPanel { private final Class genericType; private final Map statLabels; private final ArrayList selectionListeners = new ArrayList(); - + private final FLabel btnAddFilter = new FLabel.ButtonBuilder() .text("Add") .tooltip("Click to add filters to the list") @@ -95,7 +96,7 @@ public abstract class ItemManager extends JPanel { this.statLabels = statLabels0; this.wantUnique = wantUnique0; this.model = new ItemManagerModel(this, genericType0); - + //build table view this.table = new ItemTable(this, this.model); this.table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); @@ -112,7 +113,7 @@ public abstract class ItemManager extends JPanel { this.add(this.btnAddFilter); this.add(this.txtSearch); this.add(this.tableScroller); - + //setup command for btnAddFilter final Command addFilterCommand = new Command() { @Override @@ -134,9 +135,9 @@ public abstract class ItemManager extends JPanel { } }; this.btnAddFilter.setCommand(addFilterCommand); - this.btnAddFilter.setRightClickCommand(addFilterCommand); //show menu on right-click too + this.btnAddFilter.setRightClickCommand(addFilterCommand); //show menu on right-click too } - + @Override public void doLayout() { //int number = 0; @@ -170,7 +171,7 @@ public abstract class ItemManager extends JPanel { public void setPool(final Iterable items) { this.setPool(ItemPool.createFrom(items, this.genericType), false); } - + /** * * Sets the item pool. @@ -180,7 +181,7 @@ public abstract class ItemManager extends JPanel { public void setPool(final ItemPoolView poolView) { this.setPool(poolView, false); } - + /** * * Sets the item pool. @@ -227,7 +228,7 @@ public abstract class ItemManager extends JPanel { public ItemTable getTable() { return this.table; } - + /** * * getTableModel. @@ -247,7 +248,7 @@ public abstract class ItemManager extends JPanel { public T getSelectedItem() { return this.table.getSelectedItem(); } - + /** * * getSelectedItems. @@ -335,7 +336,7 @@ public abstract class ItemManager extends JPanel { this.updateView(false); this.table.fixSelection(n); } - + /** * * getItemCount. @@ -345,7 +346,7 @@ public abstract class ItemManager extends JPanel { public int getItemCount(final T item) { return this.model.isInfinite() ? Integer.MAX_VALUE : this.pool.count(item); } - + /** * Gets all filtered items in the model. * @@ -354,7 +355,7 @@ public abstract class ItemManager extends JPanel { public ItemPoolView getFilteredItems() { return this.model.getItems(); } - + /** * * getStatLabel. @@ -364,14 +365,14 @@ public abstract class ItemManager extends JPanel { public FLabel getStatLabel(SItemManagerUtil.StatTypes s) { return this.statLabels.get(s); } - + protected abstract ItemFilter createSearchFilter(String text); protected abstract void buildFilterMenu(JPopupMenu menu); - + protected > F getFilter(Class filterClass) { return ReflectionUtil.safeCast(this.filters.get(filterClass), filterClass); } - + @SuppressWarnings("unchecked") public void addFilter(ItemFilter filter) { final Class> filterClass = (Class>) filter.getClass(); @@ -384,7 +385,7 @@ public abstract class ItemManager extends JPanel { //if filter with the same class already exists, try to merge if allowed //NOTE: can always use first filter for these checks since if //merge is supported, only one will ever exist - ItemFilter existingFilter = classFilters.get(0); + ItemFilter existingFilter = classFilters.get(0); if (existingFilter.merge(filter)) { //if new filter merged with existing filter, just update layout this.revalidate(); @@ -396,7 +397,7 @@ public abstract class ItemManager extends JPanel { this.add(filter.getPanel()); this.revalidate(); } - + @SuppressWarnings("unchecked") public void removeFilter(ItemFilter filter) { final Class> filterClass = (Class>) filter.getClass(); @@ -410,7 +411,7 @@ public abstract class ItemManager extends JPanel { this.revalidate(); } } - + public void buildFilterPredicate() { /* this.filterPredicate = ?; @@ -418,7 +419,7 @@ public abstract class ItemManager extends JPanel { this.updateView(true); }*/ } - + /** * * isUnfiltered. @@ -469,6 +470,16 @@ public abstract class ItemManager extends JPanel { } this.table.getTableModel().refreshSort(); + + //select first row if no row already selected + SwingUtilities.invokeLater(new Runnable() { + @Override + public void run() { + if (table.getRowCount() > 0 && table.getSelectedRowCount() == 0) { + table.selectAndScrollTo(0); + } + } + }); } /** @@ -510,7 +521,7 @@ public abstract class ItemManager extends JPanel { public void setAlwaysNonUnique(boolean nonUniqueOnly) { this.alwaysNonUnique = nonUniqueOnly; } - + /** * * getAllowMultipleSelections. @@ -520,7 +531,7 @@ public abstract class ItemManager extends JPanel { public boolean getAllowMultipleSelections() { return this.allowMultipleSelections; } - + /** * * getAllowMultipleSelections. @@ -546,11 +557,11 @@ public abstract class ItemManager extends JPanel { selectionListeners.remove(listener); //ensure listener not added multiple times selectionListeners.add(listener); } - + public void removeSelectionListener(ListSelectionListener listener) { selectionListeners.remove(listener); } - + public Iterable getSelectionListeners() { return selectionListeners; } diff --git a/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/table/ItemTableModel.java b/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/table/ItemTableModel.java index fd58cd25ada..9112a0a64d6 100644 --- a/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/table/ItemTableModel.java +++ b/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/table/ItemTableModel.java @@ -121,7 +121,7 @@ public final class ItemTableModel extends AbstractTable final List> orderedList = this.model.getOrderedList(); return (row >= 0) && (row < orderedList.size()) ? orderedList.get(row) : null; } - + /** * Item to row. * @@ -147,16 +147,14 @@ public final class ItemTableModel extends AbstractTable } } } - + private final ListSelectionListener listSelectionListener = new ListSelectionListener() { @Override public void valueChanged(final ListSelectionEvent arg0) { - if (table.isFocusOwner()) { - ItemTableModel.this.onSelectionChange(table); - } + ItemTableModel.this.onSelectionChange(table); } }; - + private final FocusAdapter focusAdapter = new FocusAdapter() { @Override public void focusGained(final FocusEvent e) { @@ -171,7 +169,7 @@ public final class ItemTableModel extends AbstractTable if (Cursor.getPredefinedCursor(Cursor.E_RESIZE_CURSOR) == table.getTableHeader().getCursor()) { return; } - + //toggle column sort final TableColumnModel colModel = ItemTableModel.this.table.getColumnModel(); final int columnModelIndex = colModel.getColumnIndexAtX(e.getX()); @@ -193,7 +191,7 @@ public final class ItemTableModel extends AbstractTable } SItemManagerIO.savePreferences(ItemTableModel.this.table); } - + @Override public void onLeftMouseDragDrop(MouseEvent e) { //save preferences after column moved/resized SItemManagerIO.savePreferences(ItemTableModel.this.table); @@ -209,7 +207,7 @@ public final class ItemTableModel extends AbstractTable // updates card detail, listens to any key strokes table.getSelectionModel().removeListSelectionListener(listSelectionListener); //ensure listener not added multiple times table.getSelectionModel().addListSelectionListener(listSelectionListener); - + table.removeFocusListener(focusAdapter); //ensure listener not added multiple times table.addFocusListener(focusAdapter); @@ -304,7 +302,7 @@ public final class ItemTableModel extends AbstractTable // Decrement sort priority on remaining columns for (int i = 1; i < maxSortDepth; i++) { if (colsToSort.size() == i) { break; } - + if (colsToSort.get(i).getSortPriority() != 0) { colsToSort.get(i).setSortPriority(i + 1); }