Ejemplo n.º 1
0
 /// <summary>
 /// 해당 인터랙션이 차트의 타입을 바꾸지 않고 셀렉션만 바꾸는 경우 true 리턴
 /// </summary>
 /// <param name="reason"></param>
 /// <returns></returns>
 public static bool SelectionTypeChanged(this ReflectReason reason)
 {
     switch (reason)
     {
     case (ReflectReason.RowSelected):
     case (ReflectReason.RowUnselected):
     case (ReflectReason.RowSelectionChanged):
         return(true);
     }
     return(false);
 }
Ejemplo n.º 2
0
 public static bool TrackPreviousParagraph(this ReflectReason reason)
 {
     switch (reason)
     {
     //case (ReflectReason.ColumnUnselected):
     case (ReflectReason.PageScrolled):
     case (ReflectReason.Preview):
         return(false);
     }
     return(true);
 }
Ejemplo n.º 3
0
 /// <summary>
 /// 모든 페이지의 차트를 바꾸어야 하는 인터랙션들
 /// </summary>
 /// <param name="reason"></param>
 /// <returns></returns>
 public static bool UpdateAllPageViews(this ReflectReason reason)
 {
     switch (reason)
     {
     case (ReflectReason.ColumnSorted):
     case (ReflectReason.AggregateFunctionChanged):
     case (ReflectReason.RowFiltered):
         return(true);
     }
     return(false);
 }
Ejemplo n.º 4
0
 /// <summary>
 /// 해당 인터랙션이 보여지는 차트의 타입 및 차트 데이터를 바꾸는 경우는 true를 리턴
 /// 만약 셀렉션만 바꾸고 차트 데이터는 그대로라면 false 리턴
 /// </summary>
 public static bool ChartTypeChanged(this ReflectReason reason)
 {
     switch (reason)
     {
     // 차트 타입 및 데이터를 바꾸지 않는 인터랙션 리스트
     //case (ReflectReason.Undo): // undo의 경우 타이틀이 바뀌어야 하므로
     case (ReflectReason.ColumnHidden):
     case (ReflectReason.ColumnShown):
     case (ReflectReason.RowSelected):
     case (ReflectReason.RowUnselected):
     case (ReflectReason.RowSelectionChanged):
     case (ReflectReason.PageScrolled):
         return(false);
     }
     return(true);
 }
Ejemplo n.º 5
0
 /// <summary>
 /// 마지막 페이지의 차트만 바꾸면 되는 인터랙션들
 /// </summary>
 /// <param name="reason"></param>
 /// <returns></returns>
 public static bool UpdateLastPageView(this ReflectReason reason)
 {
     switch (reason)
     {
     case (ReflectReason.Preview):
     case (ReflectReason.CancelPreview):
     case (ReflectReason.ColumnSelected):
     case (ReflectReason.ColumnChanged):
     case (ReflectReason.ColumnUnselected):
     case (ReflectReason.ColumnRemoved):
     case (ReflectReason.RowSelected):
     case (ReflectReason.RowUnselected):
     case (ReflectReason.RowSelectionChanged):
     case (ReflectReason.Undo):
         return(true);
     }
     return(false);
 }
Ejemplo n.º 6
0
        public void ReflectAll(ViewStatus viewStatus, ReflectReason reason)
        {
            Boolean isN = viewStatus.IsN;

            foreach (ColumnViewModel cvm in SheetViewModel.ColumnViewModels)
            {
                cvm.IsSelected = viewStatus.SelectedColumnViewModels.IndexOf(cvm) >= 0;
            }

            if (reason == ReflectReason.RowFiltered)
            {
                View.SelectionView.ChangeSelecion(null, SelectionChangedType.Clear, false);
                tableViewModel.SelectedRows = null;
            }
            if (reason == ReflectReason.ColumnUnselected && viewStatus.SelectedCount == 0)
            {
                View.SelectionView.ChangeSelecion(null, SelectionChangedType.Clear, false);
            }

            Logger.Instance.Log($"{reason}");

            viewStatus.Generate(SheetViewModel);

            // sheet 업데이트
            SheetViewModel.Reflect(viewStatus);

            // 테이블 업데이트
            TableViewModel.Reflect(viewStatus, reason);

            Boolean updateAllPageViews = reason.UpdateAllPageViews();
            Boolean updateLastPageView = reason.UpdateLastPageView();

            // 차트 업데이트
            if (updateAllPageViews)
            {
                foreach (PageView pageView in ExplorationViewModel.SelectedPageViews)
                {
                    if (pageView.ViewModel.ViewStatus != viewStatus)
                    {
                        pageView.ViewModel.ViewStatus.Generate(sheetViewModel);
                    }

                    pageView.ViewModel.Reflect(reason);
                }

                {
                    PageView topPageView = ExplorationViewModel.TopPageView;
                    if (topPageView.ViewModel.ViewStatus != null)
                    {
                        topPageView.ViewModel.ViewStatus.Generate(sheetViewModel);
                        topPageView.ViewModel.Reflect(reason);
                    }
                }
            }
            else if (updateLastPageView)
            {
                if (ExplorationViewModel.SelectedPageViews.Count > 0)
                {
                    PageView pageView = ExplorationViewModel.SelectedPageViews.Last();
                    if (pageView.ViewModel.ViewStatus != viewStatus)
                    {
                        pageView.ViewModel.ViewStatus.Generate(sheetViewModel);
                    }

                    pageView.ViewModel.Reflect(reason);
                }
            }
        }
