private void Gviewer_MouseClick(object sender, MouseEventArgs e)
        {
            if (!(selectedObjectMouseHover?.DrawingObject is Node))
            {
                return;
            }

            RestoreSelectedNodeColor();
            clickedNode = selectedObjectMouseHover;
            (clickedNode.DrawingObject as Node).Attr.Color = Color.Red;

            string entityName = (selectedObjectMouseHover.DrawingObject as Node).Attr.Id;
            IEnumerable <ERRelation>        relations  = entityRelations.GetERRelationsForSpecificEntity(entityName);
            IEnumerable <EREntityAttribute> attributes = entityRelations.GetEREntitieAttributesByEntityName(entityName);

            string description = attributes?.FirstOrDefault <EREntityAttribute>()?.Description;

            if (description == null)
            {
                description = "no entity description (sample data)";
            }
            StatusText = $"{entityName} - {description}";

            if (!entityViewerEnabled)
            {
                return;
            }
            PrepareEntityViewer();
            entityViewer.ShowEntity(entityName, relations, attributes);
        }
Example #2
0
        private Set <object> GetSetOfAffectedObjs(IViewerObject draggableObj)
        {
            Set <object> ret = new Set <object>();

            ret.Insert(draggableObj);
            IViewerNode node = draggableObj as IViewerNode;

            if (node != null)
            {
                foreach (IViewerEdge edge in Edges(node))
                {
                    ret.Insert(edge);
                }
            }
            else
            {
                IViewerEdge edge = draggableObj as IViewerEdge;
                if (edge != null)
                {
                    ret += GetSetOfAffectedObjs(edge.Source);
                    ret += GetSetOfAffectedObjs(edge.Target);
                }
                else
                {
                    IViewerObject label = draggableObj as IViewerObject;
                    if (label != null)
                    {
                        ret.Insert(draggableObj);
                    }
                }
            }
            return(ret);
        }
Example #3
0
        private void AnalyzeLeftMouseButtonClick()
        {
            bool          modifierKeyIsPressed = ModifierKeyIsPressed();
            IViewerObject obj = viewer.ObjectUnderMouseCursor;

            if (obj != null)
            {
                IViewerEdge editableEdge = obj as IViewerEdge;
                if (editableEdge != null)
                {
                    SwitchToEdgeEditing(editableEdge);
                }
                else
                {
                    if (obj.MarkedForDragging)
                    {
                        UnselectObjectForDragging(obj);
                    }
                    else
                    {
                        if (!modifierKeyIsPressed)
                        {
                            UnselectEverything();
                        }
                        SelectObjectForDragging(obj);
                    }
                    UnselectEdge();
                }
            }
        }
Example #4
0
 void AnaylyzeLeftButtonClick(IViewerObject obj)
 {
     if (obj is DNode dNode)
     {
         NodeSelected?.Invoke(this, new NodeEventArgs(dNode.DrawingNode, new GeometryPoint(0, 0)));
     }
 }
Example #5
0
        private void ResetNodeStyles(IViewerObject obj)
        {
            bool ctrlPressed = ModifierKeys == Keys.Control;

            foreach (IViewerObject viewerObj in gViewer.Entities)
            {
                if (viewerObj is DNode dNod)
                {
                    if (viewerObj != obj)
                    {
                        if (!ctrlPressed)
                        {
                            viewerObj.MarkedForDragging = false;
                            dNod.DrawingNode.Attr.Color = Styles.NODE_LINE_COLOR.ToMsAgl();
                            gViewer.Invalidate(obj);
                        }
                    }
                    else
                    {
                        viewerObj.MarkedForDragging = true;
                        dNod.DrawingNode.Attr.Color = Styles.SELECTED_NODE_LINE_COLOR.ToMsAgl();
                        gViewer.Invalidate(viewerObj);
                    }

                    if (dNod.DrawingNode.Attr.Color == Styles.SELECTED_NODE_LINE_COLOR.ToMsAgl())
                    {
                        viewerObj.MarkedForDragging = true;
                    }
                }
            }
        }
