mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-16 02:38:02 +00:00
Auto-select first card after doing search if no card otherwise selected
This commit is contained in:
@@ -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<T extends InventoryItem> extends JPanel {
|
||||
private final Class<T> genericType;
|
||||
private final Map<SItemManagerUtil.StatTypes, FLabel> statLabels;
|
||||
private final ArrayList<ListSelectionListener> selectionListeners = new ArrayList<ListSelectionListener>();
|
||||
|
||||
|
||||
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<T extends InventoryItem> extends JPanel {
|
||||
this.statLabels = statLabels0;
|
||||
this.wantUnique = wantUnique0;
|
||||
this.model = new ItemManagerModel<T>(this, genericType0);
|
||||
|
||||
|
||||
//build table view
|
||||
this.table = new ItemTable<T>(this, this.model);
|
||||
this.table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
|
||||
@@ -112,7 +113,7 @@ public abstract class ItemManager<T extends InventoryItem> 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<T extends InventoryItem> 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<T extends InventoryItem> extends JPanel {
|
||||
public void setPool(final Iterable<InventoryItem> items) {
|
||||
this.setPool(ItemPool.createFrom(items, this.genericType), false);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* Sets the item pool.
|
||||
@@ -180,7 +181,7 @@ public abstract class ItemManager<T extends InventoryItem> extends JPanel {
|
||||
public void setPool(final ItemPoolView<T> poolView) {
|
||||
this.setPool(poolView, false);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* Sets the item pool.
|
||||
@@ -227,7 +228,7 @@ public abstract class ItemManager<T extends InventoryItem> extends JPanel {
|
||||
public ItemTable<T> getTable() {
|
||||
return this.table;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* getTableModel.
|
||||
@@ -247,7 +248,7 @@ public abstract class ItemManager<T extends InventoryItem> extends JPanel {
|
||||
public T getSelectedItem() {
|
||||
return this.table.getSelectedItem();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* getSelectedItems.
|
||||
@@ -335,7 +336,7 @@ public abstract class ItemManager<T extends InventoryItem> extends JPanel {
|
||||
this.updateView(false);
|
||||
this.table.fixSelection(n);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* getItemCount.
|
||||
@@ -345,7 +346,7 @@ public abstract class ItemManager<T extends InventoryItem> 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<T extends InventoryItem> extends JPanel {
|
||||
public ItemPoolView<T> getFilteredItems() {
|
||||
return this.model.getItems();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* getStatLabel.
|
||||
@@ -364,14 +365,14 @@ public abstract class ItemManager<T extends InventoryItem> extends JPanel {
|
||||
public FLabel getStatLabel(SItemManagerUtil.StatTypes s) {
|
||||
return this.statLabels.get(s);
|
||||
}
|
||||
|
||||
|
||||
protected abstract ItemFilter<T> createSearchFilter(String text);
|
||||
protected abstract void buildFilterMenu(JPopupMenu menu);
|
||||
|
||||
|
||||
protected <F extends ItemFilter<T>> F getFilter(Class<F> filterClass) {
|
||||
return ReflectionUtil.safeCast(this.filters.get(filterClass), filterClass);
|
||||
}
|
||||
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public void addFilter(ItemFilter<T> filter) {
|
||||
final Class<? extends ItemFilter<T>> filterClass = (Class<? extends ItemFilter<T>>) filter.getClass();
|
||||
@@ -384,7 +385,7 @@ public abstract class ItemManager<T extends InventoryItem> 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<T> existingFilter = classFilters.get(0);
|
||||
ItemFilter<T> 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<T extends InventoryItem> extends JPanel {
|
||||
this.add(filter.getPanel());
|
||||
this.revalidate();
|
||||
}
|
||||
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public void removeFilter(ItemFilter<T> filter) {
|
||||
final Class<? extends ItemFilter<T>> filterClass = (Class<? extends ItemFilter<T>>) filter.getClass();
|
||||
@@ -410,7 +411,7 @@ public abstract class ItemManager<T extends InventoryItem> extends JPanel {
|
||||
this.revalidate();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public void buildFilterPredicate() {
|
||||
/*
|
||||
this.filterPredicate = ?;
|
||||
@@ -418,7 +419,7 @@ public abstract class ItemManager<T extends InventoryItem> extends JPanel {
|
||||
this.updateView(true);
|
||||
}*/
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* isUnfiltered.
|
||||
@@ -469,6 +470,16 @@ public abstract class ItemManager<T extends InventoryItem> 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<T extends InventoryItem> extends JPanel {
|
||||
public void setAlwaysNonUnique(boolean nonUniqueOnly) {
|
||||
this.alwaysNonUnique = nonUniqueOnly;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* getAllowMultipleSelections.
|
||||
@@ -520,7 +531,7 @@ public abstract class ItemManager<T extends InventoryItem> extends JPanel {
|
||||
public boolean getAllowMultipleSelections() {
|
||||
return this.allowMultipleSelections;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* getAllowMultipleSelections.
|
||||
@@ -546,11 +557,11 @@ public abstract class ItemManager<T extends InventoryItem> extends JPanel {
|
||||
selectionListeners.remove(listener); //ensure listener not added multiple times
|
||||
selectionListeners.add(listener);
|
||||
}
|
||||
|
||||
|
||||
public void removeSelectionListener(ListSelectionListener listener) {
|
||||
selectionListeners.remove(listener);
|
||||
}
|
||||
|
||||
|
||||
public Iterable<ListSelectionListener> getSelectionListeners() {
|
||||
return selectionListeners;
|
||||
}
|
||||
|
||||
@@ -121,7 +121,7 @@ public final class ItemTableModel<T extends InventoryItem> extends AbstractTable
|
||||
final List<Entry<T, Integer>> 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<T extends InventoryItem> 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<T extends InventoryItem> 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<T extends InventoryItem> 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<T extends InventoryItem> 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<T extends InventoryItem> 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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user