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 FloatLiteralNode : CodeGenNodeViewModel { static FloatLiteralNode() { Locator.CurrentMutable.Register(() => new CodeGenNodeView(), typeof(IViewFor)); } public FloatLiteralNode() : base(NodeType.Literal) { Name = "Float"; Output = new CodeGenOutputViewModel>(EPortType.Float) { Name = "Value", Editor = ValueEditor, Value = ValueEditor.ValueChanged.Select(v => new FloatLiteralValue { 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 ?? "0.0"); } public FloatValueEditorViewModel ValueEditor { get; } = new(); public ValueNodeOutputViewModel> Output { get; } public override NodeModelBase CreateModel() { return new FloatLiteralModel(); } public override void LoadModel(NodeModelBase model) { base.LoadModel(model); var floatLiteral = (FloatLiteralModel)model; ValueEditor.Value = floatLiteral.Value; } public override void SaveModel(NodeModelBase model) { base.SaveModel(model); var floatLiteral = (FloatLiteralModel)model; floatLiteral.Value = ValueEditor.Value; } } }