예제 #1
0
        private void CloseTab(TabViewModel tabViewModel)
        {
            tabViewModel.HandleTabClosing();
            switch (tabViewModel)
            {
            case SearchTabViewModel searchTabViewModel:
                searchTabViewModel.NonFictionSearchComplete -= SearchTabNonFictionSearchComplete;
                searchTabViewModel.FictionSearchComplete    -= SearchTabFictionSearchComplete;
                searchTabViewModel.SciMagSearchComplete     -= SearchTabSciMagSearchComplete;
                break;

            case NonFictionSearchResultsTabViewModel nonFictionSearchResultsTabViewModel:
                nonFictionSearchResultsTabViewModel.OpenNonFictionDetailsRequested -= OpenNonFictionDetailsRequested;
                break;

            case FictionSearchResultsTabViewModel fictionSearchResultsTabViewModel:
                fictionSearchResultsTabViewModel.OpenFictionDetailsRequested -= OpenFictionDetailsRequested;
                break;

            case SciMagSearchResultsTabViewModel sciMagSearchResultsTabViewModel:
                sciMagSearchResultsTabViewModel.OpenSciMagDetailsRequested -= OpenSciMagDetailsRequested;
                break;

            case NonFictionDetailsTabViewModel nonFictionDetailsTabViewModel:
                nonFictionDetailsTabViewModel.SelectDownloadRequested -= SelectDownloadRequested;
                nonFictionDetailsTabViewModel.CloseTabRequested       -= NonFictionDetailsCloseTabRequested;
                break;

            case FictionDetailsTabViewModel fictionDetailsTabViewModel:
                fictionDetailsTabViewModel.SelectDownloadRequested -= SelectDownloadRequested;
                fictionDetailsTabViewModel.CloseTabRequested       -= FictionDetailsCloseTabRequested;
                break;

            case SciMagDetailsTabViewModel sciMagDetailsTabViewModel:
                sciMagDetailsTabViewModel.SelectDownloadRequested -= SelectDownloadRequested;
                sciMagDetailsTabViewModel.CloseTabRequested       -= SciMagDetailsCloseTabRequested;
                break;
            }
            int removingTabIndex = TabViewModels.IndexOf(tabViewModel);

            TabViewModels.Remove(tabViewModel);
            NotifyPropertyChanged(nameof(IsDefaultSearchTabVisible));
            NotifyPropertyChanged(nameof(AreTabsVisible));
            NotifyPropertyChanged(nameof(IsNewTabButtonVisible));
            if (!TabViewModels.Any())
            {
                SelectedTabViewModel = null;
                DefaultSearchTabViewModel.Refresh(setFocus: true);
            }
            else
            {
                int newSelectedTabIndex = TabViewModels.Count > removingTabIndex ? removingTabIndex : TabViewModels.Count - 1;
                SelectedTabViewModel = TabViewModels[newSelectedTabIndex];
            }
        }
예제 #2
0
        public MainWindowViewModel(MainWindowModel model)
        {
            this.model          = model;
            NewTootBoxViewModel = new NewTootBoxViewModel(this.model.InReplyTo, this.model.Client);
            TabViewModels       = this.model.Tabs.ToReadOnlyReactiveCollection(p => TabContentViewModelBase.FromParam(p, this.model.InReplyTo, this.model.Tabs, this.model.Client));
            SelectedTabIndex    = this.model.Tabs.SelectedIndex;

            OpenSettingsCommand = new ReactiveCommand()
                                  .WithSubscribe(() =>
            {
                var w = new SettingsWindow(new SettingsViewModel(this.model.Tabs));
                ((SettingsViewModel)w.DataContext).Tabs = this.model.Tabs;
                w.ShowDialog();
            });
            CloseTabCommand = new ReactiveCommand <TabContentViewModelBase>()
                              .WithSubscribe(vm =>
            {
                this.model.Tabs.CloseTab(TabViewModels.IndexOf(vm));
            });
            NextTabCommand = new ReactiveCommand()
                             .WithSubscribe(this.model.Tabs.SwitchToNextTab);
            PrevTabCommand = new ReactiveCommand()
                             .WithSubscribe(this.model.Tabs.SwitchToPrevTab);
        }