예제 #1
0
        private void NodeControl_HeaderMouseDown(object sender, MouseButtonEventArgs e)
        {
            if (e.LeftButton == MouseButtonState.Released || Keyboard.IsKeyDown(Key.Space))
            {
                return;
            }

            NodeControl      nodeControl      = sender as NodeControl;
            ContentPresenter contentPresenter = VisualTreeHelper.GetParent(nodeControl) as ContentPresenter;
            Canvas           canvas           = VisualTreeHelper.GetParent(contentPresenter) as Canvas;

            contentPresenter.SetValue(Panel.ZIndexProperty, currentZIndex++);

            if (!SelectedNodes.Contains(nodeControl.NodeInfo))
            {
                if (Keyboard.IsKeyUp(Key.LeftCtrl) && Keyboard.IsKeyUp(Key.RightCtrl) && Keyboard.IsKeyUp(Key.LeftShift) && Keyboard.IsKeyUp(Key.RightShift))
                {
                    SelectedNodes.Clear();
                }

                SelectedNodes.Add(nodeControl.NodeInfo);
            }

            movingNodeOrigins = SelectedNodes.Select(n => nodeControls[n]).ToDictionary(n => n, n => movingNodeOrigins.ContainsKey(n) ? movingNodeOrigins[n] : null);
            movingNodeOffsets = SelectedNodes.Select(n => nodeControls[n]).ToDictionary(n => n, n => movingNodeOffsets.ContainsKey(n) ? movingNodeOffsets[n] : null);

            foreach (NodeControl n in movingNodeOrigins.Keys.ToArray())
            {
                movingNodeOrigins[n] = new Point(n.NodeInfo.X, n.NodeInfo.Y);
                movingNodeOffsets[n] = e.GetPosition(n);
            }
        }
예제 #2
0
        public void ClearSelection()
        {
            foreach (Node node in graph.Nodes)
            {
                node.IsSelected = false;
                foreach (Edge edge in node.edges)
                {
                    edge.IsSelected = false;
                    foreach (EdgePart edgePart in edge.EdgeParts)
                    {
                        edgePart.IsSelected = false;
                    }
                    foreach (EdgeBreak edgeBreak in edge.EdgeBreaks)
                    {
                        edgeBreak.IsSelected = false;
                    }
                }
            }

            SelectedNodes.Clear();
            SelectedEdgeBreak = null;
            SelectedEdgePart  = null;

            SelectionChanged();
        }
        /// <summary>
        /// setup root and dictionary
        /// </summary>
        public void Setup()
        {
            // clear selected nodes
            SelectedNodes.Clear();

            // if there's no child object, clear dictionary and null root
            if (this.gameObject.transform.childCount == 0)
            {
                Dict.Clear();
                Root = null;
                return;
            }
            else // construct internal data structure and dictionary if there's a loaded object
            {
                // initialize root
                Root = new Node(this.transform.GetChild(0).gameObject, null, this.transform);

                // setup dictionary
                Dict.Clear();
                List <Node> curNodes = new List <Node>();
                curNodes.Add(Root);
                while (curNodes.Count > 0)
                {
                    Node curNode = curNodes[0];
                    Dict.Add(curNode.GameObject, curNode);
                    foreach (var child in curNode.Childs)
                    {
                        curNodes.Add(child);
                    }
                    curNodes.RemoveAt(0);
                }
            }
        }
예제 #4
0
        private void BuildSelectedNodesMenu()
        {
            SelectedNodes.Clear();

            if (Presentation == null)
            {
                return;
            }

            var transformations = Presentation.GetModule <ITransformationModule>();
            var captions        = Presentation.GetModule <ICaptionModule>();
            var selections      = Presentation.GetPropertySetFor <Selection>();

            var nodes = transformations.Graph.Nodes
                        .Union(Presentation.Graph.Nodes)
                        .Where(n => selections.TryGet(n.Id)?.IsSelected ?? false)
                        .Distinct()
                        .Select(n => new NodeWithCaption(n, captions.Get(n.Id).DisplayText))
                        .OrderBy(n => n.DisplayText);

            foreach (var n in nodes)
            {
                SelectedNodes.Add(n);
            }

            mySelectionMenuUpdatePending = false;
        }
