public AutoBalanceCommand(Tree _tree, ObservableCollection<NodeViewModel> _nodes, List<NodeViewModel> _selectedNodes, ObservableCollection<LineViewModel> _lines)
        {
            tree = _tree;
            nodes = _nodes;
            lines = _lines;

            foreach (NodeViewModel n in _selectedNodes)
            {
                selectedNodes.Add(n);
                nodePositions.Add(new Point(n.X, n.Y));

                foreach (LineViewModel l in lines)
                {
                    if ((l.From == n || l.To == n) && !originalLines.Contains(l))
                    {
                        originalLines.Add(l);

                    }
                }
            }
            tree.nodes = new List<NodeViewModel>();
            foreach(NodeViewModel n in selectedNodes)
            {
                tree.nodes.Add(n);
            }
        }
 public RemoveNodeInTreeCommand(Tree _tree, ObservableCollection<NodeViewModel> _nodes, List<NodeViewModel> _selectedNodes, ObservableCollection<LineViewModel> _lines)
 {
     nodes = _nodes;
     lines = _lines;
     tree = _tree;
     foreach (NodeViewModel n in _selectedNodes)
         selNodes.Add(n);
 }
 public InsertNodeInTreeCommand(Tree _tree, ObservableCollection<NodeViewModel> _nodes, List<NodeViewModel> _selectedNodes, NodeViewModel _newNode, ObservableCollection<LineViewModel> _lines)
 {
     tree = _tree;
     nodes = _nodes;
     lines = _lines;
     newNode = _newNode;
     foreach(NodeViewModel n in _selectedNodes)
     {
         selNodes.Add(n);
     }
     tree.nodes = selNodes;
 }
 public void Execute()
 {
     Tree selTree = new Tree(selectedNodes, null);
     selTree.makePretty(false);
 }
 private void CallInsertNode()
 {
     
     int key = 0;
     if(!int.TryParse(AddNodeValue, out key))
     {
         System.Windows.MessageBox.Show("Invalid key to be inserted\nHint: Try an integer");
     }
     else if (!(selectedNodes != null && selectedNodes.Count > 0)) {
         System.Windows.MessageBox.Show("No node or tree selected");
     }
     else
     {
         Tree tree = new Tree(selectedNodes, Lines);
         if (tree.isValidBST())
         {
             NodeViewModel newNode = new BSTViewModel(new BST() { X = 20, Y = 20, TextOne = key.ToString()});
         newNode.Diameter = 50;
             undoRedo.InsertInUndoRedo(new InsertNodeInTreeCommand(tree, Nodes, selectedNodes, newNode, Lines));
     }
     }
     
 }
 private void CallMakePretty()
 {
     
     Tree tree = new Tree(selectedNodes,Lines);
     Tree wholeTree = new Tree(tree.getWholeTree(),Lines);
     if (wholeTree.allNodesOneParentAndLessThanThreeChildren())
         undoRedo.InsertInUndoRedo(new MakePrettyCommand(Nodes, selectedNodes));
 }
        private void CallAutoBalance()
        {
            if (selectedNodes.Count != 0)
            {
                if (selectedNodes.ElementAt(0) is BSTViewModel)
                {
                    Tree treeTest = new Tree(selectedNodes,Lines);
                    if (treeTest.hasIntKeysAndBSTNodes())
                    {
                        undoRedo.InsertInUndoRedo(new AutoBalanceCommand(treeTest, Nodes, selectedNodes, Lines));
                    }
                }
                else if (selectedNodes.ElementAt(0) is T234ViewModel)
                {

                    if (validT234Tree())
                    {
                        undoRedo.InsertInUndoRedo(new AutoBalance234(Nodes, selectedNodes, Lines));
                    }
                    
                }else
                    System.Windows.MessageBox.Show("Tree contains red/black nodes.");
            }
            
        }
 private void CallRemoveNodeInTree()
 {
     Tree tree = new Tree(selectedNodes,Lines);
     Tree wholeTree = new Tree(tree.getWholeTree(),Lines);
     if (selectedNodes == null || selectedNodes.Count != 1)
         System.Windows.MessageBox.Show("You have to mark excactly one node");
     else if (!wholeTree.isValidBST())
         System.Windows.MessageBox.Show("This tree is not valid");
     else
     {
         
         undoRedo.InsertInUndoRedo(new RemoveNodeInTreeCommand(tree, Nodes, selectedNodes, Lines));
     }        
 }
Beispiel #9
0
        private void MouseUpCanvas(MouseButtonEventArgs e)
        {
            if (!isAddingLine && MouseDownCanvasCalled)
            {
                Console.WriteLine("Inside");
                MouseDownCanvasCalled = false;
                var SelectionBoxEnd = Mouse.GetPosition(e.MouseDevice.Target);
                var smallX = Math.Min(SelectionBoxStart.X, SelectionBoxEnd.X);
                var smallY = Math.Min(SelectionBoxStart.Y, SelectionBoxEnd.Y);
                var largeX = Math.Max(SelectionBoxStart.X, SelectionBoxEnd.X);
                var largeY = Math.Max(SelectionBoxStart.Y, SelectionBoxEnd.Y);
                foreach (NodeViewModel n in Nodes)
                    if(!(n.X > largeX || n.X+n.Diameter < smallX || n.Y > largeY || n.Y+n.Diameter < smallY))
                    {
                        addToSelectedNodes(n);
                    }
                Tree yolo = new Tree(selectedNodes);

                SelectionBoxX = SelectionBoxY = SelectionBoxWidth = SelectionBoxHeight = 0;
                RaisePropertyChanged(() => SelectionBoxX);
                RaisePropertyChanged(() => SelectionBoxY);
                RaisePropertyChanged(() => SelectionBoxWidth);
                RaisePropertyChanged(() => SelectionBoxHeight);
                e.MouseDevice.Target.ReleaseMouseCapture();
            }
        }