Example #6
0
 /// <summary>
 /// create a tight bounding box for the graph
 /// </summary>
 /// <param name="graphToFit"></param>
 public void FitGraphBoundingBox(IViewerObject graphToFit)
 {
     if (graphToFit != null)
     {
         geomGraphEditor.FitGraphBoundingBox(graphToFit, graphToFit.DrawingObject.GeometryObject as GeometryGraph);
         this.viewer.Invalidate();
     }
 }
Example #7
0
 private void SelectObjectForDragging(IViewerObject obj)
 {
     if (obj.MarkedForDragging == false)
     {
         obj.MarkedForDragging = true;
         dragGroup.Insert(obj);
         this.DecorateObjectForDragging(obj);
     }
 }
 /// <summary>
 ///     deletes the polyline corner
 /// </summary>
 /// <param name="edge"></param>
 /// <param name="site"></param>
 /// <param name="userData">an object to be stored in the unde action</param>
 public void DeleteSite(GeomEdge edge, Site site, IViewerObject userData)
 {
     EditedEdge = edge;
     PrepareForPolylineCornerRemoval(userData, site);
     site.Previous.Next = site.Next; //removing the site from the list
     site.Next.Previous = site.Previous;
     //just to recalc everything in a correct way
     DragEdgeWithSite(new Point(0, 0), edge,
                      site.Previous);
 }
        public UndoRedoAction PrepareForPolylineCornerRemoval(IViewerObject affectedEdge, Site site)
        {
            var action = new SiteRemoveUndoAction(EditedEdge)
            {
                RemovedSite = site,
            };

            action.AddAffectedObject(affectedEdge);
            return(InsertToListAndSetTheBoxBefore(action));
        }
        /// <summary>
        ///     prepare for polyline corner insertion
        /// </summary>
        /// <param name="affectedObj">edited objects</param>
        /// <param name="site">the site to insert</param>
        /// <returns></returns>
        internal UndoRedoAction PrepareForPolylineCornerInsertion(IViewerObject affectedObj, Site site)
        {
            var action = new SiteInsertUndoAction(EditedEdge)
            {
                InsertedSite = site,
            };

            action.AddAffectedObject(affectedObj);
            return(InsertToListAndSetTheBoxBefore(action));
        }
Example #11
0
        void RemoveDragDecorator(IViewerObject obj)
        {
            if (obj is DNode dNode)
            {
                dNode.DrawingNode.Attr.Color = Styles.NODE_LINE_COLOR.ToMsAgl();
                selectedNodeAttr.Color       = Styles.NODE_LINE_COLOR.ToMsAgl();
                gViewer.Invalidate(obj);
            }

            NoneSelected?.Invoke(this, EventArgs.Empty);
        }
Example #12
0
        void SetDragDecorator(IViewerObject obj)
        {
            var dNode = obj as DNode;

            if (dNode != null)
            {
                draggedObjectOriginalColors[dNode] = dNode.DrawingNode.Attr.Color;
                dNode.DrawingNode.Attr.Color       = Color.Magenta;
                gViewer.Invalidate(obj);
            }
        }
Example #13
0
        void RemoveDragDecorator(IViewerObject obj)
        {
            var dNode = obj as DNode;

            if (dNode != null)
            {
                dNode.DrawingNode.Attr.Color = draggedObjectOriginalColors[dNode];
                draggedObjectOriginalColors.Remove(obj);
                gViewer.Invalidate(obj);
            }
        }
Example #14
0
        void SetDragDecorator(IViewerObject obj)
        {
            ResetNodeStyles(obj);

            if (obj is DNode dNode)
            {
                dNode.DrawingNode.Attr.Color = Styles.SELECTED_NODE_LINE_COLOR.ToMsAgl();
                gViewer.Invalidate(obj);
            }

            AnaylyzeLeftButtonClick(obj);
        }
