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;
        }
Example #3
0
        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);
        }
Example #4
0
        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);
        }
Example #5
0
        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];
                }
            }
        }