Ejemplo n.º 1
0
        private AnimationScenario PlayExpandAnimation(ViewStatus viewStatus, ColumnViewModel columnViewModel)
        {
            AnimationHint hint = null;// stashedViewStatus.AnimationHint;
            IEnumerable <RowViewModel> previousRowViewModels = (stashedViewStatus.TableViewState == TableViewState.AllRow) ? SheetViewModel.AllRowViewModels : stashedViewStatus.GroupedRowViewModels;
            IEnumerable <RowViewModel> currentRowViewModels  = viewStatus.IsAllRowViewModelVisible ? SheetViewModel.AllRowViewModels : viewStatus.GroupedRowViewModels;
            Double     beforeX    = hint.ColumnViewModelPosition[columnViewModel];
            Double     afterX     = columnViewModel.X;
            Int32      index      = 0;
            Storyboard storyboard = new Storyboard();
            Double     horizontalAnimationDuration = 0;

            Canvas canvas = view.TableView.AnimatingRowCanvas;

            canvas.Children.Clear();

            RowViewModel               rootGroupedRowViewModel = stashedViewStatus.GroupedRowViewModels[0];
            Int32                      rootIndex = 0;
            IEnumerable <Row>          rows      = rootGroupedRowViewModel.Rows;
            IEnumerable <RowViewModel> expandingRowViewModels =
                currentRowViewModels
                .Where(rvm => (rvm.Row == null ? rows.Intersect(rvm.Rows).Count() > 0 : rows.Contains(rvm.Row)) && rvm.Y < mainPageViewModel.Bounds.Height)
                .OrderBy(rvm => rvm.Y)
                .Take(50);

            if (expandingRowViewModels.Count() < 5)
            {
                index = 0;
                foreach (GroupedRows groupedRows in stashedViewStatus.GroupedRows)
                {
                    IEnumerable <RowViewModel> candidate =
                        currentRowViewModels
                        .Where(rvm => (rvm.Row == null ? groupedRows.Rows.Intersect(rvm.Rows).Count() > 0 : groupedRows.Rows.Contains(rvm.Row)) && rvm.Y < mainPageViewModel.Bounds.Height)
                        .OrderBy(rvm => rvm.Y)
                        .Take(50);

                    if (candidate.Count() >= 5)
                    {
                        rootGroupedRowViewModel = stashedViewStatus.GroupedRowViewModels[index];
                        rows = groupedRows.Rows;
                        expandingRowViewModels = candidate;
                        rootIndex = index;
                        break;
                    }
                    index++;
                }
            }

            viewStatus.ColorRowViewModels(allRowViewModels, viewStatus.GroupedRowViewModels, viewStatus.GroupedRows);


            if (viewStatus.IsAllRowViewModelVisible)
            {
                // root
                {
                    AnimatingRowViewModel arvm = new AnimatingRowViewModel()
                    {
                        RowViewModel    = rootGroupedRowViewModel,
                        X               = beforeX,
                        ColumnViewModel = columnViewModel
                    };

                    AnimatingRowPresenter arp = new AnimatingRowPresenter()
                    {
                        AnimatingRowViewModel = arvm
                    };

                    arp.Opacity = 1;
                    arp.Update();
                    canvas.Children.Add(arp);
                    Canvas.SetTop(arp, rootGroupedRowViewModel.StashedY);
                    arp.CellPresenter.Foreground = new SolidColorBrush(rootGroupedRowViewModel.Color);

                    storyboard.Children.Add(Util.Animator.Generate(arp, "Opacity", 0, UnitAnimationDuration, DelayBeforeAnimation));
                }

                index = 0;
                foreach (RowViewModel rvm in expandingRowViewModels)
                {
                    AnimatingRowViewModel arvm = new AnimatingRowViewModel()
                    {
                        RowViewModel    = rvm,
                        X               = beforeX,
                        ColumnViewModel = columnViewModel
                    };

                    AnimatingRowPresenter arp = new AnimatingRowPresenter()
                    {
                        AnimatingRowViewModel = arvm
                    };

                    arp.Opacity = 0;
                    arp.Update();
                    canvas.Children.Add(arp);

                    Canvas.SetTop(arp, rootGroupedRowViewModel.StashedY);
                    arp.CellPresenter.Foreground = new SolidColorBrush(rootGroupedRowViewModel.Color);

                    storyboard.Children.Add(Util.Animator.Generate(arp, "(Canvas.Top)", rvm.Y, UnitAnimationDuration, DelayBeforeAnimation));
                    storyboard.Children.Add(Util.Animator.Generate(arp, "Opacity", 1, UnitAnimationDuration, DelayBeforeAnimation));

                    storyboard.Children.Add(
                        Util.Animator.GenerateColorAnimation(arp.CellPresenter, "(TextBlock.Foreground).(SolidColorBrush.Color)", rvm.Color, UnitAnimationDuration, DelayBeforeAnimation)
                        );

                    if (beforeX != afterX)
                    {
                        storyboard.Children.Add(Util.Animator.Generate(arp.CellPresenter, "(Canvas.Left)", afterX, UnitAnimationDuration, DelayBeforeAnimation + UnitAnimationDuration));
                        horizontalAnimationDuration = UnitAnimationDuration;
                    }
                    index++;
                }
            }
            else // grouped row visible
            {
            }

            stashedViewStatus = null;
            return(new AnimationScenario()
            {
                TotalAnimationDuration = DelayBeforeAnimation + UnitAnimationDuration + horizontalAnimationDuration,
                TableHeaderUpdateTime = DelayBeforeAnimation + UnitAnimationDuration,
                AnimationStoryboard = storyboard
            });
        }
