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