Example #15
0
        private void getValueFromViewerObject_prev(IViewerObject newObject)
        {
            var ob = newObject.DrawingObject;

            _editingObj = newObject;
            var node = ob as Node;

            if (node != null)
            {
                var att = node.Attr;
                id_box.Text      = att.Id;
                label_box.Text   = node.LabelText;
                _iset_ShapeStyle = true;
                //SelectionChanged will not fire when hidden
                shapeStyle_cmb.SelectedValue = att.Shape;
                _iset_ShapeStyle             = false;
                nodeAttrGroup.Visibility     = Visibility.Visible;
            }
            else
            {
                var edge = ob as Edge;
                if (edge == null)
                {
                    return;
                }

                var att = edge.Attr;
                id_box.Text    = att.Id;
                label_box.Text = edge.LabelText;

                edgeEditor.SetAttr(att);
                edgeEditor.Visibility = Visibility.Visible;
                ////_iset_edgeDecrate = true;

                //_iset_edgeLineStyle = true;
                //lineStyle_cmb.SelectedValue = att.FirstStyle;
                //_iset_edgeLineStyle = false;

                //_iset_edgeDecrate = true;
                //decSymbol_cmb.SelectedValue = edge.UserData==null? "": edge.UserData ;
                //_iset_edgeDecrate = false;

                //_iset_edgeSrcArrow = true;
                //srcArrowStyle_cmb.SelectedValue = att.ArrowheadAtSource;
                //_iset_edgeSrcArrow = false;

                //_iset_edgeDstArrow = true;
                //dstArrowStyle_cmb.SelectedValue = att.ArrowheadAtTarget;
                //_iset_edgeDstArrow = false;

                //edgeAttrGroup.Visibility = Visibility.Visible;
            }
        }
        /// <summary>
        ///     insert a polyline corner
        /// </summary>
        /// <param name="edge"></param>
        /// <param name="point">the point to insert the corner</param>
        /// <param name="siteBeforeInsertion"></param>
        /// <param name="affectedEntity">an object to be stored in the undo action</param>
        public void InsertSite(GeomEdge edge, Point point, Site siteBeforeInsertion, IViewerObject affectedEntity)
        {
            EditedEdge = edge;
            //creating the new site
            Site first  = siteBeforeInsertion;
            Site second = first.Next;
            var  s      = new Site(first, point, second);

            PrepareForPolylineCornerInsertion(affectedEntity, s);

            //just to recalc everything in a correct way
            DragEdgeWithSite(new Point(0, 0), edge, s);
        }
Example #17
0
        private void GViewer_ObjectUnderMouseCursorChanged(object sender, ObjectUnderMouseCursorChangedEventArgs e)
        {
            selectedObject = e.OldObject?.DrawingObject;

            if (selectedObject != null)
            {
                RestoreSelectedObjAttr();

                gViewer.Invalidate(e.OldObject);
                selectedObject = null;
            }

            IViewerObject objectUnderMouseCursor = gViewer.ObjectUnderMouseCursor;

            if (objectUnderMouseCursor == null)
            {
                gViewer.SetToolTip(toolTip, "");
            }
            else
            {
                selectedObject = objectUnderMouseCursor.DrawingObject;
                if (selectedObject is Edge edge)
                {
                    selectedObjectAttr = edge.Attr.Clone();
                    edge.Attr.Color    = DrawingColor.Blue;

                    if (e.NewObject != null)
                    {
                        gViewer.Invalidate(e.NewObject);
                    }

                    if (edge.UserData is Relationship relationship)
                    {
                        gViewer.SetToolTip(toolTip, relationship.Type);
                    }
                }
                else if (selectedObject is DrawingNode dNode)
                {
                    selectedNodeAttr = dNode.Attr.Clone();
                    dNode.Attr.Color = DrawingColor.LimeGreen;
                    gViewer.SetToolTip(toolTip, "Drag me");

                    if (e.NewObject != null)
                    {
                        gViewer.Invalidate(e.NewObject);
                    }
                }
            }
        }
Example #18
0
 void DObject_MouseMove(object sender, MouseEventArgs e)
 {
     if (e != m_CurrentEvent)
     {
         m_CurrentEvent = e;
         m_LastObjectSet = null;
     }
     if (m_LastObjectSet == null)
     {
         DObject obj = this;
         if (obj is DLabel && !(obj.ParentObject is DEdge))
             obj = obj.ParentObject;
         if (obj is DGraph)
             obj = null;
         m_LastObjectSet = ParentGraph.ObjectUnderMouseCursor = obj;
     }
 }
