public void add(String buf) {
buffer.add(buf);
if (buffer.size() >= MAX_LENGTH) { buffer.removeFirst(); }
- iterator = buffer.listIterator(buffer.size() - 1);
+ iterator = null;
prev = true;
}
public String getPrev() {
String ret = null;
- if (! buffer.isEmpty() && iterator.hasPrevious()) {
+ if (! isBufferEmpty() && iterator.hasPrevious()) {
ret = iterator.previous();
if (! prev && iterator.hasPrevious()) { ret = iterator.previous(); }
prev = true;
public String getNext() {
String ret = null;
- if (! buffer.isEmpty() && iterator.hasNext()) {
+ if (! isBufferEmpty() && iterator.hasNext()) {
ret = iterator.next();
if (prev && iterator.hasNext()) { ret = iterator.next(); }
prev = false;
public String getCurrent() {
return buffer.isEmpty() ? null : buffer.getLast();
}
+
+ private boolean isBufferEmpty() {
+ boolean ret = buffer.isEmpty();
+ if (! ret && iterator == null) {
+ iterator = buffer.listIterator(buffer.size() - 1);
+ }
+ return ret;
+ }
}
private void setupSearchKeymap(final GuiController controller) {
KeyStroke key = KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0);
Action a = new TextAction("search") {
- private static final long serialVersionUID = 7670487950463928408L;
+ private static final long serialVersionUID = 118797095359988885L;
public void actionPerformed(ActionEvent e) {
String st = searchField.getSelectedText();
int p = searchField.getCaretPosition();
controller.onSearch(searchField.getText(), p, st);
String s = buffer.getCurrent();
String t = searchField.getText();
- if (s == null || ! s.equals(t)) {
+ if ((s == null || ! s.equals(t)) && t.length() != 0) {
buffer.add(t);
}
}