private static void RecursiveRemoving(BL.Buffer buff, Task targetTask) { var children = targetTask.SelectChildrenTasks(); var steps = targetTask.SelectChildrenSteps(); foreach (var step in steps) { buff.StepBuffer.Remove(step); } foreach (var child in children) { RecursiveRemoving(buff,child); } buff.TaskBuffer.Remove(targetTask); }
private void UpdateTree(Task displayTask, MoveDirections dir) { TreeCanvas.Children.Clear(); var children = displayTask.SelectChildrenTasks(); var visual = new TaskVisual { Height = 150, Width = 150 }; LevelUp.IsEnabled = displayTask.ParentId != -1; visual.Removing.IsEnabled = LevelUp.IsEnabled; visual.Desc.Text = displayTask.Description; visual.Date.Text = "С " + displayTask.BeginDate.ToShortDateString() + " по " + displayTask.EndDate.ToShortDateString(); TreeCanvas.Children.Add(visual); int i = children.Count + 1; _realCanvasWidth = visual.Width * i; OverflowCanvas(); visual.SetValue(Canvas.LeftProperty, (TreeCanvas.MinWidth - visual.Width) / 2); visual.SetValue(Canvas.TopProperty, 20.0); visual.PreviewMouseLeftButtonDown += ClearStepChanger; _parent = visual; if (displayTask.ChildrenAreSteps()) { visual.Add.Click += AddStep; } else visual.Add.Click += AddTask; bool evenCount = children.Count % 2 == 0; int center = children.Count / 2; var centerLeft = (double)visual.GetValue(Canvas.LeftProperty); int module = (i - 1) / 2; var anim = new ThicknessAnimation(dir == MoveDirections.Down ? new Thickness(0, -1000, 0, 200) : new Thickness(0, 200, 0, -1000), new Thickness(0, 0, 0, 0), new Duration(TimeSpan.FromSeconds(1))); if (dir != MoveDirections.None) visual.BeginAnimation(MarginProperty, anim); visual.Background = !displayTask.HasUncomplitedTasks() ? Brushes.LimeGreen : Brushes.Orange; visual.Removing.Click += RemoveTask; visual.Edit.Click += EditTask; foreach (var task in children) { var child = new TaskVisual { Height = 150, Width = 150, Desc = { Text = task.Description }, Date = { Text = "С " + task.BeginDate.ToShortDateString() + " по " + task.EndDate.ToShortDateString() }, Field = { Background = !task.HasUncomplitedTasks() ? Brushes.LimeGreen : Brushes.Orange } }; child.Removing.Visibility = Visibility.Collapsed; child.Edit.Visibility = Visibility.Collapsed; TreeCanvas.Children.Add(child); i--; double offset = !evenCount ? (i == center + 1 ? centerLeft : (i > center + 1 ? centerLeft + (visual.Width + visual.Width / children.Count) * module : centerLeft - (visual.Width + visual.Width / 2) * i)) : (i > center ? centerLeft + visual.Width / 2 + visual.Width / children.Count / 2 + (visual.Width / children.Count + visual.Width) * (module - 1) : centerLeft - visual.Width / 2 - visual.Width / children.Count / 2 - (visual.Width / children.Count + visual.Width) * (i - 1)); module--; child.SetValue(Canvas.LeftProperty, offset); child.SetValue(Canvas.TopProperty, visual.Height + 180); child.Add.Visibility = Visibility.Collapsed; var lane = new Line { StrokeThickness = 5, Fill = Brushes.DarkCyan, X1 = (double)visual.GetValue(Canvas.LeftProperty) + visual.Width / 2, Y1 = 20 + visual.Height, Stroke = Brushes.DarkCyan, X2 = (double)child.GetValue(Canvas.LeftProperty) + child.Width / 2, Y2 = (double)child.GetValue(Canvas.TopProperty), SnapsToDevicePixels = true }; lane.SetValue(RenderOptions.EdgeModeProperty, EdgeMode.Aliased); TreeCanvas.Children.Add(lane); if (dir != MoveDirections.None) { child.BeginAnimation(MarginProperty, anim); lane.BeginAnimation(MarginProperty, anim); } child.PreviewMouseLeftButtonUp += SelectChild; } if (TreeCanvas.Children.Count == 1) { visual.Width = visual.Height = 300; } if (displayTask.ChildrenAreSteps()) { var steps = displayTask.SelectChildrenSteps(); var list = new ListBox { Margin = new Thickness(10.0, 30, 20.0, 0.0), HorizontalAlignment = HorizontalAlignment.Center, VerticalAlignment = VerticalAlignment.Center, Width = visual.Width - 100 }; foreach (var step in steps) { var item = new ListBoxItem { Content = step.Description + "\n\n" + step.Criteria.Unit + "\t\t" + step.Criteria.CurrentValue + "/" + step.Criteria.TargetValue, BorderThickness = new Thickness(1), BorderBrush = Brushes.LightBlue, Name = "S" + step.Id }; item.Selected += StepSelected; list.Items.Add(item); } visual.Add.Click += AddStep; visual.Field.Children.Add(list); } }