|
@@ -187,6 +187,12 @@ internal class DocumentUpdater
|
|
case ConnectProperty_ChangeInfo info:
|
|
case ConnectProperty_ChangeInfo info:
|
|
ProcessConnectProperty(info);
|
|
ProcessConnectProperty(info);
|
|
break;
|
|
break;
|
|
|
|
+ case NodeInputsChanged_ChangeInfo info:
|
|
|
|
+ ProcessInputsChanged(info);
|
|
|
|
+ break;
|
|
|
|
+ case NodeOutputsChanged_ChangeInfo info:
|
|
|
|
+ ProcessOutputsChanged(info);
|
|
|
|
+ break;
|
|
case NodePosition_ChangeInfo info:
|
|
case NodePosition_ChangeInfo info:
|
|
ProcessNodePosition(info);
|
|
ProcessNodePosition(info);
|
|
break;
|
|
break;
|
|
@@ -370,7 +376,7 @@ internal class DocumentUpdater
|
|
memberVM = doc.NodeGraphHandler.AllNodes.FirstOrDefault(x => x.Id == info.Id) as ILayerHandler;
|
|
memberVM = doc.NodeGraphHandler.AllNodes.FirstOrDefault(x => x.Id == info.Id) as ILayerHandler;
|
|
if (memberVM is ITransparencyLockableMember transparencyLockableMember)
|
|
if (memberVM is ITransparencyLockableMember transparencyLockableMember)
|
|
{
|
|
{
|
|
- transparencyLockableMember.SetLockTransparency(layerInfo.LockTransparency);
|
|
|
|
|
|
+ transparencyLockableMember.SetLockTransparency(layerInfo.LockTransparency);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else if (info is CreateFolder_ChangeInfo)
|
|
else if (info is CreateFolder_ChangeInfo)
|
|
@@ -425,7 +431,7 @@ internal class DocumentUpdater
|
|
closestMember.Selection = StructureMemberSelectionType.Hard;
|
|
closestMember.Selection = StructureMemberSelectionType.Hard;
|
|
}
|
|
}
|
|
|
|
|
|
-
|
|
|
|
|
|
+
|
|
doc.SetSelectedMember(closestMember);
|
|
doc.SetSelectedMember(closestMember);
|
|
}
|
|
}
|
|
|
|
|
|
@@ -437,7 +443,6 @@ internal class DocumentUpdater
|
|
{
|
|
{
|
|
IStructureMemberHandler? memberVM = doc.StructureHelper.FindOrThrow(info.Id);
|
|
IStructureMemberHandler? memberVM = doc.StructureHelper.FindOrThrow(info.Id);
|
|
memberVM.SetIsVisible(info.IsVisible);
|
|
memberVM.SetIsVisible(info.IsVisible);
|
|
-
|
|
|
|
}
|
|
}
|
|
|
|
|
|
private void ProcessUpdateStructureMemberName(StructureMemberName_ChangeInfo info)
|
|
private void ProcessUpdateStructureMemberName(StructureMemberName_ChangeInfo info)
|
|
@@ -472,7 +477,7 @@ internal class DocumentUpdater
|
|
var vm = new IRasterCelViewModel(info.TargetLayerGuid, info.Frame, 1,
|
|
var vm = new IRasterCelViewModel(info.TargetLayerGuid, info.Frame, 1,
|
|
info.KeyFrameId,
|
|
info.KeyFrameId,
|
|
(DocumentViewModel)doc, helper);
|
|
(DocumentViewModel)doc, helper);
|
|
-
|
|
|
|
|
|
+
|
|
doc.AnimationHandler.AddKeyFrame(vm);
|
|
doc.AnimationHandler.AddKeyFrame(vm);
|
|
}
|
|
}
|
|
|
|
|
|
@@ -514,7 +519,7 @@ internal class DocumentUpdater
|
|
private void ProcessCreateNode(CreateNode_ChangeInfo info)
|
|
private void ProcessCreateNode(CreateNode_ChangeInfo info)
|
|
{
|
|
{
|
|
var nodeType = info.Metadata.NodeType;
|
|
var nodeType = info.Metadata.NodeType;
|
|
-
|
|
|
|
|
|
+
|
|
var ns = nodeType.Namespace.Replace("ChangeableDocument.Changeables.Graph.", "ViewModels.Document.");
|
|
var ns = nodeType.Namespace.Replace("ChangeableDocument.Changeables.Graph.", "ViewModels.Document.");
|
|
var name = nodeType.Name.Replace("Node", "NodeViewModel");
|
|
var name = nodeType.Name.Replace("Node", "NodeViewModel");
|
|
var fullViewModelName = $"{ns}.{name}";
|
|
var fullViewModelName = $"{ns}.{name}";
|
|
@@ -522,19 +527,59 @@ internal class DocumentUpdater
|
|
|
|
|
|
if (nodeViewModelType == null)
|
|
if (nodeViewModelType == null)
|
|
throw new NullReferenceException($"No ViewModel found for {nodeType}. Looking for '{fullViewModelName}'");
|
|
throw new NullReferenceException($"No ViewModel found for {nodeType}. Looking for '{fullViewModelName}'");
|
|
-
|
|
|
|
|
|
+
|
|
var viewModel = (NodeViewModel)Activator.CreateInstance(nodeViewModelType);
|
|
var viewModel = (NodeViewModel)Activator.CreateInstance(nodeViewModelType);
|
|
|
|
|
|
InitializeNodeViewModel(info, viewModel);
|
|
InitializeNodeViewModel(info, viewModel);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ private void ProcessInputsChanged(NodeInputsChanged_ChangeInfo info)
|
|
|
|
+ {
|
|
|
|
+ NodeViewModel node = doc.StructureHelper.FindNode<NodeViewModel>(info.NodeId);
|
|
|
|
+
|
|
|
|
+ List<INodePropertyHandler> removedInputs =
|
|
|
|
+ node.Inputs.Where(x => !info.Inputs.Any(y => y.PropertyName == x.PropertyName)).ToList();
|
|
|
|
+
|
|
|
|
+ foreach (var input in removedInputs)
|
|
|
|
+ {
|
|
|
|
+ node.Inputs.Remove(input);
|
|
|
|
+ doc.NodeGraphHandler.RemoveConnection(input.Node.Id, input.PropertyName);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ List<NodePropertyInfo> newInputs =
|
|
|
|
+ info.Inputs.Where(x => node.Inputs.All(y => y.PropertyName != x.PropertyName)).ToList();
|
|
|
|
+
|
|
|
|
+ List<INodePropertyHandler> inputs = CreateProperties([..newInputs], node, true);
|
|
|
|
+ node.Inputs.AddRange(inputs);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private void ProcessOutputsChanged(NodeOutputsChanged_ChangeInfo info)
|
|
|
|
+ {
|
|
|
|
+ NodeViewModel node = doc.StructureHelper.FindNode<NodeViewModel>(info.NodeId);
|
|
|
|
+
|
|
|
|
+ List<INodePropertyHandler> removedOutputs =
|
|
|
|
+ node.Outputs.Where(x => !info.Outputs.Any(y => y.PropertyName == x.PropertyName)).ToList();
|
|
|
|
+
|
|
|
|
+ foreach (var output in removedOutputs)
|
|
|
|
+ {
|
|
|
|
+ node.Outputs.Remove(output);
|
|
|
|
+ doc.NodeGraphHandler.RemoveConnection(output.Node.Id, output.PropertyName);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ List<NodePropertyInfo> newOutputs =
|
|
|
|
+ info.Outputs.Where(x => node.Outputs.All(y => y.PropertyName != x.PropertyName)).ToList();
|
|
|
|
+
|
|
|
|
+ List<INodePropertyHandler> outputs = CreateProperties([..newOutputs], node, false);
|
|
|
|
+ node.Outputs.AddRange(outputs);
|
|
|
|
+ }
|
|
|
|
+
|
|
private void InitializeNodeViewModel(CreateNode_ChangeInfo info, NodeViewModel viewModel)
|
|
private void InitializeNodeViewModel(CreateNode_ChangeInfo info, NodeViewModel viewModel)
|
|
{
|
|
{
|
|
viewModel.Initialize(info.Id, info.InternalName, (DocumentViewModel)doc, helper);
|
|
viewModel.Initialize(info.Id, info.InternalName, (DocumentViewModel)doc, helper);
|
|
-
|
|
|
|
|
|
+
|
|
viewModel.SetName(info.NodeName);
|
|
viewModel.SetName(info.NodeName);
|
|
viewModel.SetPosition(info.Position);
|
|
viewModel.SetPosition(info.Position);
|
|
-
|
|
|
|
|
|
+
|
|
var inputs = CreateProperties(info.Inputs, viewModel, true);
|
|
var inputs = CreateProperties(info.Inputs, viewModel, true);
|
|
var outputs = CreateProperties(info.Outputs, viewModel, false);
|
|
var outputs = CreateProperties(info.Outputs, viewModel, false);
|
|
viewModel.Inputs.AddRange(inputs);
|
|
viewModel.Inputs.AddRange(inputs);
|
|
@@ -544,7 +589,7 @@ internal class DocumentUpdater
|
|
viewModel.Metadata = info.Metadata;
|
|
viewModel.Metadata = info.Metadata;
|
|
|
|
|
|
AddZoneIfNeeded(info, viewModel);
|
|
AddZoneIfNeeded(info, viewModel);
|
|
-
|
|
|
|
|
|
+
|
|
viewModel.OnInitialized();
|
|
viewModel.OnInitialized();
|
|
}
|
|
}
|
|
|
|
|
|
@@ -553,8 +598,9 @@ internal class DocumentUpdater
|
|
if (node.Metadata?.PairNodeGuid != null)
|
|
if (node.Metadata?.PairNodeGuid != null)
|
|
{
|
|
{
|
|
if (node.Metadata.PairNodeGuid == Guid.Empty) return;
|
|
if (node.Metadata.PairNodeGuid == Guid.Empty) return;
|
|
-
|
|
|
|
- INodeHandler otherNode = doc.NodeGraphHandler.AllNodes.FirstOrDefault(x => x.Id == node.Metadata.PairNodeGuid);
|
|
|
|
|
|
+
|
|
|
|
+ INodeHandler otherNode =
|
|
|
|
+ doc.NodeGraphHandler.AllNodes.FirstOrDefault(x => x.Id == node.Metadata.PairNodeGuid);
|
|
if (otherNode != null)
|
|
if (otherNode != null)
|
|
{
|
|
{
|
|
bool zoneExists =
|
|
bool zoneExists =
|
|
@@ -580,7 +626,9 @@ internal class DocumentUpdater
|
|
prop.PropertyName = input.PropertyName;
|
|
prop.PropertyName = input.PropertyName;
|
|
prop.IsInput = isInput;
|
|
prop.IsInput = isInput;
|
|
prop.IsFunc = input.ValueType.IsAssignableTo(typeof(Delegate));
|
|
prop.IsFunc = input.ValueType.IsAssignableTo(typeof(Delegate));
|
|
- prop.InternalSetValue(prop.IsFunc ? (input.InputValue as ShaderExpressionVariable)?.GetConstant() : input.InputValue);
|
|
|
|
|
|
+ prop.InternalSetValue(prop.IsFunc
|
|
|
|
+ ? (input.InputValue as ShaderExpressionVariable)?.GetConstant()
|
|
|
|
+ : input.InputValue);
|
|
inputs.Add(prop);
|
|
inputs.Add(prop);
|
|
}
|
|
}
|
|
|
|
|
|
@@ -603,7 +651,7 @@ internal class DocumentUpdater
|
|
|
|
|
|
doc.NodeGraphHandler.RemoveConnections(info.Id);
|
|
doc.NodeGraphHandler.RemoveConnections(info.Id);
|
|
doc.NodeGraphHandler.RemoveNode(info.Id);
|
|
doc.NodeGraphHandler.RemoveNode(info.Id);
|
|
-
|
|
|
|
|
|
+
|
|
doc.SnappingHandler.SnappingController.RemoveAll(info.Id.ToString());
|
|
doc.SnappingHandler.SnappingController.RemoveAll(info.Id.ToString());
|
|
}
|
|
}
|
|
|
|
|
|
@@ -666,19 +714,16 @@ internal class DocumentUpdater
|
|
|
|
|
|
property.Errors = info.Errors;
|
|
property.Errors = info.Errors;
|
|
|
|
|
|
- if(info.Errors != null)
|
|
|
|
- return;
|
|
|
|
-
|
|
|
|
ProcessStructureMemberProperty(info, property);
|
|
ProcessStructureMemberProperty(info, property);
|
|
-
|
|
|
|
|
|
+
|
|
property.InternalSetValue(info.Value);
|
|
property.InternalSetValue(info.Value);
|
|
-
|
|
|
|
|
|
+
|
|
if (info.Property == CustomOutputNode.OutputNamePropertyName)
|
|
if (info.Property == CustomOutputNode.OutputNamePropertyName)
|
|
{
|
|
{
|
|
doc.NodeGraphHandler.UpdateAvailableRenderOutputs();
|
|
doc.NodeGraphHandler.UpdateAvailableRenderOutputs();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+
|
|
private void ProcessStructureMemberProperty(PropertyValueUpdated_ChangeInfo info, INodePropertyHandler property)
|
|
private void ProcessStructureMemberProperty(PropertyValueUpdated_ChangeInfo info, INodePropertyHandler property)
|
|
{
|
|
{
|
|
// TODO: This most likely can be handled inside viewmodel itself
|
|
// TODO: This most likely can be handled inside viewmodel itself
|
|
@@ -722,7 +767,7 @@ internal class DocumentUpdater
|
|
{
|
|
{
|
|
doc.AnimationHandler.SetOnionFrames(info.OnionFrames, info.Opacity);
|
|
doc.AnimationHandler.SetOnionFrames(info.OnionFrames, info.Opacity);
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+
|
|
private void ProcessProcessingColorSpace(ProcessingColorSpace_ChangeInfo info)
|
|
private void ProcessProcessingColorSpace(ProcessingColorSpace_ChangeInfo info)
|
|
{
|
|
{
|
|
doc.SetProcessingColorSpace(info.NewColorSpace);
|
|
doc.SetProcessingColorSpace(info.NewColorSpace);
|