use of edu.cmu.cs.hcii.cogtool.controller.DemoScriptCmd.ComputationUndoRedo in project cogtool by cogtool.
the class SEDemoController method changeSelfTransition.
protected boolean changeSelfTransition(final ActionScriptStep step, final AAction newAction, final double delayInSecs, final String delayLabel) {
final AAction oldAction = step.getAction();
final double oldDelayInSecs = step.getDelayInSecs();
final String oldDelayLabel = step.getDelayLabel();
if ((!oldAction.equals(newAction)) || (delayInSecs != oldDelayInSecs) || !oldDelayLabel.equals(delayLabel)) {
step.setAction(newAction);
step.setDelay(delayInSecs, delayLabel);
Demonstration demo = script.getDemonstration();
final int atIndex = demo.getStepIndex(step);
final Collection<ComputationUndoRedo> scriptsUndoRedos = DemoScriptCmd.regenerateScripts(demo, atIndex, step, interaction);
IUndoableEdit edit = new AUndoableEdit(SEDemoLID.Edit) {
@Override
public String getPresentationName() {
return EDIT_SELF_TRANSITION;
}
@Override
public void redo() {
super.redo();
step.setAction(newAction);
step.setDelay(delayInSecs, delayLabel);
DemoScriptCmd.redoAllChanges(scriptsUndoRedos);
}
@Override
public void undo() {
super.undo();
step.setAction(oldAction);
step.setDelay(oldDelayInSecs, oldDelayLabel);
DemoScriptCmd.undoAllChanges(scriptsUndoRedos);
}
};
CompoundUndoableEdit editSequence = new CompoundUndoableEdit(EDIT_SELF_TRANSITION, SEDemoLID.Edit);
editSequence.addEdit(edit);
if (CogToolPref.REGENERATE_AUTOMATICALLY.getBoolean()) {
DemoScriptCmd.regenerateScripts(project, demo, demoStateMgr, interaction, editSequence);
}
editSequence.end();
undoMgr.addEdit(editSequence);
}
return true;
}
use of edu.cmu.cs.hcii.cogtool.controller.DemoScriptCmd.ComputationUndoRedo in project cogtool by cogtool.
the class SEDemoController method deleteScriptStep.
// createInsertSelfTransitionAction
/**
* Perform the operations needed to DELETE a script Action
*
* @param selection
* @return
*/
protected boolean deleteScriptStep(SEDemoSelectionState selection) {
// In case we need to go back to edit initial state.
final CognitiveModelGenerator modelGen = script.getModelGenerator();
final Demonstration demo = script.getDemonstration();
final TaskApplication taskApp = demo.getTaskApplication();
// If there is no selected action, try to delete the last item
DefaultModelGeneratorState selectedState = selection.getSelectedState();
final DefaultModelGeneratorState stateToDelete = getValidStepState(selectedState);
IUndoableEdit edit;
// If no states, go back to edit initial state
if ((stateToDelete == null) || stateToDelete.getScriptStep().isInitiallyGenerated()) {
closeWindow(false);
demo.setStartFrameChosen(false);
SEFrameChooserController.openController(taskApp, modelGen, project);
edit = new AUndoableEdit(SEDemoLID.Delete) {
protected DemoScriptCmd.ComputationUndoRedo computeUndoRedo = new DemoScriptCmd.ComputationUndoRedo(script);
@Override
public String getPresentationName() {
return CHANGE_START_FRAME;
}
@Override
public void redo() {
super.redo();
DefaultController seDemoController = ControllerRegistry.ONLY.findOpenController(script);
if (seDemoController != null) {
seDemoController.closeWindow(false);
}
demo.setStartFrameChosen(false);
SEFrameChooserController.openController(taskApp, modelGen, project);
computeUndoRedo.redoChanges();
}
@Override
public void undo() {
super.undo();
if (demo.getStartFrame() != null) {
demo.setStartFrameChosen(true);
// Close the frame chooser window.
DefaultController frameChooserController = ControllerRegistry.ONLY.findOpenController(taskApp);
if (frameChooserController != null) {
frameChooserController.closeWindow(false);
}
// Open the new demo view window
try {
SEDemoController.openController(taskApp, modelGen, project);
} catch (GraphicsUtil.ImageException ex) {
interaction.protestInvalidImageFile();
}
computeUndoRedo.undoChanges();
}
}
};
UndoManager seFrameMgr = UndoManager.getUndoManager(taskApp, project);
seFrameMgr.addEdit(edit);
undoMgr.addEdit(edit);
return true;
}
AScriptStep step = stateToDelete.getScriptStep();
// If a generated think step, simply delete
if ((step instanceof ThinkScriptStep) && !step.isInsertedByUser()) {
edit = new AUndoableEdit(SEDemoLID.Delete) {
protected int scriptIndex = script.removeState(stateToDelete);
protected DemoScriptCmd.ComputationUndoRedo computeUndoRedo = new DemoScriptCmd.ComputationUndoRedo(script);
@Override
public String getPresentationName() {
return DELETE_STEP;
}
@Override
public void redo() {
super.redo();
script.removeState(scriptIndex);
computeUndoRedo.redoChanges();
}
@Override
public void undo() {
super.undo();
script.insertState(stateToDelete, scriptIndex);
computeUndoRedo.undoChanges();
}
};
} else {
final AScriptStep demoStep = step.getOwner();
// There are no "new" steps to replace with when deleting
Set<AScriptStep> emptyDemoSteps = new HashSet<AScriptStep>();
if (demoStep.getCurrentFrame() == demoStep.getDestinationFrame()) {
final int atIndex = demo.removeStep(demoStep);
final Collection<ComputationUndoRedo> scriptsUndoRedos = DemoScriptCmd.regenerateScripts(demo, atIndex, demoStep, interaction);
Set<AScriptStep> oldDemoSteps = Collections.singleton(demoStep);
edit = new DemoStateManager.ADemoUndoableEdit(SEDemoLID.Delete, demo, emptyDemoSteps, oldDemoSteps, demoStateMgr) {
@Override
public String getPresentationName() {
return DELETE_STEP;
}
@Override
public void redo() {
super.redo();
demo.removeStep(atIndex);
DemoScriptCmd.redoAllChanges(scriptsUndoRedos);
}
@Override
public void undo() {
super.undo();
demo.insertStep(demoStep, atIndex);
DemoScriptCmd.undoAllChanges(scriptsUndoRedos);
}
};
} else {
if ((selectedState != null) && (demoStep != demo.getLastStep()) && !interaction.confirmDeleteScriptStep()) {
return false;
}
Set<AScriptStep> oldDemoSteps = new LinkedHashSet<AScriptStep>();
final int atIndex = demo.replaceSteps(demoStep, emptyDemoSteps, oldDemoSteps);
final Collection<ComputationUndoRedo> scriptsUndoRedos = DemoScriptCmd.regenerateScripts(demo, atIndex, demoStep, interaction);
edit = new DemoStateManager.ADemoUndoableEdit(SEDemoLID.Delete, demo, emptyDemoSteps, oldDemoSteps, demoStateMgr) {
@Override
public String getPresentationName() {
return DELETE_STEP;
}
@Override
public void redo() {
super.redo();
demo.replaceSteps(atIndex, redoDemoSteps);
DemoScriptCmd.redoAllChanges(scriptsUndoRedos);
}
@Override
public void undo() {
super.undo();
demo.replaceSteps(atIndex, undoDemoSteps);
DemoScriptCmd.undoAllChanges(scriptsUndoRedos);
}
};
}
}
CompoundUndoableEdit editSequence = new CompoundUndoableEdit(DELETE_STEP, SEDemoLID.Delete);
editSequence.addEdit(edit);
if (CogToolPref.REGENERATE_AUTOMATICALLY.getBoolean()) {
DemoScriptCmd.regenerateScripts(project, demo, demoStateMgr, interaction, editSequence);
}
editSequence.end();
undoMgr.addEdit(editSequence);
return true;
}
use of edu.cmu.cs.hcii.cogtool.controller.DemoScriptCmd.ComputationUndoRedo in project cogtool by cogtool.
the class SEDemoController method performChangeDelay.
// performInsertDelay
protected boolean performChangeDelay(SEDemoSelectionState selection) {
DefaultModelGeneratorState selectedState = selection.getSelectedState();
if ((selectedState == null) || !(selectedState.getScriptStep() instanceof DelayScriptStep)) {
interaction.protestNotDelayStep();
return false;
}
final DelayScriptStep delayStep = (DelayScriptStep) selectedState.getScriptStep();
final double oldDuration = delayStep.getDelayDuration();
final String oldLabel = delayStep.getLabel();
final SEDemoInteraction.TimedActionData newData = getTimedActionData(oldDuration, oldLabel, IS_WAIT);
if (newData == null) {
return false;
}
delayStep.setDelayDuration(newData.duration);
delayStep.setLabel(newData.labelString);
final Collection<ComputationUndoRedo> computeUndoRedos = resetComputations();
IUndoableEdit edit = new AUndoableEdit(SEDemoLID.ChangeWaitProperties) {
@Override
public String getPresentationName() {
return CHG_WAIT_PROPERTIES;
}
@Override
public void redo() {
super.redo();
delayStep.setDelayDuration(newData.duration);
delayStep.setLabel(newData.labelString);
DemoScriptCmd.redoAllChanges(computeUndoRedos);
}
@Override
public void undo() {
super.undo();
delayStep.setDelayDuration(oldDuration);
delayStep.setLabel(oldLabel);
DemoScriptCmd.undoAllChanges(computeUndoRedos);
}
};
undoMgr.addEdit(edit);
return true;
}
use of edu.cmu.cs.hcii.cogtool.controller.DemoScriptCmd.ComputationUndoRedo in project cogtool by cogtool.
the class SEDemoController method setHandLocationAction.
protected void setHandLocationAction(final HandLocation handLoc) {
final Demonstration demo = script.getDemonstration();
final boolean mouseHand = demo.getMouseHand();
final DefaultModelGeneratorState initialState = demo.getInitialState();
final HandLocation oldLoc = initialState.getHandLocation(mouseHand);
final DemoStateManager.IConformanceUndoRedo conformanceUndoRedo = demoStateMgr.restoreConformance(demo);
initialState.setHandLocation(mouseHand, handLoc);
demo.alertInitialStateChange();
final Collection<ComputationUndoRedo> scriptsUndoRedos = DemoScriptCmd.regenerateScripts(demo, 0, demo.getStepAt(0), interaction);
IUndoableEdit edit = new AUndoableEdit(SEDemoLID.SetHandLocation) {
@Override
public String getPresentationName() {
return SET_HAND_LOCATION;
}
@Override
public void redo() {
super.redo();
conformanceUndoRedo.redo();
initialState.setHandLocation(mouseHand, handLoc);
demo.alertInitialStateChange();
DemoScriptCmd.redoAllChanges(scriptsUndoRedos);
}
@Override
public void undo() {
super.undo();
conformanceUndoRedo.undo();
initialState.setHandLocation(mouseHand, oldLoc);
demo.alertInitialStateChange();
DemoScriptCmd.undoAllChanges(scriptsUndoRedos);
}
};
undoMgr.addEdit(edit);
}
use of edu.cmu.cs.hcii.cogtool.controller.DemoScriptCmd.ComputationUndoRedo in project cogtool by cogtool.
the class SEDemoController method setMouseHandAction.
// resetComputations
protected void setMouseHandAction(final boolean mouseHand) {
final Demonstration demo = script.getDemonstration();
final boolean oldMouseHand = demo.getMouseHand();
final DefaultModelGeneratorState initialState = demo.getInitialState();
final HandLocation mouseHandLoc = initialState.getHandLocation(oldMouseHand);
final DemoStateManager.IConformanceUndoRedo conformanceUndoRedo = demoStateMgr.restoreConformance(demo);
demo.setMouseHand(mouseHand);
initialState.setHandLocation(mouseHand, mouseHandLoc);
initialState.setHandLocation(!mouseHand, HandLocation.OnKeyboard);
final Collection<ComputationUndoRedo> scriptsUndoRedos = DemoScriptCmd.regenerateScripts(demo, 0, demo.getStepAt(0), interaction);
IUndoableEdit edit = new AUndoableEdit(SEDemoLID.SetMouseHand) {
@Override
public String getPresentationName() {
return SET_MOUSE_HAND;
}
@Override
public void redo() {
super.redo();
conformanceUndoRedo.redo();
initialState.setHandLocation(mouseHand, mouseHandLoc);
initialState.setHandLocation(!mouseHand, HandLocation.OnKeyboard);
// Do this last as it will alert
demo.setMouseHand(mouseHand);
DemoScriptCmd.redoAllChanges(scriptsUndoRedos);
}
@Override
public void undo() {
super.undo();
conformanceUndoRedo.undo();
initialState.setHandLocation(oldMouseHand, mouseHandLoc);
initialState.setHandLocation(!oldMouseHand, HandLocation.OnKeyboard);
// Do this last as it will alert
demo.setMouseHand(oldMouseHand);
DemoScriptCmd.undoAllChanges(scriptsUndoRedos);
}
};
undoMgr.addEdit(edit);
}
Aggregations