package bluej.stride.generic;
import java.util.List;
import java.util.stream.Collectors;
import bluej.stride.generic.ExtensionDescription.ExtensionSource;
import threadchecker.OnThread;
import threadchecker.Tag;
public interface CanvasParent
extends CursorFinder{
p.public FrameTypeCheck check(FrameCanvas childCanvas);
p.public default FrameCursor getCursorBefore(FrameCanvas c)
{
List<FrameCanvas> canvases = getFrame().getCanvases().collect(Collectors.toList());
int index = canvases.indexOf(c);
if (index == -1)
throw new IllegalStateException("Canvas not known by parent frame");
FrameCursor candidate = null;
while (index > 0 && (candidate = canvases.get(index - 1).getLastCursor()) == null)
{
index -= 1;
}
if (candidate != null)
return candidate;
else{ return getFrame().getCursorBefore();
}
}
p.public default FrameCursor getCursorAfter(FrameCanvas c)
{
List<FrameCanvas> canvases = getFrame().getCanvases().collect(Collectors.toList());
int index = canvases.indexOf(c);
if (index == -1)
throw new IllegalStateException("Canvas not known by parent frame");
FrameCursor candidate = null;
while (index + 1 < canvases.size() && (candidate = canvases.get(index + 1).getFirstCursor()) == null)
{
index += 1;
}
if (candidate != null)
return candidate;
else{ return getFrame().getCursorAfter();
}
}
List<ExtensionDescription> getAvailableExtensions(FrameCanvas canvas, FrameCursor cursorInCanvas);
InteractionManager getEditor();
default void modifiedCanvasContent()
{
getEditor().modifiedFrame(null, false);
}
@OnThread(Tag.FXPlatform)
p.public static boolean processInnerExtensionKey(CanvasParent p, FrameCanvas canvas, FrameCursor cursor, char c, RecallableFocus rc, boolean atTop)
{
List<ExtensionDescription> candidates = p.getAvailableExtensions(canvas, cursor).stream()
.filter(e -> e.getShortcutKey() == c && e.validFor(atTop ? ExtensionSource.INSIDE_FIRST : ExtensionSource.INSIDE_LATER))
.collect(Collectors.toList());
if (candidates.size() == 0) {
return false;
}
if (candidates.size() > 1) {
throw new IllegalStateException("Ambiguous inner extension for: " + (int)c);
}
p.getEditor().beginRecordingState(rc);
candidates.get(0).activate();
p.getEditor().endRecordingState(rc);
return true;
}
Frame getFrame();
enum CanvasKind
{
FIELDS, CONSTRUCTORS, METHODS, STATEMENTS, IMPORTS;
}
default CanvasKind getChildKind(FrameCanvas c) { return CanvasKind.STATEMENTS;
}
}
top,
use,
map,
interface CanvasParent
. check
. getCursorBefore
. getCursorAfter
. modifiedCanvasContent
. processInnerExtensionKey
96 neLoCode
+ 0 LoComm