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