package bluej.stride.framedjava.frames;

import bluej.stride.framedjava.ast.ExpressionSlotFragment;
import bluej.stride.generic.FrameContentItem;
import bluej.utility.javafx.JavaFXUtil;
import javafx.application.Platform;
import bluej.stride.framedjava.ast.FilledExpressionSlotFragment;
import bluej.stride.framedjava.elements.AssignElement;
import bluej.stride.framedjava.slots.ExpressionSlot;
import bluej.stride.framedjava.slots.FilledExpressionSlot;
import bluej.stride.generic.FrameFactory;
import bluej.stride.generic.InteractionManager;
import bluej.stride.generic.SingleLineFrame;
import bluej.stride.slots.Focus;
import bluej.stride.slots.HeaderItem;
import bluej.stride.slots.SlotLabel;
import bluej.utility.javafx.SharedTransition;
import threadchecker.OnThread;
import threadchecker.Tag;


| A set statement for assignment, e.g. "set x = 1" |* @author Fraser McKay */ public class AssignFrame extends SingleLineFrame implements CodeFrame<AssignElement>, DebuggableFrame{ public static final String ASSIGN_SYMBOL = "\u21D0"; private final ExpressionSlot<FilledExpressionSlotFragment> slotLHS; private final ExpressionSlot<FilledExpressionSlotFragment> slotRHS; private AssignElement element; private SlotLabel assignLabel; | |/** | Default constructor. | @param editor | private AssignFrame(InteractionManager editor) { super(editor, null, "set-"); slotRHS = new FilledExpressionSlot(editor, this, this, getHeaderRow(), "", FilledExpressionSlot.SRC_HINTS); slotRHS.setSimplePromptText("new-value"); slotLHS = new FilledExpressionSlot(editor, this, this, getHeaderRow(), "assign-lhs-"); slotLHS.setSimplePromptText("variable"); assignLabel = new SlotLabel(ASSIGN_SYMBOL); setHeaderRow(slotLHS, assignLabel, slotRHS, previewSemi); slotLHS.addClosingChar('='); slotLHS.addClosingChar(' '); } AssignFrame(InteractionManager editor, String lhs, String rhs) { this(editor); slotLHS.setText(lhs); slotRHS.setText(rhs); if (Platform.isFxApplicationThread()) { JavaFXUtil.runPlatformLater(() -> slotRHS.requestFocus(Focus.LEFT)); } } public AssignFrame(InteractionManager editor, FilledExpressionSlotFragment lhs, FilledExpressionSlotFragment rhs, boolean enabled) { this(editor); slotLHS.setText(lhs); slotRHS.setText(rhs); frameEnabledProperty.set(enabled); } @Override public void regenerateCode() { element = new AssignElement(this, slotLHS.getSlotElement(), slotRHS.getSlotElement(), frameEnabledProperty.get()); } @Override public AssignElement getCode() { return element; } public static FrameFactory getFactory() { return new FrameFactory<AssignFrame>() { @Override public AssignFrame createBlock(InteractionManager editor) { return new AssignFrame(editor); } @Override public Class getBlockClass() { return AssignFrame.class; } }; } public ExpressionSlot getLHS() { return slotLHS; } public ExpressionSlot getRHS() { return slotRHS; } @Override @OnThread(Tag.FXPlatform) public boolean backspaceAtStart(FrameContentItem row, HeaderItem src) { if (src == slotRHS) { collapseIntoMethodCall(); return true; } else{ return super.backspaceAtStart(row, src); } } @Override @OnThread(Tag.FXPlatform) public boolean deleteAtEnd(FrameContentItem row, HeaderItem src) { if (src == slotLHS) { collapseIntoMethodCall(); return true; } return false; } @OnThread(Tag.FXPlatform) private void collapseIntoMethodCall() { getParentCanvas().replaceBlock(this, new CallFrame(getEditor(), slotLHS.getText(), slotRHS.getText())); } @Override public @OnThread(Tag.FXPlatform) void setView(View oldView, View newView, SharedTransition animation) { super.setView(oldView, newView, animation); assignLabel.setText(newView == View.JAVA_PREVIEW ? "=" : ASSIGN_SYMBOL); } }

.   AssignFrame
.   AssignFrame
.   regenerateCode
.   getCode
.   getFactory
.   createBlock
.   getBlockClass
.   getLHS
.   getRHS
.   backspaceAtStart
.   deleteAtEnd
.   collapseIntoMethodCall
.   setView




171 neLoCode + 4 LoComm