예제 #5
0
        public void ClearMultiSelect()
        {
            foreach (UINode n in SelectedNodes)
            {
                n.HideBorder();
            }

            SelectedNodes.Clear();
        }
예제 #6
0
 public void ClearAllSelectedNodes()
 {
     for (var index = 0; index < SelectedNodes.Count; index++)
     {
         var node = SelectedNodes[index];
         node.IsSelected = false;
     }
     SelectedNodes.Clear();
 }
예제 #7
0
 public void AddNode(Node child, double x, double y, bool addedByBrain = false)
 {
     AddChildren(child);
     SetLeft(child, x);
     SetTop(child, y);
     Nodes.Add(child);
     SelectedNodes.Clear();
     SelectedNodes.Add(child);
 }
 /// <summary>
 /// Method to reset all the class properties to the default values.
 /// </summary>
 public static void Reset()
 {
     ActiveLink   = null;
     UriLink      = UriLinkType.None;
     LinkAction   = LinkAction.None;
     PublicNode   = null;
     DownloadPath = null;
     SelectedNodes.Clear();
 }
예제 #9
0
파일: TreeView.cs 프로젝트: Soju06/NUMC
        public void SelectNode(TreeNode node)
        {
            SelectedNodes.Clear();
            SelectedNodes.Add(node);

            _anchoredNodeStart = node;
            _anchoredNodeEnd   = node;

            Invalidate();
        }
예제 #10
0
        public void ClearMultiSelect()
        {
            List <UINode> toRemove = SelectedNodes.ToList();

            SelectedNodes.Clear();

            foreach (UINode n in toRemove)
            {
                n.HideBorder();
            }
        }
예제 #11
0
 private void Button_Click(object sender, RoutedEventArgs e)
 {
     foreach (var item in Nodes)
     {
         item.IsSelected = false;
         foreach (var child in item.Descendents)
         {
             child.IsSelected = false;
         }
     }
     SelectedNodes.Clear();
 }
예제 #12
0
        public static void ClearSelectedNodes()
        {
            foreach (var node in SelectedNodes)
            {
                if (node != null)
                {
                    node.DisplayMode = NodeDisplayMode.Normal;
                }
            }

            SelectedNodes.Clear();
        }
예제 #13
0
        protected override void OnAfterSelect(TreeViewEventArgs e)
        {
            // Save old selection for invalidating
            var selectedNodesOld = SelectedNodes.ToArray();

            TreeNodeMS node = (TreeNodeMS)e.Node;

            // Don't change the selection if this is a right click and the node is in the
            // selection.
            if (node != null && !(_inRightClick && node.IsInSelection))
            {
                if (IsDisjointSelect)
                {
                    // Toggle selection on the node
                    SelectNode(node, !IsNodeSelected(e.Node));
                }
                else if (IsRangeSelect && !ReferenceEquals(_anchorNode, node))
                {
                    // Figure out top and bottom of the range to be selected
                    TreeNodeMS upperNode  = _anchorNode;
                    TreeNodeMS bottomNode = node;
                    if (upperNode.BoundsMS.Top > bottomNode.BoundsMS.Top)
                    {
                        Helpers.Swap(ref upperNode, ref bottomNode);
                    }

                    // Set new selection to contain all visible nodes between top and bottom
                    SelectedNodes.Clear();
                    while (upperNode != null && !ReferenceEquals(upperNode, bottomNode))
                    {
                        SelectNode(upperNode, true);
                        upperNode = (TreeNodeMS)upperNode.NextVisibleNode;
                    }
                    SelectNode(bottomNode, true);
                }
                else
                {
                    // Make this a single selection of the selected node.
                    SelectedNodes.Clear();
                    SelectNode(node, true);
                }

                // Invalidate the changed nodes
                var unchangedNodes = new HashSet <TreeNodeMS>(selectedNodesOld.Intersect(SelectedNodes));
                InvalidateChangedNodes(selectedNodesOld, unchangedNodes);
                InvalidateChangedNodes(SelectedNodes, unchangedNodes);
            }

            Invalidate();

            // Make sure selection is updated before after select event is fired
            base.OnAfterSelect(e);
        }
