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 BooleanLiteralNode : CodeGenNodeViewModel { static BooleanLiteralNode() { Locator.CurrentMutable.Register(() => new CodeGenNodeView(), typeof(IViewFor)); } public BooleanLiteralNode() : base(NodeType.Literal) { Name = "Boolean"; Output = new CodeGenOutputViewModel>(EPortType.Boolean) { Name = "Value", Editor = ValueEditor, Value = ValueEditor.ValueChanged.Select(v => new BooleanLiteralValue { Value = v }) }; Outputs.Add(Output); var stringPreview = new StringPreviewViewModel(); Preview = stringPreview; this.WhenAnyValue(vm => vm.Output.CurrentValue) .Where(v => v != null) .Subscribe(_ => stringPreview.Value = Output.CurrentValue.PreviewValue ?? "False"); } public BooleanValueEditorViewModel ValueEditor { get; } = new(); public ValueNodeOutputViewModel> Output { get; } public override NodeModelBase CreateModel() { return new BooleanLiteralModel(); } public override void LoadModel(NodeModelBase model) { base.LoadModel(model); var booleanLiteral = (BooleanLiteralModel)model; ValueEditor.Value = booleanLiteral.Value; } public override void SaveModel(NodeModelBase model) { base.SaveModel(model); var booleanLiteral = (BooleanLiteralModel)model; booleanLiteral.Value = ValueEditor.Value; } } }