public DiagramMouseManager(Diagram diagram) { _diagram = diagram; _currentResizeDirection = ResizeDirection.None; _leftButtonAction = MouseAction.None; _rightButtonAction = MouseAction.None; _leftButtonDown = false; _rightButtonDown = false; _leftButtonDownMousePosition = null; _currentMousePosition = null; _leftButtonDownMousePosition = null; _itemUnderCursor = null; _baseXViewOffset = 0; _baseYViewOffset = 0; _offsetWorker = null; Selector = null; }
public DiagramLabel(Diagram diagram, DiagramItem owner) : base(diagram) { Drawer = new BaseLabelDrawer(); _owner = owner; BorderPen = new Pen(new SolidColorBrush(Colors.Transparent), 0); AllowInPlaceEdit = true; IsSelectable = false; }
public void NodeAdded(DiagramItem item, NetworkObject obj) { var node = item as DiagramNode; if (node == null) return; NetworkNode networkNode = obj as NetworkNode; if (networkNode == null) return; node.Label.Text = networkNode.Name; node.UserData = networkNode.Id.ToString(); Utils.UpdateNodeStyle(node); node.Label.TextChanged += new LabelEventHandler(OnDiagramTextChanged); networkNode.PropertyChanged += new PropertyChangedEventHandler(OnNetworkNodePropertyChanged); }
public void LinkAdded(DiagramItem item, NetworkObject obj) { var edge = item as DiagramEdge; if (edge == null) return; NetworkEdge networkEdge = obj as NetworkEdge; if (networkEdge == null) return; Utils.UpdateEdgeStyleFromType(edge, networkEdge.Type); edge.UserData = networkEdge.Id.ToString(); networkEdge.PropertyChanged += new PropertyChangedEventHandler(OnNetworkEdgePropertyChanged); }
public void GoToItem(DiagramItem item) { if (item.Geometry == null) return; Point center = new Point((item.Geometry.Bounds.Left + item.Geometry.Bounds.Right) / 2, (item.Geometry.Bounds.Top + item.Geometry.Bounds.Bottom) / 2); Rect viewport = Viewport; center.X -= viewport.Width / 2; center.Y -= viewport.Height / 2; this.XViewOffset = -center.X; this.YViewOffset = -center.Y; }
private void SaveItemPart(XElement xIn, DiagramItem item) { WriteElement(xIn, "UserData", item.UserData); }
private void LoadItemPart(XElement xIn, DiagramItem item) { string res; if (ReadElement(xIn, "UserData", out res)) { item.UserData = res; } }
public virtual void ProcessLeftButtonDown() { if (_rightButtonDown) return; Selector = null; _diagram.CaptureMouse(); _leftButtonDown = true; _leftButtonAction = MouseAction.None; ResetIsUnderCursor(_currentMousePosition.HasValue ? _currentMousePosition.Value : new Point(0, 0)); _mouseDownOnItem = _itemUnderCursor; if (_diagram.Edges.Count != 0) { bool res = _diagram.Edges[0].HitTest(_currentMousePosition.Value); } if (_diagram.Selection.Contains(_itemUnderCursor) || _currentResizeDirection != ResizeDirection.None) { _leftButtonAction = MouseAction.MoveItem; } else { if (_mouseDownOnItem as DiagramNode != null || (_mouseDownOnItem as DiagramLabel != null && (_mouseDownOnItem as DiagramLabel).Owner as DiagramNode != null)) { _leftButtonAction = MouseAction.CreateEdge; } else { _leftButtonAction = MouseAction.MultiSelect; } } _leftButtonDownMousePosition = _currentMousePosition; }
private bool SelectItem(DiagramItem item) { bool isSelectionExists = _diagram.Selection.Count != 0; if (item == null) { _diagram.Selection.Clear(); return isSelectionExists; } if (item.IsSelectable == false) { var label = item as DiagramLabel; if (label.Owner != null) item = label.Owner; } bool isLabel = item as DiagramLabel != null; bool isNode = item as DiagramNode != null; bool isEdge = item as DiagramEdge != null; bool isLabelSelection = !isSelectionExists ? false : (_diagram.Selection[0] as DiagramLabel != null); bool isNodeSelection = !isSelectionExists ? false : (_diagram.Selection[0] as DiagramNode != null); bool isEdgeSelection = !isSelectionExists ? false : (_diagram.Selection[0] as DiagramEdge != null); if (isLabel && !isLabelSelection) _diagram.Selection.Clear(); if (isNode && !isNodeSelection) _diagram.Selection.Clear(); if (isEdge && !isEdgeSelection) _diagram.Selection.Clear(); if (!Keyboard.IsKeyDown(Key.LeftShift) && !Keyboard.IsKeyDown(Key.RightShift)) _diagram.Selection.Clear(); if (!_diagram.Selection.Contains(item)) _diagram.Selection.Add(item); return true; }
private void CreateEdge(Point mousePosition) { var node = _mouseDownOnItem as DiagramNode; if (node == null) { var label = _mouseDownOnItem as DiagramLabel; node = label.Owner as DiagramNode; } if (node != null && !node.Bounds.Contains(mousePosition)) { using (new DiagramUpdateLock(_diagram)) { var edge = new DiagramEdge(_diagram); edge.AnchoringMode = EdgeAnchoringMode.NodeToPoint; edge.SourceNode = node; edge.DestinationPoint = mousePosition; _currentResizeDirection = ResizeDirection.AllRoundDestination; _diagram.Selection.Clear(); _diagram.Selection.Add(edge); } _leftButtonAction = MouseAction.MoveItem; _mouseDownOnItem = null; } }
protected void ResetIsUnderCursor(Point mousePosition) { foreach (var node in _diagram.Nodes) { node.IsUnderCursor = false; } List<DiagramItem> items = new List<DiagramItem>(FindHittedItems(mousePosition)); _itemUnderCursor = null; for (int i = 0; i < items.Count; i++) { var node = items[i] as DiagramNode; if (node != null && (_currentResizeDirection == ResizeDirection.AllRoundSource || _currentResizeDirection == ResizeDirection.AllRoundDestination)) { node.IsUnderCursor = true; } if (i == 0) { _itemUnderCursor = items[i]; } } }