Ejemplo n.º 1
0
        private bool TryDockToWindow(HostWindow window, Point position, TabViewModelBase tab)
        {
            if (!(window.TabControl.InputHitTest(position) is FrameworkElement element))
            {
                return(false);
            }

            // Test if the mouse is over the tab panel or a tab item.
            if (!CanInsertTabItem(element))
            {
                return(false);
            }

            tab.PrepareToWindowTransfer();

            var sourceHost = (HostWindowViewModel)DataContext;
            var targetHost = (HostWindowViewModel)window.DataContext;

            sourceHost.DetachTab(tab);
            targetHost.AttachTab(tab);

            window.BringToFront();

            //We run this method on the tab control for it to grab the tab and position it at the mouse, ready to move again.
            window.TabControl.GrabTab(tab);

            return(true);
        }
Ejemplo n.º 2
0
 private void ShowEditOrderedPlaylistTab(OrderedPlaylist playlist)
 {
     _returnToTab = SelectedTab;
     _editOrderedPlaylistViewModel.Edit(playlist);
     _editOrderedPlaylistViewModel.IsVisible = true;
     SetSelectedTab(_editOrderedPlaylistViewModel);
 }
Ejemplo n.º 3
0
 private void ShowEditTrackTab(Track track)
 {
     _returnToTab = SelectedTab;
     _editTrackViewModel.Edit(track);
     _editTrackViewModel.IsVisible = true;
     SetSelectedTab(_editTrackViewModel);
 }
Ejemplo n.º 4
0
 private void ShowSettingsTab()
 {
     _returnToTab = SelectedTab;
     _settingsViewModel.Reset();
     _settingsViewModel.IsVisible = true;
     SetSelectedTab(_settingsViewModel);
 }
Ejemplo n.º 5
0
        private bool CanChangeTab(TabViewModelBase newTab)
        {
            if (_selectedTabSetByViewModel)
            {
                _selectedTabSetByViewModel = false;
                return(true);
            }

            _returnToTab = newTab;

            var editable = _selectedTab as EditableTabViewModelBase;

            if (editable == null)
            {
                return(true);
            }

            if (editable.Modified)
            {
                var confirmationViewModel = new ConfirmationViewModel(_messenger, UnsavedChangesTitle, UnsavedChangesText, ConfirmationViewModel.ConfirmationType.YesNo);

                _messenger.Send(new ShowDialogMessage(confirmationViewModel));

                if (!confirmationViewModel.Result)
                {
                    return(false);
                }
            }

            editable.OnCancel();
            return(true);
        }
Ejemplo n.º 6
0
        public void Add(TabViewModelBase viewModel)
        {
            var newNode = new TabItemNode(viewModel);

            Current.NextNode     = newNode;
            newNode.PreviousNode = Current;

            Current = newNode;

            OnHistoryChanged();
        }
Ejemplo n.º 7
0
        public static string GetTabHash(Type tabClass, Type[] argsTypes, object[] argsValues)
        {
            if (typeof(TabViewModelBase).IsAssignableFrom(tabClass))
            {
                return(TabViewModelBase.GenerateHashName(tabClass));
            }

            var getHashMethod = FindGetHashMethod(tabClass, argsTypes);

            if (getHashMethod == null)
            {
                var argsText = String.Join(", ", argsTypes.Select((t, i) => $"{t.Name} arg{i + 1}"));
                throw new InvalidCastException($"Для работы метода OpenTab у класа {tabClass.Name} должен быть статический метод {GenerateTabHashMethodName}({argsText})");
            }

            return((string)getHashMethod.Invoke(null, argsValues));
        }
Ejemplo n.º 8
0
        private void OnLoaded(object sender, RoutedEventArgs e)
        {
            Loaded          -= OnLoaded;
            LocationChanged += OnLocationChanged;

            if (_tabItem == null)
            {
                return;
            }

            var vm = (HostWindowViewModel)DataContext;

            vm.AttachTab(_tabItem);
            TabControl.GrabTabFixed(_tabItem);

            _tabItem = null;
            MoveWindow(this);
        }
Ejemplo n.º 9
0
        private bool TryDragTabToWindow(Point position, TabViewModelBase tab)
        {
            if (tab.IsPinned)
            {
                return(false);
            }

            var win = new HostWindow(tab)
            {
                Width  = Width,
                Height = Height,
                Left   = Left,
                Top    = position.Y - TabControl.TabPanelHeight / 2
            };

            win.Show();

            return(true);
        }
 public RequestTabEventArgs(TabViewModelBase tab)
 {
     TabToOpen = tab;
 }
Ejemplo n.º 11
0
 private HostWindow(TabViewModelBase tabItem) : this()
 {
     _tabItem = tabItem;
     _tabItem.PrepareToWindowTransfer();
 }
