implement reverse search on shift-enter for find-as-you-type

This commit is contained in:
myk
2013-02-13 00:37:34 +00:00
parent 8ac8b22ed7
commit c4899cae38

View File

@@ -18,7 +18,6 @@
package forge.gui.deckeditor; package forge.gui.deckeditor;
import java.awt.Color; import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension; import java.awt.Dimension;
import java.awt.Point; import java.awt.Point;
import java.awt.event.ActionEvent; import java.awt.event.ActionEvent;
@@ -275,7 +274,7 @@ public enum CDeckEditorUI implements CardContainer {
SwingUtilities.getRoot(popupLabel).setSize(popupDimension); SwingUtilities.getRoot(popupLabel).setSize(popupDimension);
} }
private void _findNextMatch(int startIdx) { private void _findNextMatch(int startIdx, boolean reverse) {
int numItems = tableView.getTable().getRowCount(); int numItems = tableView.getTable().getRowCount();
if (0 == numItems) { if (0 == numItems) {
cancel(); cancel();
@@ -284,10 +283,11 @@ public enum CDeckEditorUI implements CardContainer {
// find the next item that matches the string // find the next item that matches the string
startIdx %= numItems; startIdx %= numItems;
int stopIdx = (startIdx - 1 + numItems) % numItems; final int increment = reverse ? numItems - 1 : 1;
int stopIdx = (startIdx + numItems - increment) % numItems;
String searchStr = str.toString().toLowerCase(Locale.ENGLISH); String searchStr = str.toString().toLowerCase(Locale.ENGLISH);
boolean found = false; boolean found = false;
for (int idx = startIdx; true; idx = (idx + 1) % numItems) { for (int idx = startIdx; true; idx = (idx + increment) % numItems) {
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
EditorTableModel<? extends InventoryItem> tableModel = EditorTableModel<? extends InventoryItem> tableModel =
(EditorTableModel<? extends InventoryItem>)tableView.getTable().getModel(); (EditorTableModel<? extends InventoryItem>)tableView.getTable().getModel();
@@ -364,8 +364,11 @@ public enum CDeckEditorUI implements CardContainer {
return; return;
case KeyEvent.VK_ENTER: case KeyEvent.VK_ENTER:
case 13: // there doesn't seem to be a KeyEvent constant for this
if (!str.toString().isEmpty()) { if (!str.toString().isEmpty()) {
_findNextMatch(tableView.getTable().getSelectedRow() + 1); // no need to add (or subtract) 1 -- the table selection will already
// have been advanced by the (shift+) enter key
_findNextMatch(tableView.getTable().getSelectedRow(), e.isShiftDown());
} }
return; return;
@@ -390,7 +393,7 @@ public enum CDeckEditorUI implements CardContainer {
str.append(e.getKeyChar()); str.append(e.getKeyChar());
} }
_findNextMatch(Math.max(0, tableView.getTable().getSelectedRow())); _findNextMatch(Math.max(0, tableView.getTable().getSelectedRow()), false);
} }
} }
} }