internal void complete(PointF point, FlowChart fc) { cycleRoots.Clear(); affectedArrows.Clear(); completing = true; // someone might have deleted the item from a selection- change event if (currentObject == null) { return; } if (action == Action.Create) { currentObject.completeCreate(point); // someone might have deleted the item in itemCreated handler if (itemDeleted) { return; } invalidRect = Utilities.unionRects( invalidRect, currentObject.getRepaintRect(true)); fc.Dirty = true; if (currentObject.getType() != ItemType.Selection) { // add to the diagram AddItemCmd cmd = new AddItemCmd(currentObject); cmd.Execute(); fc.fireObjCreated(currentObject); // select the new item if SelectAfterCreate == true; // check for null because people just love to delete currObject // from within its xCreated or xActivated event handlers if (fc.SelectAfterCreate && currentObject != null && !itemDeleted) { invalidRect = Utilities.unionRects( invalidRect, fc.Selection.getRepaintRect(true)); fc.Selection.Change(currentObject); if (currentObject != null) { invalidRect = Utilities.unionRects( invalidRect, currentObject.getRepaintRect(true)); } } if (fc.UndoManager.UndoEnabled) { cmd.saveSelState(); } } } else { currentObject.completeModify(point, this); fc.UndoManager.onCompleteModify(); if (!itemDeleted) { invalidRect = Utilities.unionRects(invalidRect, currentObject.getRepaintRect(true)); } fc.Dirty = true; } }