Ejemplo n.º 12
0
 private void OnChangingTab(TabViewModelBase newTab)
 {
 }
        /// <summary>
        /// Gets the view to which the navigation request represented by <paramref name="navigationContext"/> applies.
        /// </summary>
        /// <param name="region">The region.</param>
        /// <param name="navigationContext">The context representing the navigation request.</param>
        /// <returns>
        /// The view to be the target of the navigation request.
        /// </returns>
        /// <remarks>
        /// If none of the views in the region can be the target of the navigation request, a new view
        /// is created and added to the region.
        /// </remarks>
        /// <exception cref="ArgumentException">when a new view cannot be created for the navigation request.</exception>
        public object LoadContent(IRegion region, NavigationContext navigationContext)
        {
            if (region == null)
            {
                throw new ArgumentNullException("region");
            }
            if (navigationContext == null)
            {
                throw new ArgumentNullException("navigationContext");
            }

            string candidateTargetContract = this.GetContractFromNavigationContext(navigationContext);

            var candidates = this.GetCandidatesFromRegion(region, candidateTargetContract);

            var acceptingCandidates =
                candidates.Where(
                    v =>
            {
                var navigationAware = v as INavigationAware;
                if (navigationAware != null && !navigationAware.IsNavigationTarget(navigationContext))
                {
                    return(false);
                }

                var frameworkElement = v as FrameworkElement;
                if (frameworkElement == null)
                {
                    return(true);
                }

                navigationAware = frameworkElement.DataContext as INavigationAware;

                return(navigationAware == null || navigationAware.IsNavigationTarget(navigationContext));
            });


            var view = acceptingCandidates.FirstOrDefault();

            if (view != null)
            {
                return(view);
            }

            string viewName = navigationContext.Parameters["SearchType"] as string;

            view = this.CreateNewRegionItem(candidateTargetContract);
            if (view != null)
            {
                UserControl      control = view as UserControl;
                TabViewModelBase tbvm    = control.DataContext as TabViewModelBase;
                tbvm.Header = navigationContext.Parameters["SearchType"] as string;
            }
            bool isAlreadyATab = region.Views.Any(v =>
            {
                Type viewType = v.GetType();
                string header = viewType.GetProperty("Header").GetValue(v) as string;
                return(header == viewName);
            });

            if (!isAlreadyATab)
            {
                region.Add(view);
            }


            return(view);
        }
Ejemplo n.º 14
0
 public TabItemNode(TabViewModelBase viewModel)
 {
     ViewModel = viewModel;
 }
Ejemplo n.º 15
0
        public MainViewModel(
            DashboardViewModel dashboardViewModel,
            LibraryViewModel libraryViewModel,
            PlaylistsViewModel playlistsViewModel,
            CurrentPlaylistViewModel currentPlaylistViewModel,
            CurrentTrackViewModel currentTrackViewModel,
            ArtistViewModel artistViewModel,
            LastFmViewModel lastFmViewModel,
            NewsViewModel newsViewModel,
            SearchViewModel searchViewModel,
            ArchiveViewModel archiveViewModel,
            PlayHistoryViewModel playHistoryViewModel,
            SystemInfoViewModel systemInfoViewModel,
            EditSettingsViewModel settingsViewModel,
            EditTrackViewModel editTrackViewModel,
            EditCriteriaPlaylistViewModel editCriteriaPlaylistViewModel,
            EditOrderedPlaylistViewModel editOrderedPlaylistViewModel,
            IMessenger messenger,
            IShowTabRequestHandler showTabRequester)
        {
            Tabs = new List <TabViewModelBase>
            {
                dashboardViewModel,
                libraryViewModel,
                playlistsViewModel,
                currentPlaylistViewModel,
                currentTrackViewModel,
                artistViewModel,
                lastFmViewModel,
                newsViewModel,
                searchViewModel,
                archiveViewModel,
                playHistoryViewModel,
                systemInfoViewModel,
                settingsViewModel,
                editTrackViewModel,
                editCriteriaPlaylistViewModel,
                editOrderedPlaylistViewModel,
            };

            _editCriteriaPlaylistViewModel = editCriteriaPlaylistViewModel;
            _editOrderedPlaylistViewModel  = editOrderedPlaylistViewModel;
            _editTrackViewModel            = editTrackViewModel;
            _settingsViewModel             = settingsViewModel;

            _messenger = messenger;

            _returnToTab = dashboardViewModel;

            SetSelectedTab(dashboardViewModel);

            ChangeTabCommand = new RelayCommand <TabViewModelBase>(OnChangingTab, CanChangeTab);

            showTabRequester.ShowEditTrackTab            += ShowEditTrackTab;
            showTabRequester.ShowSettingsTab             += ShowSettingsTab;
            showTabRequester.ShowEditCriteriaPlaylistTab += ShowEditCriteriaPlaylistTab;
            showTabRequester.ShowEditOrderedPlaylistTab  += ShowEditOrderedPlaylistTab;

            _editTrackViewModel.FinishedEditing            += OnFinishedEditing;
            _settingsViewModel.FinishedEditing             += OnFinishedEditing;
            _editCriteriaPlaylistViewModel.FinishedEditing += OnFinishedEditing;
            _editOrderedPlaylistViewModel.FinishedEditing  += OnFinishedEditing;

            playlistsViewModel.FavouritePlaylistsUpdated += OnFavouritePlaylistsUpdated;
        }
Ejemplo n.º 16
0
        public TabItemHistory(TabViewModelBase viewModel)
        {
            var head = new TabItemNode(viewModel);

            Current = head;
        }
Ejemplo n.º 17
0
 private void SetSelectedTab(TabViewModelBase tab)
 {
     _selectedTabSetByViewModel = true;
     SelectedTab = tab;
 }