Example #19
0
        private void UpdateHoveredObjects(IViewerObject hoveredObject)
        {
            // Update hovered node.
            var dNode = hoveredObject as DNode;

            if (mHoveredDNode != dNode)
            {
                if (mHoveredDNode != null)
                {
                    SetBranchHighlighted(mHoveredDNode, false);
                    mHoveredDNode = null;
                }

                if (dNode != null)
                {
                    GameMasterNode nodeData = GameMasterDataManager.GetInstance().GetGameMasterNode(dNode.DrawingNode.Id);
                    if (nodeData != null)
                    {
                        mHoveredDNode = dNode;
                        SetBranchHighlighted(mHoveredDNode, true);
                    }
                }
            }

            // Update hovered edge.
            var dEdge = hoveredObject as DEdge;

            if (mHoveredDEdge != dEdge)
            {
                if (mHoveredDEdge != null)
                {
                    mHoveredDEdge.DrawingEdge.Attr.LineWidth -= 2;
                    graphViewer.Invalidate(mHoveredDEdge);
                    mHoveredDEdge = null;
                    graphViewer.SetToolTip(mHoveredEdgeTooltip, "");
                }

                if (dEdge != null)
                {
                    dEdge.DrawingEdge.Attr.LineWidth += 2;
                    graphViewer.Invalidate(dEdge);
                    mHoveredDEdge = dEdge;
                    graphViewer.SetToolTip(mHoveredEdgeTooltip, mHoveredDEdge.Edge.UserData as string);
                }
            }
        }
Example #20
0
        // Return the result of the hit test to the callback.

        private FrameworkElement GetFrameworkElementFromIViewerObject(IViewerObject viewerObject)
        {
            FrameworkElement ret;

            var vNode = viewerObject as KosmographViewerNode;

            if (vNode != null)
            {
                ret = (FrameworkElement)(vNode.NodeLabel) ?? (FrameworkElement)(vNode.NodeBoundaryPath);
            }
            else
            {
                var vLabel = viewerObject as VLabel;
                if (vLabel != null)
                {
                    ret = vLabel.FrameworkElement;
                }
                else
                {
                    var vEdge = viewerObject as KosmographViewerEdge;
                    if (vEdge != null)
                    {
                        ret = vEdge.EdgePath;
                    }
                    else
                    {
                        throw new InvalidOperationException(
#if DEBUG
                                  "Unexpected object type in GraphViewer"
#endif
                                  );
                    }
                }
            }
            if (ret == null)
            {
                throw new InvalidOperationException(
#if DEBUG
                          "did not find a framework element!"
#endif
                          );
            }

            return(ret);
        }
        private void RestorePreviouslyHoverObjectColor(IViewerObject previousViewerObject)
        {
            if (previousViewerObject == null)
            {
                return;
            }
            DrawingObject previousObject = previousViewerObject.DrawingObject;

            if (previousObject is Edge)
            {
                var edge = previousObject as Edge;
                edge.Attr.Color = Color.Black;
            }
            else if (previousObject is Node)
            {
                var node = previousObject as Node;
                node.Attr.Color = Color.Black;
            }
        }
Example #22
0
        private void getValueFromViewerObject(IViewerObject newObject)
        {
            var objs  = _graphViewer.LayoutEditor.dragGroup;
            var obj   = objs.First();
            var vnode = obj as VNode;

            if (vnode != null)
            {
                if (objs.Count() == 1)
                {
                    var att = vnode.Node.Attr;
                    id_box.Text      = att.Id;
                    label_box.Text   = vnode.Node.LabelText;
                    _iset_ShapeStyle = true;
                    //SelectionChanged will not fire when hidden
                    shapeStyle_cmb.SelectedValue = att.Shape;
                    _iset_ShapeStyle             = false;
                    nodeAttrGroup.Visibility     = Visibility.Visible;
                }
                else
                {
                    _iset_ShapeStyle             = true;
                    shapeStyle_cmb.SelectedIndex = 0;
                    _iset_ShapeStyle             = false;

                    nodeAttrGroup.Visibility = Visibility.Visible;
                }
            }
            else
            {
                var vedge = obj as VEdge;
                if (vedge == null)
                {
                    return;
                }

                var att = vedge.Edge.Attr;
                id_box.Text    = att.Id;
                label_box.Text = vedge.Edge.LabelText;
                edgeEditor.SetAttr(att);
                edgeEditor.Visibility = Visibility.Visible;
            }
        }
