using System; using System.Reactive.Linq; using DynamicData; using Intromat.Model.Compiler; using Intromat.PersistentModel; using Intromat.ViewModels; using Intromat.ViewModels.Editors; using Intromat.ViewModels.Previews; using Intromat.Views; using NodeNetwork.Toolkit.ValueNode; using ReactiveUI; using Splat; namespace Intromat.Nodes.Code { public class StringLiteralNode : CodeGenNodeViewModel { static StringLiteralNode() { Locator.CurrentMutable.Register(() => new CodeGenNodeView(), typeof(IViewFor)); } public StringLiteralNode() : base(NodeType.Literal) { Name = "String"; Output = new CodeGenOutputViewModel>(EPortType.String) { Name = "Value", Editor = ValueEditor, Value = ValueEditor.ValueChanged.Select(v => new StringLiteralValue { Value = v }) }; Outputs.Add(Output); var stringPreview = new StringPreviewViewModel(); Preview = stringPreview; this.WhenAnyValue(vm => vm.Output.CurrentValue) .Where(v => v != null) .Subscribe(_ => stringPreview.Value = ((StringLiteralValue)Output.CurrentValue).Value ?? string.Empty); } public StringValueEditorViewModel ValueEditor { get; } = new(); public ValueNodeOutputViewModel> Output { get; } public override NodeModelBase CreateModel() { return new StringLiteralModel(); } public override void LoadModel(NodeModelBase model) { base.LoadModel(model); var textLiteral = (StringLiteralModel)model; ValueEditor.Value = textLiteral.Value; } public override void SaveModel(NodeModelBase model) { base.SaveModel(model); var textLiteral = (StringLiteralModel)model; textLiteral.Value = ValueEditor.Value; } } }