예제 #14
0
        private void HandleMouseUp(object sender, MouseButtonEventArgs e)
        {
            switch (MouseMode)
            {
            case MouseModes.Nothing:

                var mouseUpOnNode = false;

                foreach (var node in NodeCollection)
                {
                    if (VisualTreeHelper.HitTest(node.Border, e.GetPosition(node)) != null)
                    {
                        mouseUpOnNode = true;
                    }
                }


                // if mouse up in empty space unselect all nodes
                if (!mouseUpOnNode && e.ChangedButton != MouseButton.Right)
                {
                    foreach (var node in SelectedNodes)
                    {
                        node.IsSelected = false;
                    }

                    SelectedNodes.Clear();
                }


                break;

            case MouseModes.Panning:

                foreach (var node in NodeCollection)
                {
                    MouseMove -= node.HostCanvas_MouseMove;
                }


                Console.WriteLine(NodeCollection.Count);

                MouseMode = MouseModes.Nothing;
                break;

            case MouseModes.Selection:
                Children.Remove(selectionRectangle);
                selectionRectangle = null;

                MouseMode = MouseModes.Nothing;
                break;
            }
        }
예제 #15
0
        private void UnselectAllElements()
        {
            foreach (var node in SelectedNodes)
            {
                node.IsSelected = false;
            }

            foreach (var conn in ConnectorCollection)
            {
                conn.IsSelected = false;
            }

            SelectedNodes.Clear();
            SelectedConnectors.Clear();
            SelectedUiElements.Clear();
        }
예제 #16
0
파일: TreeView.cs 프로젝트: Soju06/NUMC
        public void SelectNodes(List <TreeNode> nodes, bool updateAnchors = true)
        {
            SelectedNodes.Clear();

            foreach (var node in nodes)
            {
                SelectedNodes.Add(node);
            }

            if (updateAnchors && SelectedNodes.Count > 0)
            {
                _anchoredNodeStart = SelectedNodes[SelectedNodes.Count - 1];
                _anchoredNodeEnd   = SelectedNodes[SelectedNodes.Count - 1];
            }

            Invalidate();
        }
        /// <summary>
        /// setup internal node structure
        /// </summary>
        public void Setup()
        {
            // clear selected nodes
            SelectedNodes.Clear();

            // if there's no child object, clear dictionary and null root
            if (this.gameObject.transform.childCount == 0)
            {
                Root = null;
                return;
            }
            else // construct internal data structure and dictionary if there's a loaded object
            {
                // initialize root
                Root = new Node(this.transform.GetChild(0).gameObject, null, this.transform);
            }
        }
예제 #18
0
        public void TryAndDelete()
        {
            foreach (UINode n in SelectedNodes)
            {
                if (UINodeParameters.Instance != null)
                {
                    if (UINodeParameters.Instance.node == n.Node)
                    {
                        UINodeParameters.Instance.ClearView();
                    }
                }

                n.Dispose();
            }

            SelectedNodes.Clear();
        }
