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; > 50c57,62 < Figure pressedFigure = drawing().findFigureInside(x, y); --- > > if (getTypingTarget() != null) { > editor().toolDone(); > return; > } > 51a64 > Figure pressedFigure = drawing().findFigureInside(x, y); 53a67 > setSelectedFigure(pressedFigure); 56a71 > // do not create a new TextFigure but edit existing one 59,61d73 < else if (getTypingTarget() != null) { < editor().toolDone(); < } 121,122d132 < < setUndoActivity(createUndoActivity()); 127c137,143 < if (getFloatingTextField().getText().length() > 0) { --- > if (getAddedFigure() != null) { > if (!isDeleteTextFigure()) { > // figure has been created and not immediately deleted > setUndoActivity(createPasteUndoActivity()); > getUndoActivity().setAffectedFigures( > new SingleFigureEnumerator(getAddedFigure()) > ); 130,131d145 < else { < drawing().orphan(getAddedFigure()); 133,136c147,149 < < TextTool.UndoActivity undoActivity = ((TextTool.UndoActivity)getUndoActivity()); < if ((undoActivity.getOriginalText() != null) || (getTypingTarget().getText() != null)) { < // put created figure into a figure enumeration --- > else if (isDeleteTextFigure()) { > // delete action > setUndoActivity(createDeleteUndoActivity()); 138,139c151,154 < new SingleFigureEnumerator(getAddedFigure())); < undoActivity.setBackupText(getTypingTarget().getText()); --- > new SingleFigureEnumerator(getSelectedFigure()) > ); > // perform delete operation of DeleteCommand.UndoActivity > getUndoActivity().redo(); 142c157,162 < setUndoActivity(null); --- > // put affected figure into a figure enumeration > setUndoActivity(createUndoActivity()); > getUndoActivity().setAffectedFigures( > new SingleFigureEnumerator(getTypingTarget().getRepresentingFigure())); > getTypingTarget().setText(getFloatingTextField().getText()); > ((TextTool.UndoActivity)getUndoActivity()).setBackupText(getTypingTarget().getText()); 147a168,177 > else { > setUndoActivity(null); > } > 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()); < }