package jetbrains.mps.debugger.core; /*Generated by MPS */ import org.jetbrains.mps.openapi.model.SNodeReference; import java.awt.Color; import jetbrains.mps.openapi.editor.style.StyleRegistry; import jetbrains.mps.editor.runtime.style.StyleAttributes; import org.jetbrains.annotations.NotNull; import java.util.Map; import jetbrains.mps.nodeEditor.EditorComponent; import java.awt.Rectangle; import jetbrains.mps.internal.collections.runtime.MapSequence; import java.util.HashMap; import org.jetbrains.mps.openapi.model.SNode; import jetbrains.mps.smodel.SNodePointer; import org.jetbrains.annotations.Nullable; import jetbrains.mps.nodeEditor.cells.EditorCell_Label; import jetbrains.mps.nodeEditor.AdditionalPainter; import java.awt.Graphics; public class CurrentLinePainter extends DebuggerCellPainter<SNodeReference> { private static final Color STRIPE_COLOR = StyleRegistry.getInstance().getStyle("EXECUTIONPOINT").get(StyleAttributes.TEXT_BACKGROUND_COLOR); @NotNull private final SNodeReference myNodePointer; private boolean myInvisible = false; private Map<EditorComponent, Rectangle> myCachedCoverageAreas = MapSequence.fromMap(new HashMap<EditorComponent, Rectangle>()); public CurrentLinePainter(SNodeReference pointer) { myNodePointer = pointer; } public CurrentLinePainter(SNode node) { myNodePointer = new SNodePointer(node); } @Override @NotNull public SNodeReference getItem() { return myNodePointer; } @Override protected Color getCellBackgroundColor() { return STRIPE_COLOR; } @Override protected Color getStripeBackgroundColor() { return STRIPE_COLOR; } @Override protected Color getFrameColor() { return Color.black; } @Override @Nullable protected SNodeReference getSNode() { return myNodePointer; } @Override public Rectangle getCoverageArea(EditorComponent editorComponent) { if (myInvisible) { return null; } if (!((MapSequence.fromMap(myCachedCoverageAreas).containsKey(editorComponent)))) { MapSequence.fromMap(myCachedCoverageAreas).put(editorComponent, calculateCoverageArea(editorComponent)); } return MapSequence.fromMap(myCachedCoverageAreas).get(editorComponent); } @Override public Color getCellsFontColor(EditorCell_Label cell) { if (myInvisible) { return null; } return Color.WHITE; } @Override public boolean isAbove(AdditionalPainter additionalPainter, EditorComponent editorComponent) { if (additionalPainter instanceof CurrentLinePainter) { return additionalPainter.hashCode() < this.hashCode(); } if (!(additionalPainter.isAbove(this, editorComponent))) { return true; } return false; } @Override public void paint(Graphics g, EditorComponent editorComponent) { if (myInvisible) { return; } super.paint(g, editorComponent); } public void setVisible(boolean visible) { myInvisible = !(visible); MapSequence.fromMap(myCachedCoverageAreas).clear(); } @Override public boolean paintsBackground() { return !(myInvisible); } @Override public void beforeRemoval(EditorComponent editorComponent) { MapSequence.fromMap(myCachedCoverageAreas).clear(); super.beforeRemoval(editorComponent); } }