/// <summary>
        /// creates a "tight" bounding box
        /// </summary>
        /// <param name="affectedEntity">the object corresponding to the graph</param>
        /// <param name="geometryGraph"></param>
        public void FitGraphBoundingBox(object affectedEntity, GeometryGraph geometryGraph)
        {
            if (geometryGraph != null)
            {
                UndoRedoAction uAction = new UndoRedoAction(geometryGraph);
                uAction.Graph = geometryGraph;
                undoRedoActionsList.AddAction(uAction);
                Rectangle r = new Rectangle();
                foreach (GeomNode n in geometryGraph.NodeMap.Values)
                {
                    r = n.BoundingBox; break;
                }
                foreach (GeomNode n in geometryGraph.NodeMap.Values)
                {
                    r.Add(n.BoundingBox);
                }
                foreach (GeomEdge e in geometryGraph.Edges)
                {
                    r.Add(e.BoundingBox);
                    if (e.Label != null)
                    {
                        r.Add(e.Label.BoundingBox);
                    }
                }


                r.Left   -= geometryGraph.Margins;
                r.Top    += geometryGraph.Margins;
                r.Bottom -= geometryGraph.Margins;
                r.Right  += geometryGraph.Margins;
                uAction.AffectedObjects = new Set <object>();
                uAction.AffectedObjects.Insert(affectedEntity);
                uAction.GraphBoundingBoxAfter = geometryGraph.BoundingBox = r;
            }
        }
 internal UndoRedoAction InsertToListAndSetTheBoxBefore(UndoRedoAction action)
 {
     UndoRedoActionsList.AddAction(action);
     action.GraphBoundingBoxBefore = action.Graph.BoundingBox;
     RaiseChangeInUndoList();
     return(action);
 }
        /// <summary>
        ///     preparing for an edge corner dragging
        /// </summary>
        /// <param name="geometryEdge"></param>
        /// <param name="site"></param>
        /// <returns></returns>
        public UndoRedoAction PrepareForEdgeCornerDragging(GeomEdge geometryEdge, Site site)
        {
            EditedEdge = geometryEdge;
            UndoRedoAction edgeDragUndoRedoAction = CreateEdgeEditUndoRedoAction();

//            var edgeRestoreDate = (EdgeRestoreData) edgeDragUndoRedoAction.GetRestoreData(geometryEdge);
//            edgeRestoreDate.Site = site;
            return(InsertToListAndSetTheBoxBefore(edgeDragUndoRedoAction));
        }
        ///// <summary>
        ///// preparation
        ///// </summary>
        //public void PrepareForEditing(object userData) {
        //    UndoRedoAction action=this.undoRedoActionsList.AddAction(CreateUndoRedoAction(userData));
        //    action.GraphBoundingBoxBefore = action.Graph.BoundingBox;
        //}

/// <summary>
/// prepares for node dragging
/// </summary>
/// <param name="affectedObjects">LayoutEditor just keeps these object for the client convenience</param>
/// <param name="markedObjects">markedObjects will be dragged</param>
/// <returns></returns>
        public UndoRedoAction PrepareForObjectDragging(Set <object> affectedObjects, IEnumerable <GeometryObject> markedObjects)
        {
            this.EditedEdge = null;
            ClearDraggedSets();
            CalculateDragSetsAndSubscribeToLayoutChangedEvent(markedObjects);
            UndoRedoAction action = CreateEditUndoRedoAction(affectedObjects);

            return(InsertToListAndFixTheBox(action));
        }
        internal UndoRedoAction AddAction(UndoRedoAction action) {
            if (CurrentUndo != null)
                CurrentUndo.Next = action;

            action.Previous = CurrentUndo;
            CurrentUndo = action;
            CurrentRedo = null;

            return action;
        }
        /// <summary>
        /// preparing for an edge corner dragging
        /// </summary>
        /// <param name="affectedObjects"></param>
        /// <param name="geometryEdge"></param>
        /// <param name="site"></param>
        /// <returns></returns>
        public UndoRedoAction PrepareForEdgeCornerDragging(Set <object> affectedObjects,
                                                           GeomEdge geometryEdge, Site site)
        {
            this.EditedEdge = geometryEdge;
            UndoRedoAction  edgeDragUndoRedoAction = (EdgeDragUndoRedoAction)CreateEdgeEditUndoRedoAction(affectedObjects);
            EdgeRestoreData edgeRestoreDate        = (EdgeRestoreData)edgeDragUndoRedoAction.GetRestoreData(geometryEdge);

            edgeRestoreDate.Site = site;
            return(InsertToListAndFixTheBox(edgeDragUndoRedoAction));
        }
