using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
using SpaceEngineersBlueprintEditor.Implements.Services;
using SpaceEngineersBlueprintEditor.Interface.Services;
using SpaceEngineersBlueprintEditor.Model;
using SpaceEngineersBlueprintEditor.Views;
using System.Collections.ObjectModel;
using XFEExtension.NetCore.WinUIHelper.Interface.Services;
using XFEExtension.NetCore.WinUIHelper.Utilities;
namespace SpaceEngineersBlueprintEditor.ViewModels;
public partial class BlueprintEditPageViewModel : ViewModelBase
{
[ObservableProperty]
private TabViewItem? selectedTabViewItem;
public INavigationViewService? NavigationViewService { get; } = ServiceManager.GetGlobalService<INavigationViewService>();
public BlueprintModel? CurrentSelectedModel => SelectedTabViewItem is not null ? SelectedTabViewItem.Content is Frame frame ? frame.Content is BlueprintEditSubPage blueprintEditSubPage ? blueprintEditSubPage.ViewModel.AutoNavigationParameterService.Parameter : null : null : null;
public ObservableCollection<TabViewItem> TabViewItems { get; set; } = [];
public IBackgroundImageService? BackgroundImageService { get; set; } = ServiceManager.GetGlobalService<IBackgroundImageService>();
public ITabViewTitleService TabViewTitleService { get; set; } = new TabViewTitleService();
public IAutoNavigationParameterService<BlueprintModel> AutoNavigationParameterService { get; set; } = ServiceManager.GetService<IAutoNavigationParameterService<BlueprintModel>>();
public BlueprintEditPageViewModel()
{
AutoNavigationParameterService.ParameterChange += AutoNavigationParameterService_ParameterChange;
TabViewTitleService.ChangeTitleRequest += TabViewTitleService_ChangeTitleRequest;
}
private void TabViewTitleService_ChangeTitleRequest(string sender, BlueprintModel e)
{
if (GetCurrentItem(e) is TabViewItem tabViewItem)
tabViewItem.Header = sender;
}
partial void OnSelectedTabViewItemChanged(TabViewItem? value)
{
if (CurrentSelectedModel is not null && CurrentSelectedModel.ViewData is not null)
BackgroundImageService?.SetBackgroundImage(CurrentSelectedModel.ViewData.BlueprintImage);
else
BackgroundImageService?.ResetBackground();
}
private TabViewItem? GetCurrentItem(BlueprintModel blueprintModel)
{
foreach (var tabViewItem in TabViewItems)
if (tabViewItem.Content is Frame frame && frame.Content is BlueprintEditSubPage blueprintEditSubPage && blueprintEditSubPage.ViewModel.AutoNavigationParameterService.Parameter == blueprintModel)
return tabViewItem;
return null;
}
private void AutoNavigationParameterService_ParameterChange(object? sender, BlueprintModel? e)
{
if (e is not null)
{
if (GetCurrentItem(e) is TabViewItem tabViewItem)
SelectedTabViewItem = tabViewItem;
else
CreateTabViewItem(e);
}
else if (e is null && TabViewItems.Count == 0)
{
CreateTabViewItem(null);
}
}
public void CreateTabViewItem(BlueprintModel? blueprintModel)
{
var frame = new Frame();
var tabView = new TabViewItem
{
Header = "BlueprintEditPage_NewBlueprintEditPage".GetLocalized(),
Content = frame
};
TabViewItems.Add(tabView);
SelectedTabViewItem = tabView;
frame.Navigate(typeof(BlueprintEditSubPage), blueprintModel);
}
[RelayCommand]
void AddNewTabViewItem() => CreateTabViewItem(null);
}
using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
using SpaceEngineersBlueprintEditor.Implements.Services;
using SpaceEngineersBlueprintEditor.Interface.Services;
using SpaceEngineersBlueprintEditor.Model;
using SpaceEngineersBlueprintEditor.Views;
using System.Collections.ObjectModel;
using XFEExtension.NetCore.WinUIHelper.Interface.Services;
using XFEExtension.NetCore.WinUIHelper.Utilities;
namespace SpaceEngineersBlueprintEditor.ViewModels;
public partial class BlueprintEditPageViewModel : ViewModelBase
{
[ObservableProperty]
private TabViewItem? selectedTabViewItem;
public INavigationViewService? NavigationViewService { get; } = ServiceManager.GetGlobalService<INavigationViewService>();
public BlueprintModel? CurrentSelectedModel => SelectedTabViewItem is not null ? SelectedTabViewItem.Content is Frame frame ? frame.Content is BlueprintEditSubPage blueprintEditSubPage ? blueprintEditSubPage.ViewModel.AutoNavigationParameterService.Parameter : null : null : null;
public ObservableCollection<TabViewItem> TabViewItems { get; set; } = [];
public IBackgroundImageService? BackgroundImageService { get; set; } = ServiceManager.GetGlobalService<IBackgroundImageService>();
public ITabViewTitleService TabViewTitleService { get; set; } = new TabViewTitleService();
public IAutoNavigationParameterService<BlueprintModel> AutoNavigationParameterService { get; set; } = ServiceManager.GetService<IAutoNavigationParameterService<BlueprintModel>>();
public BlueprintEditPageViewModel()
{
AutoNavigationParameterService.ParameterChange += AutoNavigationParameterService_ParameterChange;
TabViewTitleService.ChangeTitleRequest += TabViewTitleService_ChangeTitleRequest;
}
private void TabViewTitleService_ChangeTitleRequest(string sender, BlueprintModel e)
{
if (GetCurrentItem(e) is TabViewItem tabViewItem)
tabViewItem.Header = sender;
}
partial void OnSelectedTabViewItemChanged(TabViewItem? value)
{
if (CurrentSelectedModel is not null && CurrentSelectedModel.ViewData is not null)
BackgroundImageService?.SetBackgroundImage(CurrentSelectedModel.ViewData.BlueprintImage);
else
BackgroundImageService?.ResetBackground();
}
private TabViewItem? GetCurrentItem(BlueprintModel blueprintModel)
{
foreach (var tabViewItem in TabViewItems)
if (tabViewItem.Content is Frame frame && frame.Content is BlueprintEditSubPage blueprintEditSubPage && blueprintEditSubPage.ViewModel.AutoNavigationParameterService.Parameter == blueprintModel)
return tabViewItem;
return null;
}
private void AutoNavigationParameterService_ParameterChange(object? sender, BlueprintModel? e)
{
if (e is not null)
{
if (GetCurrentItem(e) is TabViewItem tabViewItem)
SelectedTabViewItem = tabViewItem;
else
CreateTabViewItem(e);
}
else if (e is null && TabViewItems.Count == 0)
{
CreateTabViewItem(null);
}
}
public void CreateTabViewItem(BlueprintModel? blueprintModel)
{
var frame = new Frame();
var tabView = new TabViewItem
{
Header = "BlueprintEditPage_NewBlueprintEditPage".GetLocalized(),
Content = frame
};
TabViewItems.Add(tabView);
SelectedTabViewItem = tabView;
frame.Navigate(typeof(BlueprintEditSubPage), blueprintModel);
}
[RelayCommand]
void AddNewTabViewItem() => CreateTabViewItem(null);
}