renderer for Ctrl-Alt-B in Python

This commit is contained in:
Dmitry Jemerov
2008-03-24 13:55:35 +03:00
parent f451cf67ce
commit 39b1616b31
3 changed files with 92 additions and 0 deletions
@@ -57,6 +57,7 @@
<referenceImporter implementation="com.jetbrains.python.validation.PythonReferenceImporter"/>
<codeInsight.lineMarkerProvider language="Python" implementationClass="com.jetbrains.python.PyLineMarkerProvider"/>
<definitionsSearch implementation="com.jetbrains.python.psi.search.PyDefinitionsSearch"/>
<gotoImplementationRendererProvider implementation="com.jetbrains.python.codeInsight.PyGotoImplementationRendererProvider"/>
</extensions>
<extensionPoints>
@@ -0,0 +1,67 @@
package com.jetbrains.python.codeInsight;
import com.intellij.ide.util.PsiElementListCellRenderer;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiNamedElement;
import com.intellij.util.ui.UIUtil;
import javax.swing.*;
import java.awt.*;
/**
* @author yole
*/
public class PyElementListCellRenderer extends PsiElementListCellRenderer {
private static final PyLocationRenderer myLocationRenderer = new PyLocationRenderer();
public String getElementText(final PsiElement element) {
final String name = ((PsiNamedElement)element).getName();
return name == null ? "" : name;
}
protected String getContainerText(final PsiElement element, final String name) {
return null;
}
protected int getIconFlags() {
return 0;
}
protected DefaultListCellRenderer getRightCellRenderer() {
return myLocationRenderer;
}
private static class PyLocationRenderer extends DefaultListCellRenderer {
private String myText;
public String getText() {
return myText;
}
public Component getListCellRendererComponent(final JList list,
final Object value,
final int index,
final boolean isSelected,
final boolean cellHasFocus) {
final Component listCellRendererComponent = super.getListCellRendererComponent(list, value, index, isSelected,
cellHasFocus);
customizeCellRenderer(value, isSelected);
return listCellRendererComponent;
}
private void customizeCellRenderer(final Object value, final boolean selected) {
PsiElement element = (PsiElement) value;
if (element.isValid()) {
myText = element.getContainingFile().getName();
}
else {
myText = "";
}
setText(myText);
setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 2));
setHorizontalTextPosition(SwingConstants.LEFT);
setBackground(selected ? UIUtil.getListSelectionBackground() : UIUtil.getListBackground());
setForeground(selected ? UIUtil.getListSelectionForeground() : UIUtil.getInactiveTextColor());
}
}
}
@@ -0,0 +1,24 @@
package com.jetbrains.python.codeInsight;
import com.intellij.codeInsight.CodeInsightBundle;
import com.intellij.codeInsight.navigation.GotoImplementationRendererProvider;
import com.intellij.ide.util.PsiElementListCellRenderer;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiNamedElement;
import com.jetbrains.python.psi.PyElement;
/**
* @author yole
*/
public class PyGotoImplementationRendererProvider implements GotoImplementationRendererProvider {
public PsiElementListCellRenderer getRenderer(final PsiElement[] elements) {
for(PsiElement element: elements) {
if (!(element instanceof PyElement) || !(element instanceof PsiNamedElement)) return null;
}
return new PyElementListCellRenderer();
}
public String getChooserTitle(final String name, final PsiElement[] elements) {
return CodeInsightBundle.message("goto.implementation.chooser.title", name, elements.length);
}
}