Ejemplo n.º 2
0
        void UpdateRows(ViewStatus viewStatus)
        {
            Int32 index = 0;

            if (SelectedRows != null) // 로우 선택 중
            {
                AllRowViewModels.Sort(new RowViewModelComparer(SheetViewModel, viewStatus, SelectedRows));
                index = 0;
                foreach (RowViewModel rowViewModel in AllRowViewModels)
                {
                    rowViewModel.Index = index++;
                }

                State             = TableViewState.SelectedRow;
                PaddedSheetHeight = Math.Max(SheetViewModel.AllRowsSheetHeight, SheetViewHeight);
            }
            else if (viewStatus.IsAllRowViewModelVisible)
            {
                AllRowViewModels.Sort(new RowViewModelComparer(SheetViewModel, viewStatus, null));
                index = 0;
                foreach (RowViewModel rowViewModel in AllRowViewModels)
                {
                    rowViewModel.Index = index++;
                }
                ActivatedRowViewModels = AllRowViewModels;
                State             = TableViewState.AllRow;
                PaddedSheetHeight = Math.Max(SheetViewModel.AllRowsSheetHeight, SheetViewHeight);

                //모든 로우가 보이더라도 (NvsNC)의 경우 피봇 테이블을 위해서 groupedRowViewModel 수정해줘야함
                if (viewStatus.IsCNN)
                {
                    GroupedRowViewModels = new List <RowViewModel>(viewStatus.GroupedRowViewModels);
                }
            }
            else
            {
                Boolean isDirty = false;
                if (GroupedRowViewModels == null)
                {
                    isDirty = true;
                }
                else if (GroupedRowViewModels.Count != viewStatus.GroupedRowViewModels.Count)
                {
                    isDirty = true;
                }
                else
                {
                    Int32 count = GroupedRowViewModels.Count, i;
                    for (i = 0; i < count; ++i)
                    {
                        if (GroupedRowViewModels[i] != viewStatus.GroupedRowViewModels[i])
                        {
                            isDirty = true;
                            break;
                        }
                    }
                }

                if (isDirty)
                {
                    GroupedRowViewModels = new List <RowViewModel>(viewStatus.GroupedRowViewModels);
                }

                ActivatedRowViewModels = GroupedRowViewModels;
                State             = TableViewState.GroupedRow;
                PaddedSheetHeight = Math.Max(ActivatedRowViewModels.Count() * Const.RowHeight, SheetViewHeight);
            }

            viewStatus.ColorRowViewModels(allRowViewModels, groupedRowViewModels, viewStatus.GroupedRows);
        }