예제 #19
0
        private void OnMouseUp(object sender, MouseButtonEventArgs mouseButtonEventArgs)
        {
            if (MouseMode == MouseMode.SelectionRectangle && Children.Contains(_selectionZone))
            {
                Children.Remove(_selectionZone);
                SelectedNodes.Clear();
                for (var index = 0; index < Nodes.Count; index++)
                {
                    var node = Nodes[index];
                    if (node.IsSelected)
                    {
                        SelectedNodes.Add(node);
                    }
                }

                MouseMode = MouseMode.Nothing;
            }
            if (MouseMode == MouseMode.ResizingComment)
            {
                TempComment.Cursor = Cursors.Arrow;
                TempComment        = null;
            }
            HideLinkingPossiblity();
            Cursor = Cursors.Arrow;
            if (WireMode == WireMode.FirstPortSelected && (TemExecPort != null || TemObjectPort != null))
            {
                NodesTree.Show();
                MouseMode = MouseMode.Nothing;
                WireMode  = WireMode.Nothing;
            }
            else
            {
                Children.Remove(TempConn);
                MouseMode = MouseMode.Nothing;
                WireMode  = WireMode.Nothing;
            }

            _mouseEffect.Show(this, Colors.DarkGray);
            Task.Factory.StartNew(() =>
            {
                Thread.Sleep(300);
                Application.Current.Dispatcher.BeginInvoke(new Action(() => { _mouseEffect.Remove(this); }));
            });
        }
예제 #20
0
        /// <summary>
        /// ノードドラッグ中
        /// </summary>
        private void NodeItem_Dragging(object sender, NodeDraggingEventArgs e)
        {
            // フォーカス取得
            Focus();

            var ctrl = e.OriginalSource as NodeControl;

            if (ctrl == null)
            {
                return;
            }

            //
            // 以下無駄が多いので仮
            //

            // 選択されていなければ選択状態にする
            foreach (var a in e.Nodes)
            {
                NodeListItem item = PART_NodeList_.FindAssociatedNodeItem(a);
                if (!item.IsSelected)
                {
                    // Ctrlが押されていない場合セレクションリストをクリア
                    if ((Keyboard.Modifiers & ModifierKeys.Control) == 0)
                    {
                        SelectedNodes.Clear();
                    }

                    item.IsSelected = true;
                }
                else
                {
                }
            }

            // 選択中オブジェクトに移動値を加算する
            // TODO:毎回検索するのが無駄なのでキャッシュする
            foreach (var n in SelectedNodes)
            {
                NodeListItem item = PART_NodeList_.FindAssociatedNodeItem(n);
                Canvas.SetLeft(item, Canvas.GetLeft(item) + e.HorizontalChange);
                Canvas.SetTop(item, Canvas.GetTop(item) + e.VerticalChange);
            }
        }
예제 #21
0
 public void Paste()
 {
     try
     {
         SelectedNodes.Clear();
         var dummyList = Cipher.DeSerializeFromString <List <NodeProperties> >(Clipboard.GetText());
         for (var index = dummyList.Count - 1; index >= 0; index--)
         {
             var  copiednode = dummyList[index];
             var  typename   = copiednode.Name;
             Node newNode    = null;
             foreach (var node in Hub.LoadedExternalNodes)
             {
                 if (node.ToString() != typename)
                 {
                     continue;
                 }
                 newNode = node.Clone();
                 AddNode(newNode, copiednode.X, copiednode.Y);
                 newNode.DeSerializeData(copiednode.InputData, copiednode.OutputData);
                 break;
             }
             if (newNode != null)
             {
                 continue;
             }
             var type = Type.GetType(typename);
             try
             {
                 var instance = Activator.CreateInstance(type, this, false);
                 AddNode(instance as Node, copiednode.X, copiednode.Y);
             }
             catch (Exception)
             {
                 //Ignored
             }
         }
     }
     catch
     {
         //ignored
     }
 }
 /// <summary>
 /// Raises the <see cref="TreeView.AfterSelect"/> event.
 /// </summary>
 /// <remarks>
 /// This handles the selection and unselection of nodes.
 /// </remarks>
 /// <param name="e">A <see cref="TreeViewEventArgs"/> describing the event arguments.</param>
 protected override void OnAfterSelect(TreeViewEventArgs e)
 {
     if (MultiSelect)
     {
         if (((ModifierKeys & Keys.Control) > 0))
         {
             if (!SelectedNodes.Contains(e.Node))
             {
                 SelectedNodes.Add(e.Node);
             }
             else
             {
                 SelectedNodes.Remove(e.Node);
             }
         }
         else
         {
             if (((ModifierKeys & Keys.Shift) > 0) && (m_tndFirst != null))
             {
                 SelectedNodes.Clear();
                 SelectedNodes.AddRange(FindPath(m_tndFirst, e.Node));
             }
             else
             {
                 if (SelectedNodes.Count > 0)
                 {
                     SelectedNodes.Clear();
                 }
                 SelectedNodes.Add(e.Node);
             }
         }
     }
     base.OnAfterSelect(e);
     if (!MultiSelect)
     {
         if (!SelectedNodes.Contains(e.Node))
         {
             SelectedNodes.Clear();
             SelectedNodes.Add(e.Node);
         }
     }
 }
