Ejemplo n.º 1
0
        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);
            }
        }
Ejemplo n.º 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();
            }
        }