package bluej.stride.operations;

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

import bluej.Config;
import bluej.collect.StrideEditReason;
import bluej.stride.generic.FrameCursor;
import bluej.stride.slots.EditableSlot.MenuItemOrder;
import bluej.stride.generic.Frame;
import bluej.stride.generic.InteractionManager;
import threadchecker.OnThread;
import threadchecker.Tag;

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

public class DeleteFrameOperation
extends FrameOperation{     
   public DeleteFrameOperation(InteractionManager editor)
   {        
      super(editor, "DELETE", Combine.ALL, new KeyCodeCombination(KeyCode.DELETE));     
      }

   
   @Override
   
   public List getLabels()
   {
      return Arrays.asList(l(Config.getString("frame.operation.delete"), MenuItemOrder.DELETE));     
      }

   @OnThread(Tag.FXPlatform)
   
   @Override
   
   public void enablePreview()
   {
      editor.getSelection().setDeletePreview(true);     
      }

   @OnThread(Tag.FXPlatform)
   
   @Override
   
   public void disablePreview()
   {
      editor.getSelection().setDeletePreview(false);     
      }

   
   @Override
   @OnThread(Tag.FXPlatform)
   
   protected void execute(List<Frame> frames)
   {
      editor.recordEdits(StrideEditReason.FLUSH);
      int effort = frames.stream().mapToInt(Frame::calculateEffort).sum();
      editor.showUndoDeleteBanner(effort);
      deleteFrames(frames, editor);
      editor.recordEdits(StrideEditReason.DELETE_FRAMES_MENU);     
      }

   @OnThread(Tag.FXPlatform)
   
   public static void deleteFrames(List<Frame> frames, InteractionManager editor)
   {
      if (!frames.isEmpty())
       {
         FrameCursor focusAfter = frames.get(0).getCursorBefore();
         frames.forEach(frame -> frame.getParentCanvas().removeBlock(frame));
           
         
         editor.getSelection().clear();
         focusAfter.requestFocus();         
         }
       

      else
       {
         editor.getSelection().clear();         
         }     
      }

   
   @Override
   
   public boolean onlyOnContextMenu()
   {        
      return true;     
      } 
   }
top, use, map, class DeleteFrameOperation

.   DeleteFrameOperation
.   getLabels
.   enablePreview
.   disablePreview
.   execute
.   deleteFrames
.   onlyOnContextMenu




89 neLoCode + 0 LoComm