package bluej.stride.operations;

import bluej.Config;
import bluej.collect.StrideEditReason;
import bluej.stride.framedjava.elements.CodeElement;
import bluej.stride.framedjava.frames.GreenfootFrameUtil;
import bluej.stride.generic.Frame;
import bluej.stride.generic.FrameCursor;
import bluej.stride.generic.InteractionManager;
import bluej.stride.slots.EditableSlot.MenuItemOrder;
import threadchecker.OnThread;
import threadchecker.Tag;

import javafx.scene.input.KeyCode;
import javafx.scene.input.KeyCodeCombination;
import javafx.scene.input.KeyCombination;

import java.util.Arrays;
import java.util.List;

public class PasteFrameOperation
extends FrameOperation{    
   public PasteFrameOperation(InteractionManager editor)
   {        
      super(editor, "PASTE", Combine.ALL, new KeyCodeCombination(KeyCode.V, KeyCombination.SHORTCUT_DOWN));     
      }

   
   @Override
   @OnThread(Tag.FXPlatform)
   
   protected void execute(List<Frame> frames)
   {
      List<CodeElement> elements = GreenfootFrameUtil.getClipboardElements(editor.getFocusedCursor().getParentCanvas().getContext());
      if (elements != null && elements.size() > 0) {
         editor.recordEdits(StrideEditReason.FLUSH);
         if (frames.size() > 0) {
            FrameCursor insertionCursor = frames.get(0).getCursorBefore();
            DeleteFrameOperation.deleteFrames(frames, editor);
            editor.getSelection().clear();
            insertionCursor.requestFocus();             
            }

         boolean shouldDisable = !editor.getFocusedCursor().getParentCanvas().getParent().getFrame().isFrameEnabled();

         elements.forEach(codeElement -> {
         final Frame frame = codeElement.createFrame(editor);
         if (editor.getFocusedCursor().check().canPlace(frame.getClass()))
               {
            editor.getFocusedCursor().insertBlockAfter(frame);
            if (shouldDisable)
                   {
               frame.setFrameEnabled(false);                     
               }
            frame.getCursorAfter().requestFocus();                 
            }             
         });
      editor.recordEdits(StrideEditReason.PASTE_FRAMES);         
      }     
   }

   
@Override
   
public List getLabels()
   {
   return Arrays.asList(l(Config.getString("frame.operation.paste"), MenuItemOrder.PASTE));     
   } 
}
top, use, map, class PasteFrameOperation

.   PasteFrameOperation
.   execute
.   getLabels




68 neLoCode + 0 LoComm