예제 #23
0
        private void Canvas_MouseDown(object sender, MouseButtonEventArgs e)
        {
            Canvas canvas = sender as Canvas;

            if (Keyboard.IsKeyDown(Key.Space) || e.MiddleButton == MouseButtonState.Pressed)
            {
                Panning      = true;
                panningStart = e.GetPosition(EditorScroller);

                canvas.CaptureMouse();
            }
            else if (e.LeftButton == MouseButtonState.Pressed)
            {
                if (e.OriginalSource != EditorScroller)
                {
                    return;
                }

                SelectedNodes.Clear();

                foreach (NodeInfo nodeInfo in FlowInfo.Nodes)
                {
                    foreach (VariableInfo variable in nodeInfo.Inputs)
                    {
                        variable.Selected = false;
                    }
                }
                foreach (VariableInfo variable in FlowInfo.Variables)
                {
                    variable.Selected = false;
                }

                Point mousePosition = e.GetPosition(EditorCanvas);

                Selecting      = true;
                SelectionStart = SelectionEnd = new Point(mousePosition.X + PanX, mousePosition.Y + PanY);

                canvas.CaptureMouse();
            }
        }
        /// <summary>
        /// Called when the user releases the mouse.
        /// </summary>
        protected override void OnMouseUp(MouseButtonEventArgs e)
        {
            base.OnMouseUp(e);

            if (e.ChangedButton == MouseButton.Left)
            {
                var wasDragSelectionApplied = false;

                if (_isDraggingSelectionRect)
                {
                    //
                    // Drag selection has ended, apply the 'selection rectangle'.
                    //

                    _isDraggingSelectionRect = false;
                    ApplyDragSelectionRect();

                    e.Handled = true;
                    wasDragSelectionApplied = true;
                }

                if (_isControlAndLeftMouseButtonDown)
                {
                    _isControlAndLeftMouseButtonDown = false;
                    ReleaseMouseCapture();


                    e.Handled = true;
                }

                if (!wasDragSelectionApplied && IsClearSelectionOnEmptySpaceClickEnabled)
                {
                    //
                    // A click and release in empty space clears the selection.
                    //
                    SelectedNodes.Clear();
                }
            }
        }
        /// <summary>
        /// Called when the user holds down the mouse.
        /// </summary>
        protected override void OnMouseDown(MouseButtonEventArgs e)
        {
            base.OnMouseDown(e);

            Focus();

            if (e.ChangedButton == MouseButton.Left &&
                (Keyboard.Modifiers & ModifierKeys.Control) != 0)
            {
                //
                //  Clear selection immediately when starting drag selection.
                //
                SelectedNodes.Clear();

                _isControlAndLeftMouseButtonDown = true;
                _origMouseDownPoint = e.GetPosition(this);

                CaptureMouse();

                e.Handled = true;
            }
        }
예제 #26
0
        protected override void OnMouseUp(MouseEventArgs e)
        {
            // If you clicked on a node that WAS previously
            // selected then, reselect it now. This will clear
            // any other selected nodes. e.g. A B C D are selected
            // the user clicks on B, now A C & D are no longer selected.
            try
            {
                // Check to see if a node was clicked on
                TreeNode node = this.GetNodeAt(e.Location);
                if (node != null)
                {
                    if (e.Button == System.Windows.Forms.MouseButtons.Right)
                    {
                        SelectedNodes.Clear();
                        SelectedNode = node;
                    }


                    else if (ModifierKeys == Keys.None && m_SelectedNodes.Contains(node))
                    {
                        // Allow user to click on image
                        int leftBound = node.Bounds.X; // - 20;
                        // Give a little extra room
                        int rightBound = node.Bounds.Right + 10;
                        if (e.Location.X > leftBound && e.Location.X < rightBound)
                        {
                            SelectNode(node);
                        }
                    }
                }

                base.OnMouseUp(e);
            }
            catch (Exception ex)
            {
                HandleException(ex);
            }
        }
