/* * Copyright 2003-2015 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package jetbrains.mps.ide.typesystem.trace; import com.intellij.ui.JBColor; import jetbrains.mps.ide.icons.IdeIcons; import jetbrains.mps.ide.ui.tree.MPSTreeNode; import jetbrains.mps.newTypesystem.operation.AbstractOperation; import jetbrains.mps.newTypesystem.operation.PresentationKind; import jetbrains.mps.newTypesystem.state.State; import jetbrains.mps.nodeEditor.EditorComponent; import jetbrains.mps.openapi.editor.style.StyleRegistry; import org.jetbrains.mps.openapi.model.SNode; import java.awt.Color; import java.util.HashMap; import java.util.List; import java.util.Map; public class TypeSystemTraceTreeNode extends MPSTreeNode { private static final Map<String, Color> COLOR_MAP = initColors(); public TypeSystemTraceTreeNode(AbstractOperation userObject, State state, EditorComponent editorComponent) { super(userObject); AbstractOperation operation = userObject; this.setAutoExpandable(true); this.setIcon(IdeIcons.DEFAULT_ICON); List<SNode> variables = operation.getVariables(); if (variables != null) { setTooltipText(PresentationUtil.getVariablesTooltipPresentation(editorComponent, variables, state)); } String nodeId = operation.getPresentation(); SNode source = operation.getSource(); if (source != null) { nodeId += source.getNodeId().toString(); } else if (operation.getRule() != null) { nodeId += operation.getRule().o2; } setNodeIdentifier(nodeId); setText(operation.getPresentation()); } public TypeSystemTraceTreeNode(AbstractOperation userObject) { super(userObject); AbstractOperation operation = userObject; setNodeIdentifier(operation.getPresentation()); this.setAutoExpandable(true); this.setIcon(IdeIcons.DEFAULT_ICON); } @Override public void doUpdatePresentation() { super.doUpdatePresentation(); if (getUserObject() instanceof AbstractOperation) { AbstractOperation difference = (AbstractOperation) getUserObject(); setColor(getOperationColor(difference)); } } private Color getOperationColor(AbstractOperation difference) { String colorId = difference.getPresentationKind(); Color color = TypeSystemTraceTreeNode.COLOR_MAP.get(colorId); return color != null ? color : JBColor.BLACK; } private static Map<String, Color> initColors() { Map<String, Color> result = new HashMap<String, Color>(); result.put(PresentationKind.EQUATION_ADDED, StyleRegistry.getInstance().getSimpleColor(new Color(6751077))); result.put(PresentationKind.RELATION_ADDED, StyleRegistry.getInstance().getSimpleColor(new Color(119))); result.put(PresentationKind.RELATION_REMOVED, StyleRegistry.getInstance().getSimpleColor(new Color(1144763))); result.put(PresentationKind.WHEN_CONCRETE_ADDED, StyleRegistry.getInstance().getSimpleColor(new Color(4486912))); result.put(PresentationKind.WHEN_CONCRETE_REMOVED, StyleRegistry.getInstance().getSimpleColor(new Color(7816192))); result.put(PresentationKind.ERROR_ADDED, StyleRegistry.getInstance().getSimpleColor(Color.RED)); result.put(PresentationKind.TRACE_WARNING, StyleRegistry.getInstance().getSimpleColor(new Color(200, 10, 10))); result.put(PresentationKind.TRACE_MESSAGE, StyleRegistry.getInstance().getSimpleColor(new Color(0, 0, 255))); result.put(PresentationKind.TYPE_ASSIGNED, StyleRegistry.getInstance().getSimpleColor(new Color(30464))); result.put(PresentationKind.TYPE_EXPANDED, StyleRegistry.getInstance().getSimpleColor(new Color(34564))); result.put(PresentationKind.TYPE_REMOVED, StyleRegistry.getInstance().getSimpleColor(new Color(10066329))); result.put(PresentationKind.DEFAULT, JBColor.BLACK); return result; } }