package net.bitpot.railways.navigation;
import com.intellij.ide.util.ModuleRendererFactory;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.module.ModuleType;
import com.intellij.util.ui.UIUtil;
import net.bitpot.railways.models.Route;
import javax.swing.*;
import java.awt.*;
/**
* Factory creates module renderer that renders Route module.
*/
public class RouteModuleRendererFactory extends ModuleRendererFactory {
@Override
protected boolean handles(Object o) {
// Handle only Route objects.
return o instanceof Route;
}
@Override
public DefaultListCellRenderer getModuleRenderer() {
return new RouteModuleRenderer();
}
/**
* Provides a component for rendering Route module in Go To Route navigation
* list.
*/
private class RouteModuleRenderer extends DefaultListCellRenderer {
@Override
public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
Component component = super.getListCellRendererComponent(list,
value, index, isSelected, cellHasFocus);
// Set module name and icon
Module module = ((Route)value).getModule();
setText(module.getName());
setIcon(ModuleType.get(module).getIcon());
// Set additional rendering properties.
// To preserve consistent look and feel, the implementation is taken from
// com.intellij.ide.util.PsiElementModuleRenderer.customizeCellRenderer()
setBorder(BorderFactory.createEmptyBorder(0, 0, 0, UIUtil.getListCellHPadding()));
setHorizontalTextPosition(SwingConstants.LEFT);
setBackground(isSelected ? UIUtil.getListSelectionBackground() : UIUtil.getListBackground());
setForeground(isSelected ? UIUtil.getListSelectionForeground() : UIUtil.getInactiveTextColor());
if (UIUtil.isUnderNimbusLookAndFeel())
setOpaque(false);
return component;
}
}
}