Example #23
0
 private void viewer_MouseDown(object sender, MsaglMouseEventArgs e)
 {
     if (e.RightButtonIsPressed)
     {
         IViewerObject ob = gv.ObjectUnderMouseCursor;
         if (ob == null)
         {
             Microsoft.Msagl.Core.Geometry.Point p = gv.ScreenToSource(e.X, e.Y);
             Node        n   = new Node(this.FindNewId());
             IViewerNode iwn = gv.CreateIViewerNode(n, p, true);
             gv.AddNode(iwn, true);
             gv.ResizeNodeToLabel(n);
         }
         else if (ob is IViewerNode)
         {
             IViewerNode existingNode = ob as IViewerNode;
             gv.RemoveNode(existingNode, true);
         }
     }
 }
Example #24
0
        void GViewerObjectUnderMouseCursorChanged(object sender, ObjectUnderMouseCursorChangedEventArgs e)
        {
            IViewerObject underCursor = gViewer.ObjectUnderMouseCursor;
            object        sel         = underCursor == null ? null : underCursor.DrawingObject;

            if (sel is Node)
            {
                var n = sel as Node;
                selection.Text = n.Id;
            }
            else if (sel is Edge)
            {
                var edge = sel as Edge;
                selection.Text = edge.Source + "->" + edge.Target;
            }
            else
            {
                selection.Text = "";
            }
        }
        private void Gviewer_ObjectUnderMouseCursorChanged(object sender, ObjectUnderMouseCursorChangedEventArgs e)
        {
            RestorePreviouslyHoverObjectColor(e.OldObject);
            if (e.OldObject != null)
            {
                gviewer.Invalidate(e.OldObject);
            }

            if (gviewer.ObjectUnderMouseCursor == null)
            {
                gviewer.SetToolTip(viewerToolTip, "");
                return;
            }

            selectedObjectMouseHover = gviewer.ObjectUnderMouseCursor;
            DrawingObject currentDrawingObject = selectedObjectMouseHover.DrawingObject;
            string        selectedObjetLabel   = null;

            if (currentDrawingObject is Edge)
            {
                var edge = currentDrawingObject as Edge;
                edge.Attr.Color    = Color.Blue;
                selectedObjetLabel = edge.Attr.Id;  // Attr.Id holds the relationship information
            }
            else if (currentDrawingObject is Node)
            {
                var node = currentDrawingObject as Node;
                node.Attr.Color = Color.Green;
                string entityName = node.Attr.Id;
                selectedObjetLabel = entityRelations.GetEREntitieAttributesByEntityName(entityName)?.FirstOrDefault <EREntityAttribute>()?.Description;
            }
            else
            {
                return;
            }
            gviewer.SetToolTip(viewerToolTip, selectedObjetLabel);
            if (e.NewObject != null)
            {
                gviewer.Invalidate(e.NewObject);
            }
        }
Example #26
0
 void DObject_MouseMove(object sender, MouseEventArgs e)
 {
     if (e != m_CurrentEvent)
     {
         m_CurrentEvent  = e;
         m_LastObjectSet = null;
     }
     if (m_LastObjectSet == null)
     {
         DObject obj = this;
         if (obj is DLabel && !(obj.ParentObject is DEdge))
         {
             obj = obj.ParentObject;
         }
         if (obj is DGraph)
         {
             obj = null;
         }
         m_LastObjectSet = ParentGraph.ObjectUnderMouseCursor = obj;
     }
 }
        void GViewerOnMouseMove(object sender, MouseEventArgs mouseEventArgs)
        {
            if (labelToChange == null)
            {
                return;
            }
            labelToChange.Text = MousePosition.ToString();
            if (viewerEntityCorrespondingToLabelToChange == null)
            {
                foreach (var e in gViewer.Entities)
                {
                    if (e.DrawingObject == labelToChange)
                    {
                        viewerEntityCorrespondingToLabelToChange = e;
                        break;
                    }
                }
            }
            if (viewerEntityCorrespondingToLabelToChange == null)
            {
                return;
            }
            var    rect = labelToChange.BoundingBox;
            var    font = new Font(labelToChange.FontName, (int)labelToChange.FontSize);
            double width;
            double height;

            StringMeasure.MeasureWithFont(labelToChange.Text, font, out width, out height);

            if (width <= 0)
            {
                //this is a temporary fix for win7 where Measure fonts return negative lenght for the string " "
                StringMeasure.MeasureWithFont("a", font, out width, out height);
            }

            labelToChange.Width  = width;
            labelToChange.Height = height;
            rect.Add(labelToChange.BoundingBox);
            gViewer.Invalidate(gViewer.MapSourceRectangleToScreenRectangle(rect));
        }
        /// <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;
            }
        }
 public UndoRedoAction PrepareForPolylineCornerRemoval(IViewerObject affectedEdge, Site site) {
     var action = new SiteRemoveUndoAction(EditedEdge) {
         RemovedSite = site,
     };
     action.AddAffectedObject(affectedEdge);
     return InsertToListAndSetTheBoxBefore(action);
 }
