Pārlūkot izejas kodu

fixing bug related to incorrect saving

Pamela Wolf 4 gadi atpakaļ
vecāks
revīzija
2cb538cba1
1 mainītis faili ar 56 papildinājumiem un 23 dzēšanām
  1. 56 23
      nodeEditor/src/diagram/graphFrame.ts

+ 56 - 23
nodeEditor/src/diagram/graphFrame.ts

@@ -90,9 +90,10 @@ export class GraphFrame {
         port.delegatedPort = localPort;
         this._controlledPorts.push(port);
 
-        if(!port.isExposed) {
-            port.isExposed = true;
+        port.exposedPortPosition = this._exposedInPorts.findIndex(nodePort => nodePort === port);
+        if(port.exposedPortPosition < 0) {
             this._exposedInPorts.push(port);
+            port.exposedPortPosition = this._exposedInPorts.length -1;
         }
     }
 
@@ -139,39 +140,57 @@ export class GraphFrame {
             node.isVisible = false;
         }
 
-        for (var port of this._exposedOutPorts) { // Output
+        for (var i = 0; i < this._exposedOutPorts.length; ++i) { // Output
+            var port = this._exposedOutPorts[i];
             if(port.node === null || port.node.enclosingFrameId != this.id) {
                 let index = this._exposedOutPorts.findIndex(nodePort => nodePort === port);
                 this._exposedOutPorts.splice(index,1);
                 port.isExposed = false;
+                port.exposedPortPosition = -1;
             }
             else {
-                this.createOutputPorts(port, port.node);
+                if(!this.createOutputPorts(port, port.node))
+                {
+                    let index = this._exposedOutPorts.findIndex(nodePort => nodePort === port);
+                    if(index >= 0)
+                    {   
+                        this._exposedOutPorts.splice(index,1);
+                        port.exposedPortPosition = -1;
+                        continue;
+                    }
+                }
+                ++i;
             }
         }
 
-        for (var port of this._exposedInPorts) { // Input
+        for (var i = 0; i < this._exposedInPorts.length; ) { // Input
+            var port = this._exposedInPorts[i];
             if(port.node === null || port.node.enclosingFrameId != this.id) {
                 let index = this._exposedInPorts.findIndex(nodePort => nodePort === port);
                 this._exposedInPorts.splice(index,1);
                 port.isExposed = false;
+                port.exposedPortPosition = -1;
             }
             else {
-                this.createInputPorts(port, port.node);
+                if(this.createInputPorts(port, port.node)) {
+                    ++i;
+                }
             }
         }
 
         for (var node of this._nodes) {
             for (var port of node.outputPorts) { // Output
-                if(!port.isExposed) {
+                port.exposedPortPosition = this._exposedOutPorts.findIndex(nodePort => nodePort === port);
+                if(port.exposedPortPosition < 0) {
                     if(this.createOutputPorts(port,node)) {
                         this._exposedOutPorts.push(port);
-                        port.isExposed = true;
+                        port.exposedPortPosition = this._exposedOutPorts.length -1;
                     }
                 }
             }
             for (var port of node.inputPorts) { // Input
-                if(!port.isExposed){
+                port.exposedPortPosition = this._exposedInPorts.findIndex(nodePort => nodePort === port);
+                if(port.exposedPortPosition < 0){
                     this.createInputPorts(port, node);
                 }
             }
@@ -185,9 +204,13 @@ export class GraphFrame {
         if(aPort >= 0) {
             exposedPorts.splice(aPort,1);
             nodeLink.portA.isExposed = false;
+            nodeLink.portA.exposedPortPosition = -1;
         } else if(bPort >= 0) {
             exposedPorts.splice(bPort,1);
-            if(nodeLink.portB) nodeLink.portB.isExposed = false;
+            if(nodeLink.portB){ 
+                nodeLink.portB.isExposed = false;
+                nodeLink.portB.exposedPortPosition = -1
+            }
         }
     }
     
@@ -203,10 +226,29 @@ export class GraphFrame {
                     });
                     this._onNodeLinkDisposedObservers.push(onLinkDisposedObserver);
                 }
+                else {
+                    let index = this._exposedInPorts.findIndex(nodePort => nodePort === port);
+                    if(index >= 0)
+                    {   
+                        this._exposedInPorts.splice(index,1);
+                        port.exposedPortPosition = -1;
+                        return false;
+                    }
+                }
             }
         } else if(port.exposedOnFrame) {
             this._createInputPort(port, node);
         }
+        else {
+            let index = this._exposedInPorts.findIndex(nodePort => nodePort === port);
+            if(index >= 0)
+            {   
+                this._exposedInPorts.splice(index,1);
+                port.exposedPortPosition = -1;
+                return false;
+            }
+        }
+        return true;
     }
 
     private createOutputPorts(port: NodePort, node: GraphNode){
@@ -250,7 +292,7 @@ export class GraphFrame {
             this._controlledPorts.push(port);
             return true;
         }
-        return false
+        return false;
     }
 
     private _redrawFramePorts() {
@@ -1427,28 +1469,19 @@ export class GraphFrame {
             newFrame.refresh();
         }
         
-        
         for (var node of newFrame.nodes) {
             for (var port of node.outputPorts) { // Output
                 if(port.exposedOnFrame) {
-                    port.isExposed = true;
-                    if(port.exposedPortPosition) { 
+                    if(port.exposedPortPosition != -1) {
                         newFrame._exposedOutPorts[port.exposedPortPosition] = port;
                     }
-                    else {
-                        newFrame._exposedOutPorts.push(port);
-                    }
                 }
             }
 
             for (var port of node.inputPorts) { // Inports
                 if(port.exposedOnFrame) {
-                    port.isExposed = true;
-                    if(port.exposedPortPosition) { 
-                        newFrame._exposedInPorts[port.exposedPortPosition] = port;
-                    }
-                    else {
-                        newFrame._exposedInPorts.push(port);
+                    if(port.exposedPortPosition != -1) {
+                         newFrame._exposedInPorts[port.exposedPortPosition] = port;
                     }
                 }
             }