66 lines
2.0 KiB
C#
66 lines
2.0 KiB
C#
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<StringLiteralNode>));
|
|
}
|
|
|
|
public StringLiteralNode() : base(NodeType.Literal)
|
|
{
|
|
Name = "String";
|
|
|
|
Output = new CodeGenOutputViewModel<ITypedExpression<string?>>(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<ITypedExpression<string?>> 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;
|
|
}
|
|
}
|
|
} |