Ver Fonte

Merge remote-tracking branch 'origin/master'

Eren Yilmaz há 6 anos atrás
pai
commit
69f218a756
4 ficheiros alterados com 77 adições e 44 exclusões
  1. 16 15
      src/bk/BKNodePlacement.java
  2. 13 6
      src/bk/Combine.java
  3. 34 12
      src/bk/Compaction.java
  4. 14 11
      src/bk/ExtremalLayoutCalc.java

+ 16 - 15
src/bk/BKNodePlacement.java

@@ -147,21 +147,22 @@ public class BKNodePlacement extends AnimatedAlgorithm {
             switch( state )
             {
             case CONFLICTS:
-                breakpoint |= !conflictsNode.setSelected( true );
-                    switch( (StageStatus)(ConflictDetection.class.getMethod( fName ).invoke( conftion ) ) )
-                    {
-                    case FINISHED:
-                        inside = false;
-                        conflictsNode.setSelected( false );
-                        breakpoint |= !layout1Node.setSelected( true );
-                        state = State.LAYOUT1;
-                        break;
-                    case BREAKPOINT:
-                        inside = true;
-                        return StageStatus.BREAKPOINT;
-                    case UNFINISHED:
-                        inside = true;
-                    }
+            	if( !conflictsNode.isSelected() )
+            		breakpoint |= !conflictsNode.setSelected( true );
+                switch( (StageStatus)(ConflictDetection.class.getMethod( fName ).invoke( conftion ) ) )
+                {
+                case FINISHED:
+                    inside = false;
+                    conflictsNode.setSelected( false );
+                    breakpoint |= !layout1Node.setSelected( true );
+                    state = State.LAYOUT1;
+                    break;
+                case BREAKPOINT:
+                    inside = true;
+                    return StageStatus.BREAKPOINT;
+                case UNFINISHED:
+                    inside = true;
+                }
                 break;
             case LAYOUT1:
                 switch( (StageStatus)(ExtremalLayoutCalc.class.getMethod( fName ).invoke( layouts[ 0 ] ) ) )

+ 13 - 6
src/bk/Combine.java

@@ -51,10 +51,12 @@ public class Combine implements AlgorithmStage {
 	
 	@Override
 	public StageStatus forwardStep() {
+		breakPoint = false;
 		if( state == State.ALIGN )
 		{
 		    inside = false;
-		    breakPoint = !alignNode.setSelected( true );
+		    if( !alignNode.isSelected() )
+		    	breakPoint |= !alignNode.setSelected( true );
 			int tblw = (int)graph.getWidth( LayoutType.TOP_BOTTOM_LEFT );
 			int tbrw = (int)graph.getWidth( LayoutType.TOP_BOTTOM_RIGHT );
 			int btlw = (int)graph.getWidth( LayoutType.BOTTOM_TOP_LEFT );
@@ -87,7 +89,9 @@ public class Combine implements AlgorithmStage {
 			actions.add( 0, () -> {
                 inside = false;
                 setNode.setSelected( false );
-                breakPoint = !alignNode.setSelected( true );
+                breakPoint = false;
+    		    if( !alignNode.isSelected() )
+    		    	breakPoint |= !alignNode.setSelected( true );
 				state = State.ALIGN;
 				graph.setColor( null, null );
 				//MainView.frame.setSize( MainView.frame.getWidth() + 1, MainView.frame.getHeight() );
@@ -95,7 +99,8 @@ public class Combine implements AlgorithmStage {
 			});
 			state = State.SET_COORDINATES;
             alignNode.setSelected( false );
-            breakPoint |= !setNode.setSelected( true );
+		    if( !setNode.isSelected() )
+		    	breakPoint |= !setNode.setSelected( true );
             breakPoint |= !loopNode.setSelected( true );
 		}
 		else
@@ -121,9 +126,11 @@ public class Combine implements AlgorithmStage {
 			int oldX = (int)current.getX( LayoutType.COMBINED );
 			current.setX( (positions.get( 1 ) + positions.get( 2 )) / 2, true, LayoutType.COMBINED );
 			actions.add( 0, () -> {
-                inside = true; 
-                breakPoint = !setNode.setSelected( true );
-                breakPoint |= !loopNode.setSelected( true );
+                inside = true;
+                breakPoint = false;
+    		    if( !setNode.isSelected() )
+    		    	breakPoint |= !setNode.setSelected( true );
+    		    breakPoint |= !loopNode.setSelected( true );
 				vIndex--;
 				current.setX( oldX, true, LayoutType.COMBINED );
 				current.setSelected( null );

+ 34 - 12
src/bk/Compaction.java

@@ -83,11 +83,13 @@ public class Compaction implements AlgorithmStage{
 	
 	@Override
 	public StageStatus forwardStep() {
+		breakPoint = false;
 		int acSize = actions.size();
 		if( state == CompactionState.PLACE_BLOCKS ) // blöcke platzieren
 		{
 		    inside = true;
-		    breakPoint = !placeNode.setSelected( true );
+		    if( !placeNode.isSelected() )
+		    	breakPoint = !placeNode.setSelected( true );
 		    breakPoint |= !placeLoopNode.setSelected( true );
 			if( stack.size() == 0 ) // äußere schleife, placeblocks bisher nicht aufgerufen
 			{
@@ -111,7 +113,8 @@ public class Compaction implements AlgorithmStage{
 				    // wechsele in die phase des Blöckeshiftens
 		            placeNode.setSelected( false );
 		            placeLoopNode.setSelected( false );
-		            breakPoint |= !applyNode.setSelected( true );
+				    if( !applyNode.isSelected() )
+				    	breakPoint |= !applyNode.setSelected( true );
 		            breakPoint |= !applyLoopNode.setSelected( true );
 					state = CompactionState.APPLY_SHIFT;
 					inside = false;
@@ -119,7 +122,9 @@ public class Compaction implements AlgorithmStage{
 					actions.add( 0, ()-> {
 	                    applyNode.setSelected( false );
 	                    applyLoopNode.setSelected( false );
-	                    breakPoint = !placeNode.setSelected( true );
+	                    breakPoint = false;
+					    if( !placeNode.isSelected() )
+					    	breakPoint |= !placeNode.setSelected( true );
 	                    breakPoint |= !placeLoopNode.setSelected( true );
 						vIndex = oldVIndex;
 						inside = false;
@@ -139,7 +144,9 @@ public class Compaction implements AlgorithmStage{
 					
 					// die "undo"-action
 					actions.add( 0, ()-> {
-                        breakPoint = !placeNode.setSelected( true );
+	                    breakPoint = false;
+					    if( !placeNode.isSelected() )
+					    	breakPoint |= !placeNode.setSelected( true );
                         breakPoint |= !placeLoopNode.setSelected( true );
 					    inside = true;
 						stack.get( 0 ).v.setX( oldX, false, layout );
@@ -176,7 +183,9 @@ public class Compaction implements AlgorithmStage{
 		                    
 		                    // die "undo"-action
 							actions.add( 0, ()-> {
-		                        breakPoint = !placeNode.setSelected( true );
+			                    breakPoint = false;
+							    if( !placeNode.isSelected() )
+							    	breakPoint |= !placeNode.setSelected( true );
 		                        breakPoint |= !placeLoopNode.setSelected( true );
 							    inside = true;
 								stack.get( 0 ).v.setX( oldX, false, layout );
@@ -190,7 +199,9 @@ public class Compaction implements AlgorithmStage{
 						    // tue nix
 							sf.w.setSelected( layout );
 							actions.add( 0, ()-> {
-		                        breakPoint = !placeNode.setSelected( true );
+			                    breakPoint = false;
+							    if( !placeNode.isSelected() )
+							    	breakPoint |= !placeNode.setSelected( true );
 		                        breakPoint |= !placeLoopNode.setSelected( true );
                                 inside = true;
 								stack.get( 0 ).u = null;
@@ -207,7 +218,9 @@ public class Compaction implements AlgorithmStage{
                             System.out.println( "return place_block( " + sf.v + " )" );
 							stack.remove( 0 );
 							actions.add( 0, ()-> {
-		                        breakPoint = !placeNode.setSelected( true );
+			                    breakPoint = false;
+							    if( !placeNode.isSelected() )
+							    	breakPoint |= !placeNode.setSelected( true );
 		                        breakPoint |= !placeLoopNode.setSelected( true );
                                 inside = true;
 								stack.add( 0, sf );
@@ -218,7 +231,9 @@ public class Compaction implements AlgorithmStage{
 						else
 						{ //nur "undo aktion" hinzufügen
 							actions.add( 0, ()-> {
-		                        breakPoint = !placeNode.setSelected( true );
+			                    breakPoint = false;
+							    if( !placeNode.isSelected() )
+							    	breakPoint |= !placeNode.setSelected( true );
 		                        breakPoint |= !placeLoopNode.setSelected( true );
                                 inside = true;
 								sf.w = oldW;
@@ -266,7 +281,9 @@ public class Compaction implements AlgorithmStage{
 					    System.out.println( "return place_block( " + sf.v + " )" );
 						stack.remove( 0 );
 						actions.add( 0, ()-> {
-	                        breakPoint = !placeNode.setSelected( true );
+		                    breakPoint = false;
+						    if( !placeNode.isSelected() )
+						    	breakPoint |= !placeNode.setSelected( true );
 	                        breakPoint |= !placeLoopNode.setSelected( true );
                             inside = true;
 							stack.add( 0, sf );
@@ -281,7 +298,9 @@ public class Compaction implements AlgorithmStage{
 					else
 					{ //nur "undo aktion" hinzufügen
 						actions.add( 0, ()-> {
-	                        breakPoint = !placeNode.setSelected( true );
+		                    breakPoint = false;
+						    if( !placeNode.isSelected() )
+						    	breakPoint |= !placeNode.setSelected( true );
 	                        breakPoint |= !placeLoopNode.setSelected( true );
                             inside = true;
 							stack.get( 0 ).v.setSink(  oldSink, layout );
@@ -298,7 +317,8 @@ public class Compaction implements AlgorithmStage{
 		else if( state == CompactionState.APPLY_SHIFT )// "Compute absolute coordinates"
 		{
             inside = true;
-            breakPoint = !applyNode.setSelected( true );
+		    if( !applyNode.isSelected() )
+		    	breakPoint |= !applyNode.setSelected( true );
             breakPoint |= !applyLoopNode.setSelected( true );
 		    if( vIndex >= graph.getContainedNodes().size() )
 		    {
@@ -317,7 +337,9 @@ public class Compaction implements AlgorithmStage{
 				v.setX( v.getX( layout ) + v.getSink( layout ).getShift( layout ), true, layout );
 			actions.add( 0, ()-> {
                 inside = true;
-                breakPoint = !applyNode.setSelected( true );
+                breakPoint = false;
+			    if( !applyNode.isSelected() )
+			    	breakPoint |= !applyNode.setSelected( true );
                 breakPoint |= !applyLoopNode.setSelected( true );
 				v.setX( oldX, oldDef, layout );
 				v.setSelected( layout );

+ 14 - 11
src/bk/ExtremalLayoutCalc.java

@@ -81,7 +81,7 @@ public class ExtremalLayoutCalc implements AlgorithmStage {
         {
             LayoutState oldState = status;
             StageStatus stage = StageStatus.UNFINISHED;
-            while( status == oldState && stage != StageStatus.FINISHED )
+            while( status == oldState && stage == StageStatus.UNFINISHED )
                 stage = forwardStep();
             return stage;
         }
@@ -94,7 +94,7 @@ public class ExtremalLayoutCalc implements AlgorithmStage {
         if( !inside )
         {
             StageStatus status = StageStatus.UNFINISHED;
-            while( status != StageStatus.FINISHED )
+            while( status == StageStatus.UNFINISHED )
                 status = forwardStep();
             return status;
         }
@@ -108,7 +108,7 @@ public class ExtremalLayoutCalc implements AlgorithmStage {
         {
             LayoutState oldState = status;
             StageStatus stage = StageStatus.UNFINISHED;
-            while( status == oldState && stage != StageStatus.FINISHED )
+            while( status == oldState && stage == StageStatus.UNFINISHED )
                 stage = backwardStep();
             return stage;
         }
@@ -121,7 +121,7 @@ public class ExtremalLayoutCalc implements AlgorithmStage {
         if( !inside )
         {
             StageStatus status = StageStatus.UNFINISHED;
-            while( status != StageStatus.FINISHED )
+            while( status == StageStatus.UNFINISHED )
                 status = backwardStep();
             return status;
         }
@@ -135,7 +135,8 @@ public class ExtremalLayoutCalc implements AlgorithmStage {
         try {
             if( status == LayoutState.BLOCK_CALCULATION )
             {
-                breakpoint |= !bcNode.setSelected( true );
+            	if( !bcNode.isSelected() )
+            		breakpoint |= !bcNode.setSelected( true );
                 switch( (StageStatus)(BlockCalc.class.getMethod( fName ).invoke( bc ) ) )
                 {
                 case FINISHED:
@@ -150,11 +151,11 @@ public class ExtremalLayoutCalc implements AlgorithmStage {
                 case UNFINISHED:
                     inside = true;
                 }
-                return StageStatus.UNFINISHED;
             }
-            if( status == LayoutState.COMPACTION )
+            else if( status == LayoutState.COMPACTION )
             {
-                breakpoint |= !cpNode.setSelected( true );
+            	if( !cpNode.isSelected() )
+            	    breakpoint |= !cpNode.setSelected( true );
                 switch( (StageStatus)(Compaction.class.getMethod( fName ).invoke( cp ) ) )
                 {
                 case FINISHED:
@@ -190,7 +191,8 @@ public class ExtremalLayoutCalc implements AlgorithmStage {
         try {
             if( status == LayoutState.BLOCK_CALCULATION )
             {
-                breakpoint |= !bcNode.setSelected( true );
+            	if( !bcNode.isSelected() )
+            		breakpoint |= !bcNode.setSelected( true );
                 switch( (StageStatus)(BlockCalc.class.getMethod( fName ).invoke( bc ) ) )
                 {
                 case FINISHED:
@@ -204,9 +206,10 @@ public class ExtremalLayoutCalc implements AlgorithmStage {
                     inside = true;
                 }
             }
-            if( status == LayoutState.COMPACTION )
+            else if( status == LayoutState.COMPACTION )
             {
-                breakpoint |= !cpNode.setSelected( true );
+            	if( !cpNode.isSelected() )
+            		breakpoint |= !cpNode.setSelected( true );
                 switch( (StageStatus)(Compaction.class.getMethod( fName ).invoke( cp ) ) )
                 {
                 case FINISHED: