package bluej.stride.generic;
import java.io.IOException;
import java.io.StringReader;
import java.util.List;
import java.util.stream.Collectors;
import javafx.scene.Node;
import nu.xom.Builder;
import bluej.parser.entity.EntityResolver;
import bluej.stride.framedjava.elements.ClassElement;
import bluej.stride.framedjava.elements.TopLevelCodeElement;
import bluej.stride.framedjava.frames.TopLevelFrame;
import nu.xom.ParsingException;
| Stores a ClassElement's state as XML
|
public class FrameState
{
private String classElementXML;
private int cursorIndex;
private int cursorInfo;
public FrameState(TopLevelCodeElement topLevelElement)
{
this.classElementXML = topLevelElement.toXML().toXML();
cursorIndex = -1;
cursorInfo = -1;
}
public FrameState(TopLevelFrame<?> frame, TopLevelCodeElement classElement, RecallableFocus focusOverride)
{
this.classElementXML = classElement.toXML().toXML();
List<RecallableFocus> focusables = frame.getFocusables().collect(Collectors.toList());
this.cursorIndex = -1;
if (focusOverride != null) {
this.cursorIndex = focusables.indexOf(focusOverride);
this.cursorInfo = focusOverride.getFocusInfo();
}
else {
for (int i = 0; i < focusables.size(); i++) {
RecallableFocus recallableFocus = focusables.get(i);
if (recallableFocus!= null && recallableFocus.isFocused()) {
this.cursorIndex = i;
this.cursorInfo = recallableFocus.getFocusInfo();
break;
}
}
}
}
| Create a ClassElement corresponding to this FrameState.
|
| @param resolver The resolver used to resolve identifiers
| @param packageName The name of the package containing the class (empty string for default package)
| @return A new ClassElement.
|
public ClassElement getClassElement(EntityResolver resolver, String packageName)
{
try
{
return new ClassElement(new Builder().build(new StringReader(classElementXML))
.getRootElement(), resolver, packageName);
}
catch (IOException | ParsingException e)
{
throw new RuntimeException(e);
}
}
@Override
public boolean equals(Object obj)
{
if ( obj == null || !(obj instanceof FrameState) ) {
return false;
}
FrameState otherState = (FrameState)obj;
return otherState.classElementXML.equals(classElementXML);
}
@Override
public int hashCode()
{
return classElementXML.hashCode();
}
public Node recallFocus(TopLevelFrame<?> frame)
{
List<RecallableFocus> focusables = frame.getFocusables().collect(Collectors.toList());
if (cursorIndex >= 0 && cursorIndex < focusables.size()) {
return focusables.get(cursorIndex).recallFocus(cursorInfo);
}
return null;
}
}
top,
use,
map,
class FrameState
. FrameState
. FrameState
. getClassElement
. equals
. hashCode
. recallFocus
116 neLoCode
+ 5 LoComm