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