Example #1
0
        public void ReflectState()
        {
            PageViewModel.PageViewState state    = ViewModel.State,
                                        oldState = ViewModel.OldState;

            ///
            /// SelectedStateStoryboard: 차트가 보이도록 애니메이션
            /// EmptyStateStoryboard: 차트가 사라지도록 애니메이션
            /// EnlargeStoryboard: 차트가 꽉 차서 보이도록 애니메이션
            /// DefaultStoryboard: 차트가 줄어들어 보이도록 애니메이션
            /// BrightenStoryboard: 차트 바깥 쪽을 흰색으로
            /// DarkenStoryboard: 차트 바깥쪽을 회색으로

            // 현재 뷰가 위에 있다
            if (state == PageViewModel.PageViewState.Selected)
            {
                MoveToSelectedPositionStoryboard.Begin();
                if (SelectedStateStoryboard.GetCurrentState() != ClockState.Active)
                {
                    SelectedStateStoryboard.Begin();
                }
            }
            else if (state == PageViewModel.PageViewState.Undoing)
            {
                MoveToDefaultPositionStoryboard.Begin();
                UndoStateStoryboard.Begin();
            }
            else if (state == PageViewModel.PageViewState.Empty)
            {
                MoveToDefaultPositionStoryboard.Begin();
                EmptyStateStoryboard.Begin();
            }
            else if (state == PageViewModel.PageViewState.Previewing)
            {
                MoveToDefaultPositionStoryboard.Begin();
                if (SelectedStateStoryboard.GetCurrentState() != ClockState.Active)
                {
                    SelectedStateStoryboard.Begin();
                }
            }

            switch (state)
            {
            case PageViewModel.PageViewState.Selected:
                BarChartElement.IsHitTestVisible         = true;
                LineChartElement.IsHitTestVisible        = true;
                DistributionViewElement.IsHitTestVisible = true;
                GroupedBarChartElement.IsHitTestVisible  = true;
                ScatterplotElement.IsHitTestVisible      = true;
                PivotTableView.IsScrollable = true;

                BarChartTitleElement.IsHitTestVisible              = true;
                GroupedBarChartTitleElement.IsHitTestVisible       = true;
                LineChartTitleElement.IsHitTestVisible             = true;
                DistributionViewTitleElement.IsHitTestVisible      = true;
                DescriptiveStatisticsTitleElement.IsHitTestVisible = true;
                ScatterplotTitleElement.IsHitTestVisible           = true;
                PivotTableTitleElement.IsHitTestVisible            = true;
                CorrelationStatisticsTitleElement.IsHitTestVisible = true;
                break;

            case PageViewModel.PageViewState.Undoing:
            case PageViewModel.PageViewState.Previewing:
            case PageViewModel.PageViewState.Empty:
                ViewModel.IsPrimaryUndoMessageVisible = true;

                BarChartElement.IsHitTestVisible         = false;
                LineChartElement.IsHitTestVisible        = false;
                DistributionViewElement.IsHitTestVisible = false;
                GroupedBarChartElement.IsHitTestVisible  = false;
                ScatterplotElement.IsHitTestVisible      = false;
                PivotTableView.IsScrollable = false;

                BarChartTitleElement.IsHitTestVisible              = false;
                GroupedBarChartTitleElement.IsHitTestVisible       = false;
                LineChartTitleElement.IsHitTestVisible             = false;
                DistributionViewTitleElement.IsHitTestVisible      = false;
                DescriptiveStatisticsTitleElement.IsHitTestVisible = false;
                ScatterplotTitleElement.IsHitTestVisible           = false;
                PivotTableTitleElement.IsHitTestVisible            = false;
                CorrelationStatisticsTitleElement.IsHitTestVisible = false;
                break;
            }
        }
