示例#1
0
        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;
            }
        }