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