mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
renderer for Ctrl-Alt-B in Python
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user