package bluej.stride.framedjava.canvases;
import bluej.stride.framedjava.frames.BreakpointFrame;
import bluej.stride.generic.InteractionManager;
import bluej.utility.javafx.JavaFXUtil;
import threadchecker.OnThread;
import threadchecker.Tag;
import javafx.scene.layout.VBox;
import bluej.stride.framedjava.ast.HighlightedBreakpoint;
import bluej.stride.framedjava.frames.DebugInfo;
import bluej.stride.framedjava.frames.DebugInfo.Display;
import bluej.stride.generic.CanvasParent;
import bluej.stride.generic.Frame;
import bluej.stride.generic.FrameCanvas;
import bluej.stride.generic.FrameCursor;
import bluej.stride.generic.SingleCanvasFrame;
import bluej.utility.Debug;
@OnThread(Tag.FX)
public class JavaCanvas
extends FrameCanvas{
@SuppressWarnings("unused")
private boolean methodCanvas;
public JavaCanvas(InteractionManager editor,
CanvasParent parent, String stylePrefix, boolean methodCanvas)
{
super(editor, parent, stylePrefix);
this.methodCanvas = methodCanvas;
}
@OnThread(Tag.FXPlatform)
public HighlightedBreakpoint showDebugBefore(Frame f, DebugInfo info)
{
Display disp;
VBox special;
if (f != null) {
JavaFXUtil.setPseudoclass("bj-debug-before", true, f.getNode());
disp = info.getInfoDisplay(f.getCursorBefore(), f.getNode(), f.getStylePrefix(), f instanceof BreakpointFrame);
special = getSpecialBefore(f.getCursorBefore());
}
else {
disp = info.getInfoDisplay(getLastCursor(), null, null, false);
special = getSpecialAfter(null);
}
if (special.getChildren().contains(disp) == false) {
special.getChildren().add(disp);
}
editorFrm.ensureNodeVisible(special);
return disp;
}
private void removeSpecialsAfter(DebugInfo info, FrameCursor fc)
{
while (fc != null){
VBox special = getSpecialAfter(fc);
info.removeAllDisplays(special.getChildren());
special.getChildren().clear();
Frame f = getFrameAfter(fc);
if (f instanceof SingleCanvasFrame
| TODO make this more robust
|
{
SingleCanvasFrame scf = (SingleCanvasFrame)f;
((JavaCanvas)scf.getCanvas()).removeSpecialsAfter(info, scf.getFirstInternalCursor());
}
fc = getNextCursor(fc, false);
}
|
| This block has been commented as it was causing a bug in the steps while in
| 'Debug' mode.
| It was firing a ClassCastException form IfFrame$1 to Frame, as well.
|
|// f must be null here:
|
|if (methodCanvas == false) {} // Ascend as long as we're not a method:
|
|Frame parent = (Frame)getParent();
|
|JavaCanvas grandParent = (JavaCanvas) parent.getParentCanvas();
|
|grandParent.removeSpecialsAfter(info, parent.getCursorAfter());
|
|}
}
}
top,
use,
map,
class JavaCanvas
. JavaCanvas
. showDebugBefore
. removeSpecialsAfter
93 neLoCode
+ 11 LoComm