Beispiel #7
0
 static void InvalidateActionEditedElems(UndoRedoAction action, InvalidateDelegate invalidateDelegate)
 {
     if (action.AffectedObjects != null)
     {
         foreach (IViewerObject obj in action.AffectedObjects)
         {
             invalidateDelegate(obj);
         }
     }
 }
        internal UndoRedoAction AddAction(UndoRedoAction action)
        {
            if (CurrentUndo != null)
            {
                CurrentUndo.Next = action;
            }

            action.Previous = CurrentUndo;
            CurrentUndo     = action;
            CurrentRedo     = null;

            return(action);
        }
Beispiel #9
0
 public void Undo()
 {
     if (geomGraphEditor.CanUndo)
     {
         UndoRedoAction action = geomGraphEditor.CurrentUndoAction;
         InvalidateActionEditedElems(action, new InvalidateDelegate(viewer.InvalidateBeforeTheChange));
         geomGraphEditor.Undo();
         InvalidateActionEditedElems(action, new InvalidateDelegate(viewer.Invalidate));
         viewer.OnDragEnd(ActionAffectedObjs(action.AffectedObjects));
         if (action.GraphBoundingBoxHasChanged)
         {
             viewer.Invalidate();
         }
     }
 }
        /// <summary>
        ///     creates a "tight" bounding box
        /// </summary>
        /// <param name="affectedEntity">the object corresponding to the graph</param>
        /// <param name="geometryGraph"></param>
        public void FitGraphBoundingBox(IViewerObject affectedEntity, GeometryGraph geometryGraph)
        {
            if (geometryGraph != null)
            {
                var uAction = new UndoRedoAction(geometryGraph)
                {
                    Graph = geometryGraph
                };
                UndoRedoActionsList.AddAction(uAction);
                var r = new Rectangle();
                foreach (GeomNode n in geometryGraph.Nodes)
                {
                    r = n.BoundingBox;
                    break;
                }
                foreach (GeomNode n in geometryGraph.Nodes)
                {
                    r.Add(n.BoundingBox);
                }
                foreach (GeomEdge e in geometryGraph.Edges)
                {
                    r.Add(e.BoundingBox);
                    if (e.Label != null)
                    {
                        r.Add(e.Label.BoundingBox);
                    }
                }


                r.Left   -= geometryGraph.Margins;
                r.Top    += geometryGraph.Margins;
                r.Bottom -= geometryGraph.Margins;
                r.Right  += geometryGraph.Margins;
                uAction.ClearAffectedObjects();
                uAction.AddAffectedObject(affectedEntity);
                uAction.GraphBoundingBoxAfter = geometryGraph.BoundingBox = r;
            }
        }
        /// <summary>
        ///     creates a "tight" bounding box
        /// </summary>
        /// <param name="affectedEntity">the object corresponding to the graph</param>
        /// <param name="geometryGraph"></param>
        public void FitGraphBoundingBox(IViewerObject affectedEntity, GeometryGraph geometryGraph) {
            if (geometryGraph != null) {
                var uAction = new UndoRedoAction(geometryGraph) {Graph = geometryGraph};
                UndoRedoActionsList.AddAction(uAction);
                var r = new Rectangle();
                foreach (GeomNode n in geometryGraph.Nodes) {
                    r = n.BoundingBox;
                    break;
                }
                foreach (GeomNode n in geometryGraph.Nodes) {
                    r.Add(n.BoundingBox);
                }
                foreach (GeomEdge e in geometryGraph.Edges) {
                    r.Add(e.BoundingBox);
                    if (e.Label != null)
                        r.Add(e.Label.BoundingBox);
                }


                r.Left -= geometryGraph.Margins;
                r.Top += geometryGraph.Margins;
                r.Bottom -= geometryGraph.Margins;
                r.Right += geometryGraph.Margins;
                uAction.ClearAffectedObjects();
                uAction.AddAffectedObject(affectedEntity);
                uAction.GraphBoundingBoxAfter = geometryGraph.BoundingBox = r;
            }
        }
 internal UndoRedoAction InsertToListAndSetTheBoxBefore(UndoRedoAction action) {
     UndoRedoActionsList.AddAction(action);
     action.GraphBoundingBoxBefore = action.Graph.BoundingBox;
     RaiseChangeInUndoList();
     return action;
 }