public void Reset() { // home button tapped view.SelectionView.ChangeSelecion(null, SelectionChangedType.Clear, false); if (explorationViewModel.ViewStatus.SelectedCount > 0) { // exploration view에서 올라가 있는 것 다 제거 foreach (PageView pageView in ExplorationViewModel.SelectedPageViews) { view.ExplorationView.RemoveNonTopPage(pageView); } // exploration view model 에서 선택된 page view 다 지움 ExplorationViewModel.SelectedPageViews.Clear(); // 빈 view status로 반영 ViewStatus emptyViewStatus = new ViewStatus(); // 현재 preview에 해당하는 page view를 비어있게 PageView topPageView = view.ExplorationView.TopPageView; PageViewModel topPageViewModel = topPageView.ViewModel; topPageViewModel.ViewStatus = emptyViewStatus; topPageViewModel.State = PageViewModel.PageViewState.Empty; topPageView.ReflectState(); ReflectAll(emptyViewStatus, ReflectReason.Reset); } }
/// <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(); } }