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);
}
}