blob: 3406aa1a46c626f9632329b64996016d32a1fb67 [file] [log] [blame]
/*
* Copyright 2002-2005 Sascha Weinreuter
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.intellij.plugins.xpathView.ui;
import org.intellij.plugins.xpathView.HistoryElement;
import com.intellij.openapi.editor.Document;
import com.intellij.openapi.util.Comparing;
import org.jetbrains.annotations.Nullable;
import javax.swing.*;
import java.util.Arrays;
class HistoryModel extends AbstractListModel implements ComboBoxModel, MultilineEditor.EditorModel {
private final HistoryElement[] history;
private final Document myDocument;
private final int length;
private HistoryElement selectedItem;
public HistoryModel(HistoryElement[] history, Document document) {
this.history = history;
this.myDocument = document;
if (history.length > 0) {
setSelectedItem(history[history.length - 1]);
}
this.length = history.length;
}
public HistoryElement getElementAt(int i) {
return history[(length - 1) - i];
}
public int getSize() {
return length;
}
@Nullable
public HistoryElement getSelectedItem() {
if (selectedItem != null) {
if (Comparing.equal(selectedItem.expression, myDocument.getCharsSequence())) {
return selectedItem;
} else {
return selectedItem.changeExpression(myDocument.getText().trim());
}
}
assert length == 0;
return selectedItem;
}
public void setSelectedIndex(int index) {
setSelectedItem(getElementAt(index));
}
public int getSelectedIndex() {
final int i = indexOf(this.selectedItem);
return history.length - 1 - i;
}
private int indexOf(HistoryElement selectedItem) {
return Arrays.asList(history).indexOf(selectedItem);
}
public void setSelectedItem(Object object) {
if (object instanceof String) {
for (HistoryElement element : history) {
if (object.equals(element.expression)) {
object = element;
break;
}
}
}
if (object instanceof String) {
object = selectedItem.changeExpression((String)object);
}
if (selectedItem != null && selectedItem != object || selectedItem == null && object != null) {
selectedItem = (HistoryElement)object;
fireContentsChanged(this, -1, -1);
}
}
public String getItemString(int i) {
return i > history.length ? getElementAt(i).expression : selectedItem.expression;
}
}