Add design mode

This commit is contained in:
Robert committed 2026-07-31 15:30:11 +02:00
1 parent 5a681a0480
commit eb812cb5e1
50 files changed
+782 -257

No files matched your search

@@ -1,33 +1,72 @@
using System.Collections.ObjectModel;
using System;
using System.Collections.ObjectModel;
using System.Reactive.Disposables.Fluent;
using System.Threading.Tasks;
using Artemis.Core;
using Artemis.UI.Screens.ProfileEditor.DesignPanels.Items;
using Artemis.UI.Shared;
using Artemis.UI.Shared.Services;
using DynamicData;
using DynamicData.Binding;
using PropertyChanged.SourceGenerator;
using ReactiveUI;
namespace Artemis.UI.Screens.ProfileEditor.DesignPanels.Section;
public class ConfigurationSectionDesignViewModel : ActivatableViewModelBase
public partial class ConfigurationSectionDesignViewModel : ActivatableViewModelBase
{
public ConfigurationSection ConfigurationSection { get; }
public ObservableCollection<ActivatableViewModelBase> Items { get; }
private readonly IWindowService _windowService;
[Notify] private ReadOnlyObservableCollection<ConfigurationItemDesignViewModel>? _items;
public ConfigurationSectionDesignViewModel(ConfigurationSection configurationSection)
public ConfigurationSectionDesignViewModel(ConfigurationSection configurationSection, IWindowService windowService)
{
_windowService = windowService;
ConfigurationSection = configurationSection;
Items = [];
foreach (IConfigurationItem item in ConfigurationSection.Items)
this.WhenActivated(d =>
{
if (item is ConfigurationTextItem textItem)
Items.Add(new ConfigurationTextItemDesignViewModel(textItem));
else if (item is ConfigurationStringItem stringItem)
Items.Add(new ConfigurationStringItemDesignViewModel(stringItem));
else if (item is ConfigurationBooleanItem booleanItem)
Items.Add(new ConfigurationBooleanItemDesignViewModel(booleanItem));
else if (item is ConfigurationNumericItem numberItem)
Items.Add(new ConfigurationNumericItemDesignViewModel(numberItem));
else if (item is ConfigurationSKColorItem colorItem)
Items.Add(new ConfigurationSKColorItemDesignViewModel(colorItem));
else if (item is ConfigurationColorGradientItem colorGradientItem)
Items.Add(new ConfigurationColorGradientItemDesignViewModel(colorGradientItem));
}
ConfigurationSection.Items
.ToObservableChangeSet()
.Transform(CreateViewModelForItem)
.Bind(out ReadOnlyObservableCollection<ConfigurationItemDesignViewModel> items)
.Subscribe()
.DisposeWith(d);
Items = items;
});
}
public ConfigurationSection ConfigurationSection { get; }
public async Task RemoveSection()
{
ConfigurationSection.ProfileConfiguration.ConfigurationSections.Remove(ConfigurationSection);
}
public async Task AddItem()
{
await _windowService.CreateContentDialog()
.WithTitle("Add Item")
.WithViewModel(out AddConfigurationItemDesignViewModel _, ConfigurationSection)
.ShowAsync();
}
public void RemoveItem(ConfigurationItemDesignViewModel viewModel)
{
ConfigurationSection.Items.Remove(viewModel.Item);
}
private ConfigurationItemDesignViewModel CreateViewModelForItem(IConfigurationItem item)
{
return item switch
{
ConfigurationTextItem textItem => new ConfigurationTextItemDesignViewModel(textItem, ConfigurationSection),
ConfigurationStringItem stringItem => new ConfigurationStringItemDesignViewModel(stringItem, ConfigurationSection),
ConfigurationBooleanItem booleanItem => new ConfigurationBooleanItemDesignViewModel(booleanItem, ConfigurationSection),
ConfigurationNumericItem numberItem => new ConfigurationNumericItemDesignViewModel(numberItem, ConfigurationSection),
ConfigurationSKColorItem colorItem => new ConfigurationSKColorItemDesignViewModel(colorItem, ConfigurationSection),
ConfigurationColorGradientItem colorGradientItem => new ConfigurationColorGradientItemDesignViewModel(colorGradientItem, ConfigurationSection),
_ => throw new ArgumentException($"Unknown configuration item type: {item.GetType()}")
};
}
}