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; } }
/// <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(); } }