Example #2
0
        /// <summary>
        /// 바뀐 state는 이미 pageViewModel.State에 할당된 상태임. 이전 상태는 OldState에서 확인할 수 있음
        /// </summary>
        /// <param name="pageViewModel"></param>
        /// <param name="pageView"></param>
        /// <param name="isUndo"></param>
        public void PageViewStateChanged(PageViewModel pageViewModel, PageView pageView /*, Boolean isUndo*/)
        {
            PageViewModel.PageViewState state    = pageViewModel.State,
                                        oldState = pageViewModel.OldState;

            if (oldState == PageViewModel.PageViewState.Undoing && state == PageViewModel.PageViewState.Selected) // undo 하는 경우
            {
                Debug.Assert(selectedPageViews.IndexOf(pageView) < 0);

                mainPageViewModel.TableViewModel.StashViewStatus(ViewStatus, AnimationHint.AnimationType.DependOnViewStatus);

                selectedPageViews.Add(pageView);

                // 새로운 page 만들기
                view.ExplorationView.AddNewPage();

                mainPageViewModel.ReflectAll(ReflectReason.Undo);

                view.TableView.ScrollToColumnViewModel(mainPageViewModel.SheetViewModel.ColumnViewModels.OrderBy(c => c.Order).First());

                // Preview 풀기
                mainPageViewModel.TableViewModel.CancelIndexing(false);

                // Page View 위로 보내기
                pageView.ReflectState();
            }
            else if (state == PageViewModel.PageViewState.Selected) // 현재 선택하는 경우
            {
                Debug.Assert(pageView == TopPageView);
                Debug.Assert(previewingColumnViewModel != null);
                Debug.Assert(ViewStatus.SelectedColumnViewModels.IndexOf(previewingColumnViewModel) < 0); // 이미 선택한 걸 또 선택하는 경우는 없도록 이 함수 호출전에 미리 체크해야함

                mainPageViewModel.TableViewModel.StashViewStatus(ViewStatus, AnimationHint.AnimationType.DependOnViewStatus);

                // 현재 탭된 컬럼의 viewStatus에는 previewingColumn이 추가되어 있는 상태임.
                selectedPageViews.Add(pageView);

                // 차트 새로 반영 (타이틀이 업데이트 될 것임)
                //pageViewModel.Reflect(true);

                // 새로운 page 만들기
                view.ExplorationView.AddNewPage();

                Logger.Instance.Log($"column selected,{String.Join(",", ViewStatus.SelectedColumnViewModels.Select(cvm => cvm.Column.Name))}");
                mainPageViewModel.ReflectAll(ReflectReason.ColumnSelected);

                //view.TableView.ScrollToColumnViewModel(mainPageViewModel.SheetViewModel.ColumnViewModels.OrderBy(c => c.Order).First());
                //항상 움직이면 안됨. 애니메이션이 있으면 시작점으로 움직여야 하지만 애니메이션이 없는 경우 그대로 있어야함.

                // Preview 풀기
                mainPageViewModel.TableViewModel.CancelIndexing(false);

                pageView.ReflectState();
            }
            else if (state == PageViewModel.PageViewState.Undoing || state == PageViewModel.PageViewState.Empty) // 선택해제하는 경우 혹은 스트로크로 바로 컬럼 지우는 경우
            {
                mainPageViewModel.TableViewModel.StashViewStatus(ViewStatus, AnimationHint.AnimationType.DependOnViewStatus);

                selectedPageViews.Remove(pageView);

                // Preview 풀기 (만약 되어있다면)
                mainPageViewModel.TableViewModel.CancelIndexing(false);

                // 기존 탑 페이지 지우고 이걸 탑 페이지로 지정
                view.ExplorationView.RemoveTopPage(pageView);

                //mainPageViewModel.ReflectAll(true, ReflectReason.ColumnViewModelUnselected);
                mainPageViewModel.ReflectAll(ReflectReason.ColumnUnselected); // ReflectReason2.ColumnViewModelUnselected); // performance 이슈로 위에것만 업데이트 해봄
                Logger.Instance.Log($"column unselected,{String.Join(",", ViewStatus.SelectedColumnViewModels.Select(cvm => cvm.Column.Name))}");

                view.TableView.ScrollToColumnViewModel(mainPageViewModel.SheetViewModel.ColumnViewModels.OrderBy(c => c.Order).First());

                // Page View 위로 올리기
                pageView.ReflectState();
            }
        }