package bluej.stride.operations;

import java.util.Collections;
import java.util.List;

import bluej.stride.slots.EditableSlot.SortedMenuItem;
import javafx.application.Platform;
import javafx.scene.control.CustomMenuItem;
import bluej.stride.generic.Frame;
import bluej.stride.generic.InteractionManager;
import bluej.stride.generic.RecallableFocus;
import threadchecker.OnThread;
import threadchecker.Tag;

import javafx.scene.control.MenuItem;
import javafx.scene.input.KeyCombination;

public abstract class FrameOperation
extends AbstractOperation{     
   private KeyCombination shortcut;

   
   public FrameOperation(InteractionManager editor, String identifier, Combine combine)
   {
      this(editor, identifier, combine, null);     
      }

   
   public FrameOperation(InteractionManager editor, String identifier, Combine combine, KeyCombination shortcut)
   {
      super(editor, identifier, combine);
       
      this.shortcut = shortcut;     
      }

   @OnThread(Tag.FXPlatform)
   
   protected void enablePreview()
{    
}

@OnThread(Tag.FXPlatform)
   
protected void disablePreview()
{ 
}

@OnThread(Tag.FXPlatform)
   
public void onMenuShowing(CustomMenuItem item)
{ 
}

@OnThread(Tag.FXPlatform)
   
public void onMenuHidden(CustomMenuItem item)
{ 
}

@OnThread(Tag.FXPlatform)
   
public final void activate(Frame frame)
   {
   
   activate(Collections.singletonList(frame));     
   }

@OnThread(Tag.FXPlatform)
   
public final void activate(Frame frame, RecallableFocus focus)
   {
   activate(Collections.singletonList(frame), focus);     
   }

@OnThread(Tag.FXPlatform)
   
public final void activate(List<Frame> frames)
   {
   Frame first = editor.getSelection().getSelected().isEmpty() ? null : editor.getSelection().getSelected().get(0);
   RecallableFocus focus = first == null ? null : first.getCursorBefore();
   activate(frames, focus);     
   }

@OnThread(Tag.FXPlatform)
   
public final void activate(List<Frame> frames, RecallableFocus focus)
   {
   editor.beginRecordingState(focus);
   
   disablePreview();
   execute(frames);
   editor.endRecordingState(focus);     
   }

   

| Executes the class operation on targeted frames | | @param frames targeted frames that will receive the operation | @OnThread(Tag.FXPlatform) protected abstract void execute(List<Frame> frames); public boolean onlyOnContextMenu() { return false; } public SortedMenuItem getMenuItem(boolean contextMenu) { MenuItem item; if (contextMenu) { CustomMenuItem customItem = initializeCustomItem(); customItem.getContent().setOnMouseEntered(e -> enablePreview()); customItem.getContent().setOnMouseExited(e -> disablePreview()); item = customItem; } else { item = initializeNormalItem(); } item.setOnAction(e -> { activate(editor.getSelection().getSelected()); e.consume(); }); if (shortcut != null) { item.setAccelerator(shortcut); } return getLabels().get(0).getOrder().item(item); } public KeyCombination getShortcut() { return shortcut; } }
top, use, map, abstract class FrameOperation

.   FrameOperation
.   FrameOperation
.   enablePreview
.   disablePreview
.   onMenuShowing
.   onMenuHidden
.   activate
.   activate
.   activate
.   activate
.   execute
.   onlyOnContextMenu
.   getMenuItem
.   getShortcut




133 neLoCode + 2 LoComm