- add: Settings, start
This commit is contained in:
@@ -25,7 +25,8 @@ public partial class MainViewModel : ViewModelBase
|
||||
new ListItemTemplate(typeof(AccountInfoViewModel), "user", "Account", null),
|
||||
new ListItemTemplate(typeof(ServerListViewModel), "file", "Servers", false),
|
||||
new ListItemTemplate(typeof(ServerListViewModel), "star", "Favorites", true),
|
||||
new ListItemTemplate(typeof(ContentBrowserViewModel), "folder", "Content", null)
|
||||
new ListItemTemplate(typeof(ContentBrowserViewModel), "folder", "Content", null),
|
||||
new ListItemTemplate(typeof(ConfigurationViewModel), "settings", "Settings", null)
|
||||
];
|
||||
|
||||
private readonly List<PopupViewModelBase> _viewQueue = new();
|
||||
|
||||
142
Nebula.Launcher/ViewModels/Pages/ConfigurationViewModel.cs
Normal file
142
Nebula.Launcher/ViewModels/Pages/ConfigurationViewModel.cs
Normal file
@@ -0,0 +1,142 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.ObjectModel;
|
||||
using System.ComponentModel;
|
||||
using System.Linq;
|
||||
using System.Runtime.CompilerServices;
|
||||
using CommunityToolkit.Mvvm.ComponentModel;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Nebula.Launcher.Views.Config;
|
||||
using Nebula.Launcher.Views.Pages;
|
||||
using Nebula.Shared.Services;
|
||||
using BindingFlags = System.Reflection.BindingFlags;
|
||||
|
||||
namespace Nebula.Launcher.ViewModels.Pages;
|
||||
|
||||
[ViewModelRegister(typeof(ConfigurationView))]
|
||||
[ConstructGenerator]
|
||||
public partial class ConfigurationViewModel : ViewModelBase, IConfigContext
|
||||
{
|
||||
public ObservableCollection<ViewModelBase> ConfigurationVerbose { get; } = new();
|
||||
|
||||
[GenerateProperty] private ConfigurationService ConfigurationService { get; } = default!;
|
||||
[GenerateProperty] private IServiceProvider ServiceProvider { get; } = default!;
|
||||
|
||||
|
||||
public void AddConfiguration<T,T1>(ConVar<T> convar) where T1: ViewModelBase, IConfigurationVerbose<T>
|
||||
{
|
||||
var configurationVerbose = ServiceProvider.GetService<T1>()!;
|
||||
configurationVerbose.Context = new ConfigContext<T>(convar, this);
|
||||
configurationVerbose.InitializeConfig();
|
||||
ConfigurationVerbose.Add(configurationVerbose);
|
||||
}
|
||||
|
||||
public void InvokeUpdateConfiguration()
|
||||
{
|
||||
foreach (var verbose in ConfigurationVerbose)
|
||||
{
|
||||
if(verbose is not IUpdateInvoker invoker) continue;
|
||||
invoker.UpdateConfiguration();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
protected override void InitialiseInDesignMode()
|
||||
{
|
||||
AddConfiguration<string, StringConfigurationViewModel>(LauncherConVar.ILSpyUrl);
|
||||
}
|
||||
|
||||
protected override void Initialise()
|
||||
{
|
||||
InitialiseInDesignMode();
|
||||
}
|
||||
|
||||
public void SetValue<T>(ConVar<T> conVar, T value)
|
||||
{
|
||||
ConfigurationService.SetConfigValue(conVar, value);
|
||||
}
|
||||
|
||||
public T? GetValue<T>(ConVar<T> convar)
|
||||
{
|
||||
return ConfigurationService.GetConfigValue<T>(convar);
|
||||
}
|
||||
}
|
||||
|
||||
public interface IConfigContext
|
||||
{
|
||||
public void SetValue<T>(ConVar<T> conVar, T value);
|
||||
public T? GetValue<T>(ConVar<T> convar);
|
||||
}
|
||||
|
||||
public class ConfigContext<T> : IConfigContext
|
||||
{
|
||||
public ConfigContext(ConVar<T> conVar, IConfigContext parent)
|
||||
{
|
||||
ConVar = conVar;
|
||||
Parent = parent;
|
||||
}
|
||||
|
||||
public ConVar<T> ConVar { get; }
|
||||
public IConfigContext Parent { get; }
|
||||
|
||||
public T? GetValue()
|
||||
{
|
||||
return GetValue(ConVar);
|
||||
}
|
||||
|
||||
public void SetValue(T? value)
|
||||
{
|
||||
SetValue(ConVar!, value);
|
||||
}
|
||||
|
||||
public void SetValue<T1>(ConVar<T1> conVar, T1 value)
|
||||
{
|
||||
Parent.SetValue(conVar, value);
|
||||
}
|
||||
|
||||
public T1? GetValue<T1>(ConVar<T1> convar)
|
||||
{
|
||||
return Parent.GetValue(convar);
|
||||
}
|
||||
}
|
||||
|
||||
public interface IConfigurationVerbose<T>
|
||||
{
|
||||
public ConfigContext<T> Context { get; set; }
|
||||
public void InitializeConfig();
|
||||
}
|
||||
|
||||
public interface IUpdateInvoker
|
||||
{
|
||||
public void UpdateConfiguration();
|
||||
}
|
||||
|
||||
[ViewModelRegister(typeof(StringConfigurationView))]
|
||||
public partial class StringConfigurationViewModel : ViewModelBase , IConfigurationVerbose<string>, IUpdateInvoker
|
||||
{
|
||||
[ObservableProperty] private string _configText = string.Empty;
|
||||
[ObservableProperty] private string? _configName = string.Empty;
|
||||
|
||||
private string _oldText = string.Empty;
|
||||
|
||||
public ConfigContext<string> Context { get; set; }
|
||||
public void InitializeConfig()
|
||||
{
|
||||
ConfigName = Context.ConVar.Name;
|
||||
_oldText = Context.GetValue() ?? string.Empty;
|
||||
ConfigText = _oldText;
|
||||
}
|
||||
public void UpdateConfiguration()
|
||||
{
|
||||
if (_oldText == ConfigText) return;
|
||||
Context.SetValue(ConfigText);
|
||||
}
|
||||
|
||||
protected override void InitialiseInDesignMode()
|
||||
{
|
||||
}
|
||||
|
||||
protected override void Initialise()
|
||||
{
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user