blob: a0ec63a5c92fd32b46c98dc1be62c98276f457a3 [file] [log] [blame]
/*
* Copyright 2000-2009 JetBrains s.r.o.
*
* 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 com.intellij.ui;
import com.intellij.openapi.ui.ComboBox;
import com.intellij.openapi.ui.TextFieldWithBrowseButton;
import com.intellij.openapi.util.Comparing;
import javax.swing.*;
import javax.swing.event.DocumentEvent;
import java.awt.event.ActionListener;
public class ComboBoxFieldPanel extends AbstractFieldPanel {
private final JComboBox myComboBox;
private String oldText;
public ComboBoxFieldPanel() {
super(new ComboBox());
myComboBox = (JComboBox) getComponent();
}
public ComboBoxFieldPanel(String[] items, String labelText, final String viewerDialogTitle, ActionListener browseButtonActionListener) {
this(items, labelText, viewerDialogTitle, browseButtonActionListener, null);
}
public ComboBoxFieldPanel(String[] items, String labelText, final String viewerDialogTitle, ActionListener browseButtonActionListener, final Runnable documentListener) {
super(new ComboBox(items), labelText, viewerDialogTitle, browseButtonActionListener, documentListener);
myComboBox = (JComboBox) getComponent();
createComponent();
}
public void createComponent() {
super.createComponent();
TextFieldWithBrowseButton.MyDoClickAction doClickAction = getDoClickAction();
if (doClickAction != null) {
doClickAction.registerShortcut(myComboBox);
}
myComboBox.setMaximumRowCount(8);
myComboBox.setEditable(true);
final JTextField editorComponent = (JTextField)myComboBox.getEditor().getEditorComponent();
editorComponent.getDocument().addDocumentListener(new DocumentAdapter() {
protected void textChanged(DocumentEvent e) {
final String text = getText();
if (!Comparing.equal(text, oldText, true)) {
oldText = text;
final Runnable changeListener = getChangeListener();
if (changeListener != null) {
changeListener.run();
}
}
}
});
}
public String getText() {
final Object selectedItem = myComboBox.isEditable()? myComboBox.getEditor().getItem() : myComboBox.getSelectedItem();
return selectedItem instanceof String ? (String)selectedItem : null;
}
public void setText(String text) {
myComboBox.setSelectedItem(text);
}
public JComboBox getComboBox() {
return myComboBox;
}
public void setItems(Object[] items) {
myComboBox.removeAllItems();
for (Object item : items) {
myComboBox.addItem(item);
}
}
public void addItemSetText(String text) {
JComboBox comboBox = getComboBox();
int n = comboBox.getItemCount();
boolean found = false;
for (int i = 0; i < n; i++) {
String item = (String)comboBox.getItemAt(i);
if (Comparing.strEqual(item, text)) {
found = true;
break;
}
}
if (!found) {
comboBox.addItem(text);
}
comboBox.getEditor().setItem(text);
setText(text);
}
}