package com.siberika.idea.pascal.ui; import com.intellij.ui.ColoredTreeCellRenderer; import com.intellij.ui.SimpleTextAttributes; import com.siberika.idea.pascal.PascalIcons; import com.siberika.idea.pascal.lang.psi.PasEntityScope; import com.siberika.idea.pascal.lang.psi.PascalNamedElement; import com.siberika.idea.pascal.lang.psi.impl.PasField; import com.siberika.idea.pascal.util.PsiUtil; import org.jetbrains.annotations.NotNull; import javax.swing.*; import javax.swing.tree.DefaultMutableTreeNode; /** * Author: George Bakhtadze * Date: 27/11/2015 */ public class FieldRenderer extends ColoredTreeCellRenderer { private static final SimpleTextAttributes SMALL = new SimpleTextAttributes(SimpleTextAttributes.STYLE_SMALLER, null); @Override public void customizeCellRenderer(@NotNull JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) { PasField field = getField(value, PasField.class); if (null == field) { PasEntityScope scope = getField(value, PasEntityScope.class); setIcon(PascalIcons.CLASS); append(PsiUtil.getFieldName(scope)); return; } setIcon(PascalIcons.ROUTINE); SimpleTextAttributes attributes = SimpleTextAttributes.REGULAR_ATTRIBUTES; PascalNamedElement element = field.getElement(); if (!PasField.isAllowed(field.visibility, PasField.Visibility.PROTECTED)) { attributes = SimpleTextAttributes.merge(attributes, SimpleTextAttributes.EXCLUDED_ATTRIBUTES); } append(PsiUtil.getFieldName(element), attributes); String tooltip = element != null ? element.getText() : ""; setToolTipText(tooltip); append(" " + field.visibility.name().toLowerCase() + " - " + tooltip, SimpleTextAttributes.merge(SMALL, SimpleTextAttributes.GRAYED_ATTRIBUTES)); } private <T> T getField(Object value, Class<T> clazz) { if (value instanceof DefaultMutableTreeNode) { Object userObject = ((DefaultMutableTreeNode) value).getUserObject(); if (clazz.isInstance(userObject)) { return (T) userObject; } } return null; } }