Browse Source

Fixed new member creation crash

Krzysztof Krysiński 4 months ago
parent
commit
3b785f8d62

+ 22 - 2
src/PixiEditor.ChangeableDocument/Changes/Structure/CreateStructureMember_Change.cs

@@ -33,7 +33,21 @@ internal class CreateStructureMember_Change : Change
             !structureMemberOfType.IsAssignableTo(typeof(StructureNode)))
             !structureMemberOfType.IsAssignableTo(typeof(StructureNode)))
             return false;
             return false;
 
 
-        return target.TryFindNode<Node>(parentGuid, out _);
+        if (!target.TryFindNode<Node>(parentGuid, out Node parent))
+        {
+            return false;
+        }
+
+        var painterInput = parent.InputProperties.FirstOrDefault(x =>
+            x.ValueType == typeof(Painter)) as InputProperty<Painter>;
+
+        if (painterInput == null)
+        {
+            FailedMessage = "GRAPH_STATE_UNABLE_TO_CREATE_MEMBER";
+            return false;
+        }
+
+        return true;
     }
     }
 
 
     public override OneOf<None, IChangeInfo, List<IChangeInfo>> Apply(Document document, bool firstApply,
     public override OneOf<None, IChangeInfo, List<IChangeInfo>> Apply(Document document, bool firstApply,
@@ -49,7 +63,13 @@ internal class CreateStructureMember_Change : Change
         InputProperty<Painter> targetInput = parentNode.InputProperties.FirstOrDefault(x =>
         InputProperty<Painter> targetInput = parentNode.InputProperties.FirstOrDefault(x =>
             x.ValueType == typeof(Painter)) as InputProperty<Painter>;
             x.ValueType == typeof(Painter)) as InputProperty<Painter>;
 
 
-        var previouslyConnected = targetInput.Connection;
+        if (targetInput == null)
+        {
+            ignoreInUndo = true;
+            return new None();
+        }
+
+        var previouslyConnected = targetInput?.Connection;
 
 
         if (member is FolderNode folder)
         if (member is FolderNode folder)
         {
         {

+ 2 - 1
src/PixiEditor/Data/Localization/Languages/en.json

@@ -1009,5 +1009,6 @@
   "XOR_VECTOR_PATH_OP": "XOR",
   "XOR_VECTOR_PATH_OP": "XOR",
   "REVERSE_DIFFERENCE_VECTOR_PATH_OP": "Reverse Difference",
   "REVERSE_DIFFERENCE_VECTOR_PATH_OP": "Reverse Difference",
   "NO_DOCUMENT_OPEN": "Nothing's here",
   "NO_DOCUMENT_OPEN": "Nothing's here",
-  "EMPTY_DOCUMENT_ACTION_BTN": "Start creating"
+  "EMPTY_DOCUMENT_ACTION_BTN": "Start creating",
+  "GRAPH_STATE_UNABLE_TO_CREATE_MEMBER": "Current Node Graph state disallows creation of a new layer next to the selected one."
 }
 }