コード例 #1
0
 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);
 }
コード例 #2
0
        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);
            }
        }