예제 #27
0
        private void SelectActions()
        {
            _hoverNode = MouseOverNode();
            _hoverPort = MouseOverPort();
            if (_hoverNode != null)
            {
                if (!SelectedNodes.Contains(_hoverNode))
                {
                    SelectedNodes.Clear();
                    SelectedNodes.Add(_hoverNode);
                }

                Event.current.Use();
            }
            else if (_hoverPort != null)
            {
                Event.current.Use();
            }
            else
            {
                SelectedNodes.Clear();
            }
        }
예제 #28
0
        internal void ExcludeSelected()
        {
            if (!SelectedNodes.Any() || _currentCsprojFile == null)
            {
                return;
            }

            var content = SelectedNodes
                          .Where(n => n.NodeModel != null)
                          .Select(p => p.NodeModel)
                          .ToArray();

            _writer.WriteExclusions(content, _currentCsprojFile);

            foreach (var node in Tree)
            {
                foreach (var desc in node.Descendents)
                {
                    desc.IsSelected = false;
                }
            }
            SelectedNodes.Clear();
        }
예제 #29
0
        public bool SelectMultipleItemsForMove()
        {
            int count = ChildNodes.Count(n => n.IsMultiSelected);

            if (count < 1)
            {
                return(false);
            }

            SelectedNodes.Clear();

            foreach (var node in ChildNodes.Where(n => n.IsMultiSelected))
            {
                node.DisplayMode = NodeDisplayMode.SelectedForCopyOrMove;
                SelectedNodes.Add(node);
            }

            this.IsMultiSelectActive = false;
            this.PreviousDisplayMode = this.CurrentDisplayMode;
            this.CurrentDisplayMode  = DriveDisplayMode.CopyOrMoveItem;

            return(true);
        }
예제 #30
0
        public void GoForNode(Node node)
        {
            node.X = Math.Truncate(node.X);
            node.Y = Math.Truncate(node.Y);
            var origin = BasisOrigin;

            origin.X -= node.ActualWidth - 10;
            origin.X  = Math.Truncate(origin.X);
            origin.Y  = Math.Truncate(origin.Y);
            var difference = Point.Subtract(origin, new Point(node.X, node.Y));
            var timer      = new DispatcherTimer {
                Interval = new TimeSpan(0, 0, 0, 0, 01)
            };

            foreach (var n in Nodes)
            {
                if (difference.X < 0)
                {
                    n.X += difference.X;
                }
                else
                {
                    n.X += difference.X;
                }
                if (difference.Y < 0)
                {
                    n.Y += difference.Y;
                }
                else
                {
                    n.Y += difference.Y;
                }
                NeedsRefresh = true;
            }
            difference.X = 10;
            difference.Y = 0;
            if (difference.X != 0 || difference.Y != 0)
            {
                timer.Start();
            }
            timer.Tick += (s, e) =>
            {
                if (difference.X == 0 && difference.Y == 0)
                {
                    timer.Stop();
                }
                foreach (var n in Nodes)
                {
                    if (difference.X > 0)
                    {
                        n.X++;
                    }
                    else
                    {
                        n.X--;
                    }
                    if (difference.Y > 0)
                    {
                        n.Y++;
                    }
                    else
                    {
                        n.Y--;
                    }
                }
                if (difference.X > 0)
                {
                    difference.X--;
                }
                else
                {
                    difference.X++;
                }
                if (difference.Y > 0)
                {
                    difference.Y--;
                }
                else
                {
                    difference.Y++;
                }
            };
            SelectedNodes.Clear();
            SelectedNodes.Add(node);
        }