38a39,45 > /** > * The selected figure is different from the TextHolder as the TextHolder > * may be included in a DecoratorFigure. Thus, the DecoratorFigure is selected > * while the TextFigure is edited. > */ > private Figure mySelectedFigure; > 50,50c64,64 < Figure pressedFigure = drawing().findFigureInside(x, y); --- > Figure pressedFigure = drawing().findFigureInside(x, y); 53a67,67 > setSelectedFigure(pressedFigure); 56a71,71 > // do not create a new TextFigure but edit existing one 58a57,58 > > if (getTypingTarget() != null) { 59,59d56 < else if (getTypingTarget() != null) { 60a60,60 > return; 60,60c59,59 < editor().toolDone(); --- > editor().toolDone(); 61,61c61,61 < } --- > } 61a62,62 > 121,122d132 < < setUndoActivity(createUndoActivity()); 126a137,143 > if (getAddedFigure() != null) { > if (!isDeleteTextFigure()) { > // figure has been created and not immediately deleted > setUndoActivity(createPasteUndoActivity()); > getUndoActivity().setAffectedFigures( > new SingleFigureEnumerator(getAddedFigure()) > ); 127,127d136 < if (getFloatingTextField().getText().length() > 0) { 130,131d145 < else { < drawing().orphan(getAddedFigure()); 132a147,149 > else if (isDeleteTextFigure()) { > // delete action > setUndoActivity(createDeleteUndoActivity()); 133,135d156 < < TextTool.UndoActivity undoActivity = ((TextTool.UndoActivity)getUndoActivity()); < if ((undoActivity.getOriginalText() != null) || (getTypingTarget().getText() != null)) { 136,136c157,157 < // put created figure into a figure enumeration --- > // put affected figure into a figure enumeration 136a158,162 > setUndoActivity(createUndoActivity()); > getUndoActivity().setAffectedFigures( > new SingleFigureEnumerator(getTypingTarget().getRepresentingFigure())); > getTypingTarget().setText(getFloatingTextField().getText()); > ((TextTool.UndoActivity)getUndoActivity()).setBackupText(getTypingTarget().getText()); 137a151,154 > new SingleFigureEnumerator(getSelectedFigure()) > ); > // perform delete operation of DeleteCommand.UndoActivity > getUndoActivity().redo(); 138,139d150 < new SingleFigureEnumerator(getAddedFigure())); < undoActivity.setBackupText(getTypingTarget().getText()); 141a168,168 > else { 142,142c169,169 < setUndoActivity(null); --- > setUndoActivity(null); 142a170,177 > } > setAddedFigure(null); > setCreatedFigure(null); > setSelectedFigure(null); > } > > protected boolean isDeleteTextFigure() { > return getFloatingTextField().getText().length() == 0; 164a195,202 > private void setSelectedFigure(Figure newSelectedFigure) { > mySelectedFigure = newSelectedFigure; > } > > protected Figure getSelectedFigure() { > return mySelectedFigure; > } > 176a215,223 > protected Undoable createDeleteUndoActivity() { > FigureTransferCommand cmd = new DeleteCommand("Delete", editor()); > return new DeleteCommand.UndoActivity(cmd); > } > > protected Undoable createPasteUndoActivity() { > return new PasteCommand.UndoActivity(view()); > } > 205,217d251 < < if (!isValidText(getOriginalText())) { < FigureEnumeration fe = getAffectedFigures(); < while (fe.hasNextFigure()) { < getDrawingView().drawing().orphan(fe.nextFigure()); < } < } < // add text figure if it has been removed (no backup text) < else if (!isValidText(getBackupText())) { < FigureEnumeration fe = getAffectedFigures(); < while (fe.hasNextFigure()) { < getDrawingView().add(fe.nextFigure()); < } 219,222d252 < } < else { < setText(getOriginalText()); < } 237,249d266 < < // the text figure did exist but was remove < if (!isValidText(getBackupText())) { < FigureEnumeration fe = getAffectedFigures(); < while (fe.hasNextFigure()) { < getDrawingView().drawing().orphan(fe.nextFigure()); < } < } < // the text figure didn't exist before < else if (!isValidText(getOriginalText())) { < FigureEnumeration fe = getAffectedFigures(); < while (fe.hasNextFigure()) { < getDrawingView().drawing().add(fe.nextFigure()); 251,255d267 < } < } < else { < setText(getBackupText()); < }