blob: aa96b8c93483d98c7df4068c144a55bf6e7f4624 [file] [log] [blame]
package com.intellij.util.xml.ui;
import com.intellij.ide.util.TreeClassChooser;
import com.intellij.ide.util.TreeClassChooserFactory;
import com.intellij.openapi.editor.Document;
import com.intellij.openapi.fileTypes.StdFileTypes;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.FixedSizeButton;
import com.intellij.openapi.util.Conditions;
import com.intellij.psi.PsiClass;
import com.intellij.psi.search.GlobalSearchScope;
import com.intellij.ui.EditorTextField;
import com.intellij.ui.JavaReferenceEditorUtil;
import com.intellij.ui.UIBundle;
import com.intellij.util.ui.AbstractTableCellEditor;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.EventObject;
/**
* @author peter
*/
public class PsiClassTableCellEditor extends AbstractTableCellEditor {
private final Project myProject;
private final GlobalSearchScope mySearchScope;
private EditorTextField myEditor;
public PsiClassTableCellEditor(final Project project, final GlobalSearchScope searchScope) {
myProject = project;
mySearchScope = searchScope;
}
public final Object getCellEditorValue() {
return myEditor.getText();
}
public final boolean stopCellEditing() {
final boolean b = super.stopCellEditing();
myEditor = null;
return b;
}
public boolean isCellEditable(EventObject e) {
return !(e instanceof MouseEvent) || ((MouseEvent)e).getClickCount() >= 2;
}
public final Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
final Document document = JavaReferenceEditorUtil.createDocument(value == null ? "" : (String)value, myProject, true);
myEditor = new EditorTextField(document, myProject, StdFileTypes.JAVA){
protected boolean shouldHaveBorder() {
return false;
}
public void addNotify() {
super.addNotify();
final JComponent editorComponent = getEditor().getContentComponent();
editorComponent.getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0), "ENTER");
editorComponent.getActionMap().put("ENTER", new AbstractAction() {
public void actionPerformed(ActionEvent e) {
stopCellEditing();
}
});
}
};
final JPanel panel = new JPanel();
panel.setLayout(new BorderLayout());
panel.add(myEditor);
final FixedSizeButton button = new FixedSizeButton(myEditor);
panel.add(button, BorderLayout.EAST);
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
TreeClassChooser chooser = TreeClassChooserFactory.getInstance(myProject)
.createInheritanceClassChooser(UIBundle.message("choose.class"), mySearchScope, null, true, true, Conditions.alwaysTrue());
chooser.showDialog();
final PsiClass psiClass = chooser.getSelected();
if (psiClass != null) {
myEditor.setText(psiClass.getQualifiedName());
}
}
});
panel.addFocusListener(new FocusListener() {
public void focusGained(FocusEvent e) {
if (!e.isTemporary() && myEditor != null) {
myEditor.requestFocus();
}
}
public void focusLost(FocusEvent e) {
}
});
myEditor.addFocusListener(new FocusListener() {
public void focusGained(FocusEvent e) {
}
public void focusLost(FocusEvent e) {
if (!e.isTemporary()) {
stopCellEditing();
}
}
});
//ComponentWithBrowseButton.MyDoClickAction.addTo(button, myEditor);
return panel;
}
}