Example #30
0
 internal void RemoveAffectedObject(IViewerObject o)
 {
     lock (affectedObjects)
         affectedObjects.Remove(o);
 }
 /// <summary>
 ///     prepare for polyline corner insertion
 /// </summary>
 /// <param name="affectedObj">edited objects</param>
 /// <param name="site">the site to insert</param>
 /// <returns></returns>
 internal UndoRedoAction PrepareForPolylineCornerInsertion(IViewerObject affectedObj, Site site) {
     var action = new SiteInsertUndoAction(EditedEdge) {
         InsertedSite = site,
     };
     action.AddAffectedObject(affectedObj);
     return InsertToListAndSetTheBoxBefore(action);
 }
 /// <summary>
 /// constructor
 /// </summary>
 /// <param name="oldObject"></param>
 /// <param name="newObject"></param>
 public ObjectUnderMouseCursorChangedEventArgs(IViewerObject oldObject, IViewerObject newObject) {
     OldObject = oldObject;
     NewObject = newObject;
 }
 public void Invalidate(IViewerObject objectToInvalidate) {
     ((IInvalidatable) objectToInvalidate).Invalidate();
     var lgSettings = Graph.LayoutAlgorithmSettings as LgLayoutSettings;
     if (lgSettings != null) {
         var vnode = objectToInvalidate as GraphmapsNode;
         if (vnode != null)
             SetNodeAppearence(vnode);
     }
 }
 static void TheDefaultEdgeLabelDecoratorStub(IViewerObject label) {}
 void TheDefaultObjectDecoratorRemover(IViewerObject obj) {
     VoidDelegate decoratorRemover;
     if (decoratorRemovalsDict.TryGetValue(obj, out decoratorRemover)) {
         decoratorRemover(); 
         decoratorRemovalsDict.Remove(obj);
         viewer.Invalidate(obj);
     }
     var node=obj as IViewerNode;
     if (node != null)
         foreach (var edge in Edges(node))
             RemoveObjDraggingDecorations(edge);
 }
 internal bool ContainsAffectedObject(IViewerObject o)
 {
     return affectedObjects.Contains(o);
 }
 /// <summary>
 ///     deletes the polyline corner
 /// </summary>
 /// <param name="edge"></param>
 /// <param name="site"></param>
 /// <param name="userData">an object to be stored in the unde action</param>
 public void DeleteSite(GeomEdge edge, Site site, IViewerObject userData) {
     EditedEdge = edge;
     PrepareForPolylineCornerRemoval(userData, site);
     site.Previous.Next = site.Next; //removing the site from the list
     site.Next.Previous = site.Previous;
     //just to recalc everything in a correct way
     DragEdgeWithSite(new Point(0, 0), edge,
         site.Previous);
 }
 /// <summary>
 /// 
 /// </summary>
 /// <param name="viewerObject"></param>
 public void AttachLayoutChangeEvent(IViewerObject viewerObject) {
     var dre = viewerObject.DrawingObject;
     if (dre != null) {
         var geom = dre.GeometryObject;
         if (geom != null)
             geom.BeforeLayoutChangeEvent += (a, b) => ReportBeforeChange(viewerObject);
         var cluster = geom as Cluster;
         if (cluster != null) {
             var iViewerNode =(IViewerNode) viewerObject;
             iViewerNode.IsCollapsedChanged += RelayoutOnIsCollapsedChanged;
         }
         dre.IsVisibleChanged += a => ReportBeforeChange(viewerObject);
     }
 }
 /// <summary>
 /// create a tight bounding box for the graph
 /// </summary>
 /// <param name="graphToFit"></param>
 public void FitGraphBoundingBox(IViewerObject graphToFit) {
     if (graphToFit != null) {
         geomGraphEditor.FitGraphBoundingBox(graphToFit, graphToFit.DrawingObject.GeometryObject as GeometryGraph);
         viewer.Invalidate();
     }
 }
 internal void AddAffectedObject(IViewerObject o) {
     lock(affectedObjects)
     affectedObjects.Insert(o);
 }
        /// <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;
            }
        }
 void SelectObjectForDragging(IViewerObject obj) {
     if (obj.MarkedForDragging == false) {
         obj.MarkedForDragging = true;
         dragGroup.Insert(obj);
         DecorateObjectForDragging(obj);
     }
 }
 public void Invalidate(IViewerObject objectToInvalidate)
 {
     ((IInvalidatable)objectToInvalidate).Invalidate(ZoomFactor * FitFactor);
 }
 void UnselectObjectForDragging(IViewerObject obj) {
     UnselectWithoutRemovingFromDragGroup(obj);
     dragGroup.Remove(obj);
 }
        /// <summary>
        ///     insert a polyline corner
        /// </summary>
        /// <param name="edge"></param>
        /// <param name="point">the point to insert the corner</param>
        /// <param name="siteBeforeInsertion"></param>
        /// <param name="affectedEntity">an object to be stored in the undo action</param>
        public void InsertSite(GeomEdge edge, Point point, Site siteBeforeInsertion, IViewerObject affectedEntity) {
            EditedEdge = edge;
            //creating the new site
            Site first = siteBeforeInsertion;
            Site second = first.Next;
            var s = new Site(first, point, second);
            PrepareForPolylineCornerInsertion(affectedEntity, s);

            //just to recalc everything in a correct way
            DragEdgeWithSite(new Point(0, 0), edge, s);
        }
 void UnselectWithoutRemovingFromDragGroup(IViewerObject obj) {
     obj.MarkedForDragging = false;
     RemoveObjDraggingDecorations(obj);
 }
