Auto-select first card after doing search if no card otherwise selected

This commit is contained in:
drdev
2013-11-23 04:38:34 +00:00
parent cc433b6708
commit b726053164
2 changed files with 42 additions and 33 deletions

View File

@@ -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;
}

View File

@@ -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);
}