mirror of
https://github.com/Artemis-RGB/Artemis
synced 2026-11-11 03:19:56 +00:00
Add design mode
This commit is contained in:
1 parent
5a681a0480
commit
eb812cb5e1
50 files changed
+782
-257
No files matched your search
+59
-20
@@ -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()}")
|
||||
};
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user