Example #47
0
 internal void AddAffectedObject(IViewerObject o)
 {
     lock (affectedObjects)
         affectedObjects.Insert(o);
 }
 static Cluster GetActiveObjectCluster(IViewerObject viewerObject) {
     var node = viewerObject.DrawingObject.GeometryObject as GeometryNode;
     return node != null ? node.ClusterParents.FirstOrDefault() : null;
 }
Example #49
0
 /// <summary>
 /// constructor
 /// </summary>
 /// <param name="lastObject"></param>
 /// <param name="newObject"></param>
 public ObjectUnderPointerChangedEventArgs(IViewerObject lastObject, IViewerObject newObject)
 {
     LastObject = lastObject;
     NewObject  = newObject;
 }
Example #50
0
 protected void DecorateObjectForDragging(IViewerObject obj)
 {
     if (m_DecoratorRemovalsDict.ContainsKey(obj))
         return;
     InvalidateBeforeTheChange(obj);
     var node = obj as DNode;
     if (node != null)
     {
         var w = node.LineWidth;
         m_DecoratorRemovalsDict[node] = (delegate() { node.LineWidth = w; });
         node.LineWidth = (int)Math.Max(LineThicknessForEditing, w * 2);
     }
     else
     {
         var edge = obj as DEdge;
         if (edge != null)
         {
             var w = edge.LineWidth;
             m_DecoratorRemovalsDict[edge] = (delegate() { edge.LineWidth = w; });
             edge.LineWidth = (int)Math.Max(LineThicknessForEditing, w * 2);
         }
     }
     Invalidate(obj);
 }
 public void Invalidate(IViewerObject objectToInvalidate) {
     ((IInvalidatable) objectToInvalidate).Invalidate();
 }