Ejemplo n.º 7
0
 /// <summary>
 /// 현재 ExplorationViewModel의 ViewStatus를 통해 SheetViewModel, TableViewModel, PageView들을 모두 업데이트 합니다
 /// </summary>
 public void ReflectAll(ReflectReason reason)
 {
     ReflectAll(ExplorationViewModel.ViewStatus, reason);
 }
Ejemplo n.º 8
0
        public void Reflect(ViewStatus viewStatus, ReflectReason reason)
        {
            // 애니메이션 로직이 들어가야함
            if (previousAnimationScenario?.AnimationStoryboard != null)
            {
                previousAnimationScenario?.AnimationStoryboard.SkipToFill();
            }

            UpdateRows(viewStatus);
            UpdateState(viewStatus);
            viewStatus.TableViewState = State;

            AnimationScenario animationScenario = reason == ReflectReason.PageScrolled ? AnimationScenario.None : CreateTableAnimation(viewStatus);

            previousAnimationScenario = animationScenario;

            if (dispatcherTimer != null && dispatcherTimer.IsEnabled)
            {
                dispatcherTimer.Stop();
            }
            dispatcherTimer = new DispatcherTimer();

            if (animationScenario.TotalAnimationDuration > 0)
            {
                State = TableViewState.Animation;
                view.TableView.ReflectState(viewStatus);

                //view.TableView.ActivatedScrollViewer.ChangeView(animationScenario.SpotlightColumnViewModel.StashedX, null, null, true);

                foreach (ColumnViewModel cvm in mainPageViewModel.SheetViewModel.ColumnViewModels)
                {
                    cvm.UpdateHeaderName();
                }

                animationScenario.AnimationStoryboard.Begin();
                view.TableView.TopColumnHeader.Update(animationScenario.TableHeaderUpdateTime);
                view.TableView.BottomColumnHeader.Update(animationScenario.TableHeaderUpdateTime);

                callbackLimitCount++;

                tableUpdateCallback = () =>
                {
                    if (callbackCount < callbackLimitCount)
                    {
                        callbackCount = callbackLimitCount;
                    }
                    else
                    {
                        return;
                    }

                    view.TableView.AllRowScrollViewer.ChangeView(0, 0, null, true);
                    view.TableView.GroupedRowScrollViewer.ChangeView(0, 0, null, true);
                    view.TableView.SelectedRowScrollViewer.ChangeView(0, 0, null, true);

                    dispatcherTimer.Stop();

                    UpdateState(viewStatus);

                    view.TableView.ReflectState(viewStatus);
                    view.TableView.ColumnIndexer.Update();
                };

                dispatcherTimer.Tick += (sender, e) =>
                {
                    tableUpdateCallback();
                };

                dispatcherTimer.Interval = TimeSpan.FromMilliseconds(animationScenario.TotalAnimationDuration);

                dispatcherTimer.Start();
            }
            else
            {
                callbackLimitCount++;

                tableUpdateCallback = () =>
                {
                    if (callbackCount < callbackLimitCount)
                    {
                        callbackCount = callbackLimitCount;
                    }
                    else
                    {
                        return;
                    }

                    view.TableView.AllRowScrollViewer.ChangeView(0, 0, null, true);
                    view.TableView.GroupedRowScrollViewer.ChangeView(0, 0, null, true);
                    view.TableView.SelectedRowScrollViewer.ChangeView(0, 0, null, true);

                    dispatcherTimer.Stop();
                    UpdateState(viewStatus);

                    view.TableView.ReflectState(viewStatus);

                    // column header 업데이트
                    foreach (ColumnViewModel cvm in mainPageViewModel.SheetViewModel.ColumnViewModels)
                    {
                        cvm.UpdateHeaderName();
                    }

                    view.TableView.TopColumnHeader.Update();
                    view.TableView.BottomColumnHeader.Update();
                    view.TableView.ColumnIndexer.Update();
                };

                //tableUpdateCallback(); // 이렇게 바로 실행하면 컬럼 선택/해제시 페이지뷰가 올라/내려가는 애니메이션이 끊김
                dispatcherTimer.Tick += (sender, e) =>
                {
                    tableUpdateCallback();
                };

                dispatcherTimer.Interval = TimeSpan.FromMilliseconds(50);

                dispatcherTimer.Start();
            }
        }