Example #52
0
 protected void RemoveObjDraggingDecorations(IViewerObject obj)
 {
     InvalidateBeforeTheChange(obj);
     Action decoratorRemover;
     if (m_DecoratorRemovalsDict.TryGetValue(obj, out decoratorRemover))
     {
         decoratorRemover();
         m_DecoratorRemovalsDict.Remove(obj);
         Invalidate(obj);
     }
     var node = obj as DNode;
     if (node != null)
         foreach (var edge in node.Edges)
             RemoveObjDraggingDecorations(edge);
 }
        FrameworkElement GetFrameworkElementFromIViewerObject(IViewerObject viewerObject) {
            FrameworkElement ret;

            var vNode = viewerObject as VNode;
            if (vNode != null) ret = vNode.FrameworkElementOfNodeForLabel ?? vNode.BoundaryPath;
            else {
                var vLabel = viewerObject as VLabel;
                if (vLabel != null) ret = vLabel.FrameworkElement;
                else {
                    var vEdge = viewerObject as VEdge;
                    if (vEdge != null) ret = vEdge.CurvePath;
                    else {
                        throw new InvalidOperationException(
#if DEBUG
                            "Unexpected object type in GraphViewer"
#endif
                            );
                    }
                }
            }
            if (ret == null)
                throw new InvalidOperationException(
#if DEBUG
                    "did not find a framework element!"
#endif
                    );

            return ret;
        }
Example #54
0
 public void Invalidate(IViewerObject editObj)
 {
     if (editObj is DObject)
     {
         (editObj as DObject).MakeVisual();
         if (editObj is IHavingDLabel && (editObj as IHavingDLabel).Label != null)
             (editObj as IHavingDLabel).Label.MakeVisual();
     }
     //PopulateChildren();
     //SetRenderTransform();
 }
 internal void RemoveAffectedObject(IViewerObject o)
 {           
     lock(affectedObjects)
     affectedObjects.Remove(o);
 }
Example #56
0
 public void InvalidateBeforeTheChange(IViewerObject editObj)
 {
     Invalidate(editObj);
 }
/*
        bool IsUnderCluster(GeometryNode node, Cluster cluster) {
            foreach(var parent in node.AllClusterAncestors)
                if (parent == cluster) return true;
            return false;
        }
*/


        void ReportBeforeChange(IViewerObject viewerObject) {
            if (CurrentUndoAction==null || CurrentUndoAction.ContainsAffectedObject(viewerObject)) return;
            CurrentUndoAction.AddAffectedObject(viewerObject);
            CurrentUndoAction.AddRestoreData(viewerObject.DrawingObject.GeometryObject,
                                         RestoreHelper.GetRestoreData(viewerObject.DrawingObject.GeometryObject));
        }
Example #58
0
        /// <summary>
        /// Forces redraw of objectToInvalidate
        /// </summary>
        /// <param name="objectToInvalidate"></param>
        public void Invalidate(IViewerObject objectToInvalidate)
        {
            var dObject = (DObject) objectToInvalidate;
            dObject.Invalidate();
            ClearBoundingBoxHierarchy();
            Core.Geometry.Rectangle box = dObject.RenderedBox; //copying aside he previous rendering box
            dObject.UpdateRenderedBox();
            box.Add(dObject.RenderedBox);
                //this is now the box to invalidate; to erase the old object and to render the new one

            panel.Invalidate(MapSourceRectangleToScreenRectangle(box));
        }
 void TheDefaultObjectDecorator(IViewerObject obj) {
     var node = obj as IViewerNode;
     if (node != null) {
         var drawingNode = node.Node;
         var w = drawingNode.Attr.LineWidth;
         decoratorRemovalsDict[node] = (() => drawingNode.Attr.LineWidth = w);
         drawingNode.Attr.LineWidth = (int) Math.Max(viewer.LineThicknessForEditing, w*2);
     } else {
         var edge = obj as IViewerEdge;
         if (edge != null) {
             var drawingEdge = edge.Edge;
             var w = drawingEdge.Attr.LineWidth;
             decoratorRemovalsDict[edge] = (() => drawingEdge.Attr.LineWidth = w);
             drawingEdge.Attr.LineWidth = (int) Math.Max(viewer.LineThicknessForEditing, w*2);
         }
     }
     viewer.Invalidate(obj);
 }
Example #60
0
 void SetDragDecorator(IViewerObject obj)
 {
     var dNode = obj as DNode;
     if (dNode != null) {
         draggedObjectOriginalColors[dNode] = dNode.DrawingNode.Attr.Color;
         dNode.DrawingNode.Attr.Color = Color.Magenta;
         gViewer.Invalidate(obj);
     }
 }