diff --git a/graphminimize/src/main/java/GraphMinimize.java b/graphminimize/src/main/java/GraphMinimize.java index 2801450d4cf9a8b534d9ace13757d87a49495fb9..57141ce403f773a0a7830fe769c07a67d5598d8f 100755 --- a/graphminimize/src/main/java/GraphMinimize.java +++ b/graphminimize/src/main/java/GraphMinimize.java @@ -156,7 +156,7 @@ public class GraphMinimize { graph.minimizeTau(hasTauOnly(args)); - graph.display(true); + graph.display(true, false); } } // Class GraphShow diff --git a/graphshow/src/main/java/GraphShow.java b/graphshow/src/main/java/GraphShow.java index a8333f593b9a5268c6f7f99a978ab0adfb279632..3170ff4ff08f71aacbb4e041780982a34e0c819e 100755 --- a/graphshow/src/main/java/GraphShow.java +++ b/graphshow/src/main/java/GraphShow.java @@ -137,7 +137,7 @@ public class GraphShow { System.out.println("Graph has " + graph.getNbOfStates() + " states and " + graph.getNbOfTransitions() + " transitions."); - graph.display(true); + graph.display(true, false); } diff --git a/modeling/AVATAR/testDependencyGraphs.xml b/modeling/AVATAR/testDependencyGraphs.xml index 704ff892a79fdc871c2a61b33188e7019d78d8bc..272ef9c51575ce8c0f7ab7da9314d6302817edc5 100644 --- a/modeling/AVATAR/testDependencyGraphs.xml +++ b/modeling/AVATAR/testDependencyGraphs.xml @@ -1858,11 +1858,11 @@ Double-click to edit </COMPONENT> <SUBCOMPONENT type="5000" id="957" index="3" uid="08f5deac-ff7e-424d-9124-5dd57f0a2ebe" > <father id="1039" num="0" /> -<cdparam x="279" y="67" /> -<sizeparam width="83" height="71" minWidth="5" minHeight="2" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<cdparam x="366" y="66" /> +<sizeparam width="79" height="71" minWidth="5" minHeight="2" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> <hidden value="false" /> -<cdrectangleparam minX="0" maxX="93" minY="0" maxY="45" /> -<infoparam name="Block0" value="Instance1" /> +<cdrectangleparam minX="0" maxX="97" minY="0" maxY="45" /> +<infoparam name="Block0" value="Instance2" /> <TGConnectingPoint num="0" id="917" /> <TGConnectingPoint num="1" id="918" /> <TGConnectingPoint num="2" id="919" /> @@ -1910,11 +1910,11 @@ Double-click to edit </SUBCOMPONENT> <SUBCOMPONENT type="5000" id="998" index="4" uid="08f5deac-ff7e-424d-9124-5dd57f0a2ebe" > <father id="1039" num="1" /> -<cdparam x="366" y="66" /> -<sizeparam width="79" height="71" minWidth="5" minHeight="2" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<cdparam x="279" y="67" /> +<sizeparam width="83" height="71" minWidth="5" minHeight="2" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> <hidden value="false" /> -<cdrectangleparam minX="0" maxX="97" minY="0" maxY="45" /> -<infoparam name="Block0" value="Instance2" /> +<cdrectangleparam minX="0" maxX="93" minY="0" maxY="45" /> +<infoparam name="Block0" value="Instance1" /> <TGConnectingPoint num="0" id="958" /> <TGConnectingPoint num="1" id="959" /> <TGConnectingPoint num="2" id="960" /> @@ -2929,13 +2929,13 @@ Double-click to edit <Signal value="in answer()" attached="true" /> </extraparam> </COMPONENT> -<SUBCOMPONENT type="5000" id="1508" index="4" uid="1f2ca3b6-69b5-4809-9120-4e63b74dd9d9" > +<SUBCOMPONENT type="5000" id="1508" index="4" uid="38090441-87bf-4259-b51d-053be523a93e" > <father id="1590" num="0" /> -<cdparam x="412" y="230" /> -<sizeparam width="141" height="88" minWidth="5" minHeight="2" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<cdparam x="571" y="228" /> +<sizeparam width="150" height="92" minWidth="5" minHeight="2" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> <hidden value="false" /> -<cdrectangleparam minX="0" maxX="215" minY="0" maxY="158" /> -<infoparam name="Block0" value="Client1" /> +<cdrectangleparam minX="0" maxX="206" minY="0" maxY="154" /> +<infoparam name="Block0" value="Client2" /> <TGConnectingPoint num="0" id="1468" /> <TGConnectingPoint num="1" id="1469" /> <TGConnectingPoint num="2" id="1470" /> @@ -2981,13 +2981,13 @@ Double-click to edit <CryptoBlock value="false" /> </extraparam> </SUBCOMPONENT> -<SUBCOMPONENT type="5000" id="1549" index="5" uid="38090441-87bf-4259-b51d-053be523a93e" > +<SUBCOMPONENT type="5000" id="1549" index="5" uid="1f2ca3b6-69b5-4809-9120-4e63b74dd9d9" > <father id="1590" num="1" /> -<cdparam x="571" y="228" /> -<sizeparam width="150" height="92" minWidth="5" minHeight="2" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<cdparam x="412" y="230" /> +<sizeparam width="141" height="88" minWidth="5" minHeight="2" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> <hidden value="false" /> -<cdrectangleparam minX="0" maxX="206" minY="0" maxY="154" /> -<infoparam name="Block0" value="Client2" /> +<cdrectangleparam minX="0" maxX="215" minY="0" maxY="158" /> +<infoparam name="Block0" value="Client1" /> <TGConnectingPoint num="0" id="1509" /> <TGConnectingPoint num="1" id="1510" /> <TGConnectingPoint num="2" id="1511" /> @@ -3909,8 +3909,8 @@ Double-click to edit <infoparam name="connector" value="" /> <TGConnectingPoint num="0" id="1977" /> <TGConnectingPoint num="1" id="1978" /> -<P1 x="921" y="357" id="2029" /> -<P2 x="1023" y="392" id="1987" /> +<P1 x="921" y="357" id="1988" /> +<P2 x="1023" y="392" id="2028" /> <Point x="921" y="391" /> <AutomaticDrawing data="true" /> <extraparam> @@ -3993,13 +3993,13 @@ Double-click to edit <Signal value="in value()" attached="true" /> </extraparam> </COMPONENT> -<SUBCOMPONENT type="5000" id="2022" index="5" uid="1c21ee3a-d0b2-4f9a-92bf-e9341f5daaa1" > +<SUBCOMPONENT type="5000" id="2022" index="5" uid="b9daba4a-7b74-4e52-8bd9-b5bc9df56d86" > <father id="2104" num="0" /> -<cdparam x="1023" y="234" /> -<sizeparam width="143" height="158" minWidth="5" minHeight="2" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<cdparam x="830" y="238" /> +<sizeparam width="183" height="119" minWidth="5" minHeight="2" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> <hidden value="false" /> -<cdrectangleparam minX="0" maxX="221" minY="0" maxY="95" /> -<infoparam name="Block" value="center1" /> +<cdrectangleparam minX="0" maxX="181" minY="0" maxY="134" /> +<infoparam name="Block" value="Filter" /> <TGConnectingPoint num="0" id="1982" /> <TGConnectingPoint num="1" id="1983" /> <TGConnectingPoint num="2" id="1984" /> @@ -4043,16 +4043,16 @@ Double-click to edit <extraparam> <blockType data="block" color="-4072719" /> <CryptoBlock value="false" /> -<Signal value="in query()" attached="true" /> +<Signal value="out query()" attached="true" /> </extraparam> </SUBCOMPONENT> -<SUBCOMPONENT type="5000" id="2063" index="6" uid="b9daba4a-7b74-4e52-8bd9-b5bc9df56d86" > +<SUBCOMPONENT type="5000" id="2063" index="6" uid="1c21ee3a-d0b2-4f9a-92bf-e9341f5daaa1" > <father id="2104" num="1" /> -<cdparam x="830" y="238" /> -<sizeparam width="183" height="119" minWidth="5" minHeight="2" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<cdparam x="1023" y="234" /> +<sizeparam width="143" height="158" minWidth="5" minHeight="2" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> <hidden value="false" /> -<cdrectangleparam minX="0" maxX="181" minY="0" maxY="134" /> -<infoparam name="Block" value="Filter" /> +<cdrectangleparam minX="0" maxX="221" minY="0" maxY="95" /> +<infoparam name="Block" value="center1" /> <TGConnectingPoint num="0" id="2023" /> <TGConnectingPoint num="1" id="2024" /> <TGConnectingPoint num="2" id="2025" /> @@ -4096,7 +4096,7 @@ Double-click to edit <extraparam> <blockType data="block" color="-4072719" /> <CryptoBlock value="false" /> -<Signal value="out query()" attached="true" /> +<Signal value="in query()" attached="true" /> </extraparam> </SUBCOMPONENT> @@ -4152,13 +4152,13 @@ Double-click to edit <Signal value="out value()" attached="true" /> </extraparam> </COMPONENT> -<SUBCOMPONENT type="5000" id="2145" index="7" uid="b0f72ee8-81dc-4a55-b945-936ed82b727e" > +<SUBCOMPONENT type="5000" id="2145" index="7" uid="d32fb600-eac8-4ee5-aa40-e223c4804bf6" > <father id="2227" num="0" /> -<cdparam x="252" y="231" /> -<sizeparam width="157" height="119" minWidth="5" minHeight="2" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<cdparam x="424" y="232" /> +<sizeparam width="168" height="117" minWidth="5" minHeight="2" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> <hidden value="false" /> -<cdrectangleparam minX="0" maxX="225" minY="0" maxY="157" /> -<infoparam name="Block" value="Sensor1" /> +<cdrectangleparam minX="0" maxX="214" minY="0" maxY="159" /> +<infoparam name="Block" value="Sensor2" /> <TGConnectingPoint num="0" id="2105" /> <TGConnectingPoint num="1" id="2106" /> <TGConnectingPoint num="2" id="2107" /> @@ -4204,13 +4204,13 @@ Double-click to edit <CryptoBlock value="false" /> </extraparam> </SUBCOMPONENT> -<SUBCOMPONENT type="5000" id="2186" index="8" uid="d32fb600-eac8-4ee5-aa40-e223c4804bf6" > +<SUBCOMPONENT type="5000" id="2186" index="8" uid="b0f72ee8-81dc-4a55-b945-936ed82b727e" > <father id="2227" num="1" /> -<cdparam x="424" y="232" /> -<sizeparam width="168" height="117" minWidth="5" minHeight="2" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<cdparam x="252" y="231" /> +<sizeparam width="157" height="119" minWidth="5" minHeight="2" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> <hidden value="false" /> -<cdrectangleparam minX="0" maxX="214" minY="0" maxY="159" /> -<infoparam name="Block" value="Sensor2" /> +<cdrectangleparam minX="0" maxX="225" minY="0" maxY="157" /> +<infoparam name="Block" value="Sensor1" /> <TGConnectingPoint num="0" id="2146" /> <TGConnectingPoint num="1" id="2147" /> <TGConnectingPoint num="2" id="2148" /> diff --git a/src/main/java/graph/AUTGraph.java b/src/main/java/graph/AUTGraph.java index d33f5e7905d2b243041e5a05bf74b3b705a63a77..5b1bfedc359d6fd08d8e273b5ef435c548581972 100755 --- a/src/main/java/graph/AUTGraph.java +++ b/src/main/java/graph/AUTGraph.java @@ -510,12 +510,17 @@ public class AUTGraph implements myutil.Graph { } } + + public void display(boolean forceAutoLayout) { + display(false, forceAutoLayout); + } + public void display() { - display(false); + display(false, true); } - public void display(boolean exitOnClose) { - AUTGraphDisplay display = new AUTGraphDisplay(this, exitOnClose); + public void display(boolean exitOnClose, boolean forceAutoLayout) { + AUTGraphDisplay display = new AUTGraphDisplay(this, exitOnClose, forceAutoLayout); display.display(); } diff --git a/src/main/java/graph/AUTGraphDisplay.java b/src/main/java/graph/AUTGraphDisplay.java index 9c8374213120f8511b86594a9215d485731e4c59..f01d4c92efd7c73f1292e1e5fac37ca1485dd87e 100755 --- a/src/main/java/graph/AUTGraphDisplay.java +++ b/src/main/java/graph/AUTGraphDisplay.java @@ -42,30 +42,21 @@ package graph; import common.ConfigurationTTool; import common.SpecConfigTTool; import myutil.TraceManager; -import org.apache.batik.anim.timing.Trace; import org.graphstream.algorithm.Toolkit; import org.graphstream.graph.Edge; import org.graphstream.graph.Node; -import org.graphstream.graph.implementations.AbstractEdge; import org.graphstream.graph.implementations.MultiGraph; -import org.graphstream.graph.implementations.MultiNode; import org.graphstream.stream.ProxyPipe; -import org.graphstream.ui.geom.Point2; import org.graphstream.ui.geom.Point3; +import org.graphstream.ui.graphicGraph.GraphicGraph; import org.graphstream.ui.swing.SwingGraphRenderer; import org.graphstream.ui.swing_viewer.DefaultView; import org.graphstream.ui.swing_viewer.SwingViewer; -import org.graphstream.ui.graphicGraph.GraphicElement; import org.graphstream.ui.view.View; -import org.graphstream.ui.swing_viewer.ViewPanel; -import org.graphstream.ui.view.View; -import org.graphstream.algorithm.Toolkit.*; import org.graphstream.ui.view.Viewer; import org.graphstream.ui.view.ViewerListener; -import org.graphstream.ui.view.ViewerPipe; import org.graphstream.ui.view.camera.Camera; -import org.graphstream.ui.view.util.InteractiveElement; -import ui.MainGUI; +import org.graphstream.ui.view.util.ShortcutManager; import ui.file.PNGFilter; import ui.util.IconManager; @@ -77,7 +68,6 @@ import java.awt.geom.AffineTransform; import java.awt.image.BufferedImage; import java.io.File; import java.util.ArrayList; -import java.util.EnumSet; import java.util.HashSet; import java.util.logging.Logger; @@ -91,27 +81,12 @@ import java.util.logging.Logger; */ public class AUTGraphDisplay implements MouseListener, ViewerListener, Runnable { - protected AUTGraph graph; - protected SwingViewer viewer; - protected MultiGraph vGraph; - protected boolean loop; - protected Node firstNode; - protected ArrayList<Edge> edges; - protected boolean exitOnClose = false; - protected BasicFrame bf; - - protected String USED_STYLE_SHEET = ""; - - // see http://graphstream-project.org/doc/Advanced-Concepts/GraphStream-CSS-Reference/ - - protected static String STYLE_SHEET = "node {fill-color: #B1CAF1; text-color: black; size: 20px, 20px; text-size:14;} " + "edge {text-color: black; shape: cubic-curve; text-size:10;} " + "edge.defaultedge {text-size:10; text-color:black;} " + "edge.external {text-color:blue; text-size:14;} " + "node.deadlock {fill-color: orange; text-color: red; size: 20px, 20px; text-size:15;} " + "node.init { fill-color: green; text-color: black; size: 20px, 20px; text-size:15;}"; - protected static String STYLE_SHEET2 = "graph { canvas-color: white; fill-mode: gradient-vertical; fill-color: white, #004; padding: 20px; } " + "node { shape: circle; size-mode: dyn-size; size: 10px; fill-mode: gradient-radial; fill-color: #FFFC, #FFF0; stroke-mode: none; " + "shadow-mode: gradient-radial; shadow-color: #FFF5, #FFF0; shadow-width: 5px; shadow-offset: 0px, 0px; } " + @@ -120,11 +95,24 @@ public class AUTGraphDisplay implements MouseListener, ViewerListener, Runnable "edge.defaultedge { shape: curve-cubic; size: 1px; fill-color: #FFF3; fill-mode: plain; arrow-shape: none; } " + "edge.external { shape: L-square-line; size: 3px; fill-color: #AAA3; fill-mode: plain; arrow-shape: circle; } " + "sprite { shape: circle; fill-mode: gradient-radial; fill-color: #FFF8, #FFF0; }"; + protected AUTGraph graph; + protected SwingViewer viewer; + protected MultiGraph vGraph; + protected boolean loop; + protected Node firstNode; + protected ArrayList<Edge> edges; + protected boolean exitOnClose = false; + protected BasicFrame bf; + + // see http://graphstream-project.org/doc/Advanced-Concepts/GraphStream-CSS-Reference/ + protected boolean forceAutoLayout; + protected String USED_STYLE_SHEET = ""; - public AUTGraphDisplay(AUTGraph _graph, boolean _exitOnClose) { + public AUTGraphDisplay(AUTGraph _graph, boolean _exitOnClose, boolean _forceAutoLayout) { graph = _graph; exitOnClose = _exitOnClose; + forceAutoLayout = _forceAutoLayout; System.setProperty("org.graphstream.ui", "swing"); } @@ -215,7 +203,7 @@ public class AUTGraphDisplay implements MouseListener, ViewerListener, Runnable //viewer.setCloseFramePolicy(Viewer.CloseFramePolicy.CLOSE_VIEWER); - bf = new BasicFrame(this, viewer, vGraph, graph, edges, exitOnClose); + bf = new BasicFrame(this, viewer, vGraph, graph, edges, exitOnClose, forceAutoLayout); loop = true; @@ -335,55 +323,55 @@ public class AUTGraphDisplay implements MouseListener, ViewerListener, Runnable } -class BasicFrame extends JFrame implements ActionListener { - protected MultiGraph vGraph; - protected SwingViewer viewer; - protected JPanel viewerPanel; - protected AUTGraph graph; - protected ArrayList<Edge> edges; + class BasicFrame extends JFrame implements ActionListener { + public AffineTransform transform; + protected MultiGraph vGraph; + protected SwingViewer viewer; + protected JPanel viewerPanel; + protected AUTGraph graph; + protected ArrayList<Edge> edges; + protected JButton close; + protected JButton screenshot; + protected JButton fontPlus, fontMinus; + protected JButton resetView; + protected JCheckBox autoLayout; + protected JCheckBox internalActions; + protected JCheckBox readActions; + protected JCheckBox higherQuality, antialiasing; + protected JLabel help, info; + protected MouseEvent last; - protected JButton close; - protected JButton screenshot; - protected JButton fontPlus, fontMinus; - protected JButton resetView; - protected JCheckBox autoLayout; - protected JCheckBox internalActions; - protected JCheckBox readActions; - protected JCheckBox higherQuality, antialiasing; - protected JLabel help, info; + protected boolean exitOnClose; - public AffineTransform transform; + private AUTGraphDisplay autD; - protected MouseEvent last; + private DefaultView dv; + private Node selectedNode; - protected boolean exitOnClose; + private boolean forceAutoLayout; - private AUTGraphDisplay autD; - private DefaultView dv; - private Node selectedNode; + public BasicFrame(AUTGraphDisplay autD, SwingViewer viewer, MultiGraph vGraph, AUTGraph autgraph, ArrayList<Edge> _edges, + boolean _exitOnClose, boolean _forceAutoLayout) { + this.autD = autD; + this.viewer = viewer; + this.vGraph = vGraph; + this.graph = autgraph; + forceAutoLayout = _forceAutoLayout; - public BasicFrame(AUTGraphDisplay autD, SwingViewer viewer, MultiGraph vGraph, AUTGraph autgraph, ArrayList<Edge> _edges, - boolean _exitOnClose) { - this.autD = autD; - this.viewer = viewer; - this.vGraph = vGraph; - this.graph = autgraph; + edges = _edges; + exitOnClose = _exitOnClose; + makeComponents(); + if (exitOnClose) { + setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); + } - edges = _edges; - exitOnClose = _exitOnClose; - makeComponents(); - - if (exitOnClose) { - setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); } - } - - public void processDrag(MouseEvent event) { + public void processDrag(MouseEvent event) { /*if (last != null) { Camera camera = dv.getCamera(); Point3 p1 = camera.getViewCenter(); @@ -397,448 +385,508 @@ class BasicFrame extends JFrame implements ActionListener { camera.setViewCenter(p3.x,p3.y, 0); } last=event;*/ - } + } - public void resetDrag() { - //this.last=null; - } + public void resetDrag() { + //this.last=null; + } - public void makeComponents() { + public void makeComponents() { + dv = new DefaultView(viewer, "Graph", new SwingGraphRenderer()); - dv = new DefaultView(viewer, "Graph", new SwingGraphRenderer()); + MouseListener[] listeners = dv.getMouseListeners(); + for (MouseListener l : listeners) { + dv.removeMouseListener(l); + } - MouseListener[] listeners = dv.getMouseListeners(); - for(MouseListener l: listeners) { - dv.removeMouseListener(l); - } + MouseMotionListener[] mL = dv.getMouseMotionListeners(); + for (MouseMotionListener l : mL) { + dv.removeMouseMotionListener(l); + } - MouseMotionListener[] mL = dv.getMouseMotionListeners(); - for(MouseMotionListener l: mL) { - //dv.removeMouseMotionListener(l); - } + KeyListener[] keyListeners = dv.getKeyListeners(); + for (KeyListener k : keyListeners) { + dv.removeKeyListener(k); + } + dv.setShortcutManager(new ShortcutManager() { - dv.addKeyListener(new KeyListener() { - @Override - public void keyTyped(KeyEvent e) { + private View view; - } + @Override + public void init(GraphicGraph graph, View view) { + this.view = view; + ((Component)view).addKeyListener(this); + } - @Override - public void keyPressed(KeyEvent e) { + @Override + public void release() { + view.removeKeyListener(this); + } - } + @Override + public void keyPressed(KeyEvent e) { + System.out.println("keyPressed!"); + } - @Override - public void keyReleased(KeyEvent e) { + @Override + public void keyReleased(KeyEvent e) { + System.out.println("keyReleased!"); + } - TraceManager.addDev("Key event:" + e.getKeyCode()); - updateMe(); - } - }); - - dv.addMouseMotionListener(new MouseMotionListener() { - - @Override - public void mouseDragged(MouseEvent e) { - //TraceManager.addDev("Dragged!"); - if (selectedNode != null) { - double diffX = 1; - double diffY = 1; - if (transform != null) { - diffX = transform.getScaleX(); - diffY = transform.getScaleY(); + @Override + public void keyTyped(KeyEvent e) { + System.out.println("keyTyped!"); + } + }); + + /*((Component) dv).addKeyListener(new KeyListener() { + @Override + public void keyTyped(KeyEvent e) { + TraceManager.addDev("Key pressed event:" + e.getKeyCode()); + updateMe(); + } + + @Override + public void keyPressed(KeyEvent e) { + TraceManager.addDev("Key pressed event:" + e.getKeyCode()); + updateMe(); + } + + @Override + public void keyReleased(KeyEvent e) { + + TraceManager.addDev("Key event:" + e.getKeyCode()); + updateMe(); + } + });*/ + + + dv.addMouseMotionListener(new MouseMotionListener() { + + @Override + public void mouseDragged(MouseEvent e) { + //TraceManager.addDev("Dragged!"); + if (selectedNode != null) { + double diffX = 1; + double diffY = 1; + if (transform != null) { + diffX = transform.getScaleX(); + diffY = transform.getScaleY(); + } + Point3 p = dv.getCamera().transformPxToGu(e.getX() * diffX, e.getY() * diffY); + selectedNode.setAttribute("x", p.x); + selectedNode.setAttribute("y", p.y); } - Point3 p = dv.getCamera().transformPxToGu(e.getX()*diffX, e.getY()*diffY); - selectedNode.setAttribute("x", p.x); - selectedNode.setAttribute("y", p.y); + processDrag(e); } - processDrag(e); - } - @Override - public void mouseMoved(MouseEvent e) { + @Override + public void mouseMoved(MouseEvent e) { - } - }); + } + }); - dv.addMouseListener(new MouseListener() { - @Override - public void mouseClicked(MouseEvent e) { - //TraceManager.addDev("Mouse clicked!"); - } + dv.addMouseListener(new MouseListener() { + @Override + public void mouseClicked(MouseEvent e) { + //TraceManager.addDev("Mouse clicked!"); + } - @Override - public void mousePressed(MouseEvent e) { + @Override + public void mousePressed(MouseEvent e) { - Graphics2D g = (Graphics2D) dv.getGraphics (); - transform = g.getFontRenderContext ().getTransform (); - TraceManager.addDev("Affine transform = " + transform); + Graphics2D g = (Graphics2D) dv.getGraphics(); + transform = g.getFontRenderContext().getTransform(); + //TraceManager.addDev("Affine transform = " + transform); - //setAutoLayout(false); - //viewer.disableAutoLayout(); - TraceManager.addDev("Mouse pressed!"); + //setAutoLayout(false); + //viewer.disableAutoLayout(); + //TraceManager.addDev("Mouse pressed!"); - Node node = findNodeAt(e.getX(), e.getY()); - if (node != null) { - TraceManager.addDev("Mouse pressed at node: " + node.getId()); - selectedNode = node; - } else { - TraceManager.addDev("Mouse pressed not on a node"); - } + Node node = findNodeAt(e.getX(), e.getY()); + if (node != null) { + //TraceManager.addDev("Mouse pressed at node: " + node.getId()); + selectedNode = node; + } else { + //TraceManager.addDev("Mouse pressed not on a node"); + } - resetDrag(); + resetDrag(); - } + } - @Override - public void mouseReleased(MouseEvent e) { - TraceManager.addDev("Mouse released!"); - selectedNode = null; - //viewer.enableAutoLayout(); - } + @Override + public void mouseReleased(MouseEvent e) { + //TraceManager.addDev("Mouse released!"); + selectedNode = null; + //viewer.enableAutoLayout(); + } - @Override - public void mouseEntered(MouseEvent e) { + @Override + public void mouseEntered(MouseEvent e) { - } + } - @Override - public void mouseExited(MouseEvent e) { + @Override + public void mouseExited(MouseEvent e) { + } + }); + + + ((Component) dv).addMouseWheelListener(new MouseWheelListener() { + @Override + public void mouseWheelMoved(MouseWheelEvent e) { + e.consume(); + int i = e.getWheelRotation(); + TraceManager.addDev("Wheel rotation:" + i); + double factor = Math.pow(1.01, i); + Camera cam = dv.getCamera(); + double zoom = cam.getViewPercent() * factor; + /*Point2 pxCenter = cam.transformGuToPx(cam.getViewCenter().x, cam.getViewCenter().y, 0); + double diffX = 1; + double diffY = 1; + if (transform != null) { + diffX = transform.getScaleX(); + diffY = transform.getScaleY(); + } + Point3 guClicked = cam.transformPxToGu(e.getX()*diffX, e.getY()*diffY); + + double newRatioPx2Gu = cam.getMetrics().ratioPx2Gu/factor; + double x = guClicked.x + (pxCenter.x - e.getX())/newRatioPx2Gu; + double y = guClicked.y - (pxCenter.y - e.getY())/newRatioPx2Gu; + cam.setViewCenter(x, y, 0);*/ + cam.setViewPercent(zoom); + } + }); + + + //Graphics g = dv.getGraphics(); + //TraceManager.addDev("Transform:" + ((Graphics2D)g).getTransform()); + //TraceManager.addDev("scale:" + System.getProperty("sun.java2d.uiScale")); + + + add(dv, BorderLayout.CENTER); + + //add(viewer, BorderLayout.CENTER ); + close = new JButton("Close", IconManager.imgic27); + close.addActionListener(this); + screenshot = new JButton("Save in png", IconManager.imgic28); + screenshot.addActionListener(this); + fontPlus = new JButton(IconManager.imgic144); + fontPlus.addActionListener(this); + fontMinus = new JButton(IconManager.imgic146); + fontMinus.addActionListener(this); + resetView = new JButton("Reset view"); + resetView.addActionListener(this); + autoLayout = new JCheckBox("Auto layout", true); + autoLayout.addActionListener(this); + close.addActionListener(this); + help = new JLabel("Zoom with mouse wheel or PageUp/PageDown, move with cursor keys"); + help = new JLabel("click on a node and drag it to move it"); + info = new JLabel("Graph: " + graph.getNbOfStates() + " states, " + graph.getNbOfTransitions() + " transitions"); + internalActions = new JCheckBox("Display internal actions", true); + internalActions.addActionListener(this); + readActions = new JCheckBox("Display read/write actions", true); + readActions.addActionListener(this); + higherQuality = new JCheckBox("Higher drawing quality", false); + higherQuality.addActionListener(this); + antialiasing = new JCheckBox("Anti aliasing", false); + antialiasing.addActionListener(this); + + + JPanel jp01 = new JPanel(); + GridBagLayout gridbag01 = new GridBagLayout(); + GridBagConstraints c01 = new GridBagConstraints(); + jp01.setLayout(gridbag01); + jp01.setBorder(new javax.swing.border.TitledBorder("Options")); + //c01.gridwidth = 1; + c01.gridheight = 1; + c01.weighty = 1.0; + c01.weightx = 1.0; + c01.fill = GridBagConstraints.HORIZONTAL; + c01.gridwidth = GridBagConstraints.REMAINDER; //end row + jp01.add(screenshot); + jp01.add(internalActions); + jp01.add(readActions); + jp01.add(higherQuality); + jp01.add(antialiasing); + if (!forceAutoLayout) { + jp01.add(autoLayout); } - }); - - - //Graphics g = dv.getGraphics(); - //TraceManager.addDev("Transform:" + ((Graphics2D)g).getTransform()); - //TraceManager.addDev("scale:" + System.getProperty("sun.java2d.uiScale")); - - - - add(dv, BorderLayout.CENTER); - - //add(viewer, BorderLayout.CENTER ); - close = new JButton("Close", IconManager.imgic27); - close.addActionListener(this); - screenshot = new JButton("Save in png", IconManager.imgic28); - screenshot.addActionListener(this); - fontPlus = new JButton(IconManager.imgic144); - fontPlus.addActionListener(this); - fontMinus = new JButton(IconManager.imgic146); - fontMinus.addActionListener(this); - resetView = new JButton("Reset view"); - resetView.addActionListener(this); - autoLayout = new JCheckBox("Auto layout", true); - autoLayout.addActionListener(this); - close.addActionListener(this); - help = new JLabel("Zoom with mouse wheel or PageUp/PageDown, move with cursor keys"); - help = new JLabel("click on a node and drag it to move it"); - info = new JLabel("Graph: " + graph.getNbOfStates() + " states, " + graph.getNbOfTransitions() + " transitions"); - internalActions = new JCheckBox("Display internal actions", true); - internalActions.addActionListener(this); - readActions = new JCheckBox("Display read/write actions", true); - readActions.addActionListener(this); - higherQuality = new JCheckBox("Higher drawing quality", false); - higherQuality.addActionListener(this); - antialiasing = new JCheckBox("Anti aliasing", false); - antialiasing.addActionListener(this); - - - JPanel jp01 = new JPanel(); - GridBagLayout gridbag01 = new GridBagLayout(); - GridBagConstraints c01 = new GridBagConstraints(); - jp01.setLayout(gridbag01); - jp01.setBorder(new javax.swing.border.TitledBorder("Options")); - //c01.gridwidth = 1; - c01.gridheight = 1; - c01.weighty = 1.0; - c01.weightx = 1.0; - c01.fill = GridBagConstraints.HORIZONTAL; - c01.gridwidth = GridBagConstraints.REMAINDER; //end row - jp01.add(screenshot); - jp01.add(internalActions); - jp01.add(readActions); - jp01.add(higherQuality); - jp01.add(antialiasing); - if (MainGUI.experimentalOn) { - jp01.add(autoLayout); + jp01.add(fontMinus); + jp01.add(fontPlus); + jp01.add(resetView); + + JPanel infoPanel = new JPanel(new BorderLayout()); + JPanel labelPanel = new JPanel(new BorderLayout()); + labelPanel.add(help, BorderLayout.EAST); + labelPanel.add(info, BorderLayout.WEST); + infoPanel.add(labelPanel, BorderLayout.NORTH); + infoPanel.add(close, BorderLayout.SOUTH); + infoPanel.add(jp01, BorderLayout.CENTER); + + + add(infoPanel, BorderLayout.SOUTH); + //setDefaultCloseOperation(EXIT_ON_CLOSE); + setSize(1000, 700); + setVisible(true); } - jp01.add(fontMinus); - jp01.add(fontPlus); - jp01.add(resetView); - - JPanel infoPanel = new JPanel(new BorderLayout()); - JPanel labelPanel = new JPanel(new BorderLayout()); - labelPanel.add(help, BorderLayout.EAST); - labelPanel.add(info, BorderLayout.WEST); - infoPanel.add(labelPanel, BorderLayout.NORTH); - infoPanel.add(close, BorderLayout.SOUTH); - infoPanel.add(jp01, BorderLayout.CENTER); - - - add(infoPanel, BorderLayout.SOUTH); - //setDefaultCloseOperation(EXIT_ON_CLOSE); - setSize(1000, 700); - setVisible(true); - } - public void actionPerformed(ActionEvent evt) { - if (evt.getSource() == close) { - closeFrame(); - } else if (evt.getSource() == screenshot) { - screenshot(); - } else if (evt.getSource() == internalActions) { - manageInternalActions(); - } else if (evt.getSource() == readActions) { - manageReadActions(); - } else if (evt.getSource() == higherQuality) { - manageHigherQuality(); - } else if (evt.getSource() == antialiasing) { - manageAntialiasing(); - } else if (evt.getSource() == fontPlus) { - fontPlus(); - } else if (evt.getSource() == fontMinus) { - fontMinus(); - } else if (evt.getSource() == resetView) { - dv.getCamera().resetView(); - updateMe(); - } else if (evt.getSource() == autoLayout) { - if (autoLayout.isSelected()) { - viewer.enableAutoLayout(); - } else { - viewer.disableAutoLayout(); + public void actionPerformed(ActionEvent evt) { + if (evt.getSource() == close) { + closeFrame(); + } else if (evt.getSource() == screenshot) { + screenshot(); + } else if (evt.getSource() == internalActions) { + manageInternalActions(); + } else if (evt.getSource() == readActions) { + manageReadActions(); + } else if (evt.getSource() == higherQuality) { + manageHigherQuality(); + } else if (evt.getSource() == antialiasing) { + manageAntialiasing(); + } else if (evt.getSource() == fontPlus) { + fontPlus(); + } else if (evt.getSource() == fontMinus) { + fontMinus(); + } else if (evt.getSource() == resetView) { + dv.getCamera().resetView(); + updateMe(); + } else if (evt.getSource() == autoLayout) { + if (autoLayout.isSelected()) { + viewer.enableAutoLayout(); + } else { + viewer.disableAutoLayout(); + } } } - } - public void closeFrame() { - if (autD != null) { - autD.viewClosed("closed pushed"); - } - if (exitOnClose) { - System.exit(1); + public void closeFrame() { + if (autD != null) { + autD.viewClosed("closed pushed"); + } + if (exitOnClose) { + System.exit(1); + } + dispose(); } - dispose(); - } - - public void takeScreenshot(Component component, File file) { - BufferedImage image = new BufferedImage( - component.getWidth(), - component.getHeight(), - BufferedImage.TYPE_INT_RGB - ); - // call the Component's paint method, using - // the Graphics object of the image. - component.paint(image.getGraphics()); // alternately use .printAll(..) - try { - // save captured image to PNG file - ImageIO.write(image, "png", file); - } catch (Exception e) { - } + public void takeScreenshot(Component component, File file) { + BufferedImage image = new BufferedImage( + component.getWidth(), + component.getHeight(), + BufferedImage.TYPE_INT_RGB + ); + // call the Component's paint method, using + // the Graphics object of the image. + component.paint(image.getGraphics()); // alternately use .printAll(..) - } + try { + // save captured image to PNG file + ImageIO.write(image, "png", file); + } catch (Exception e) { + } - public void fontPlus() { - setTextSize(1); + } - } + public void fontPlus() { + setTextSize(1); - public void fontMinus() { - setTextSize(-1); - } + } - private void setTextSize(int modifier) { - String style = USED_STYLE_SHEET; - if ((style == null) || (style.length() == 0)) { - return; + public void fontMinus() { + setTextSize(-1); } - // default.edge - //TraceManager.addDev("Old style: " + style); - style = modifyTextSize(modifier, style, "node "); - style = modifyTextSize(modifier, style, "node.deadlock"); - style = modifyTextSize(modifier, style, "node.init"); - style = modifyTextSize(modifier, style, "edge "); - style = modifyTextSize(modifier, style, "edge.defaultedge"); - //TraceManager.addDev("New style default: " + style); - // external - style = modifyTextSize(modifier, style, "edge.external"); - //TraceManager.addDev("New style external: " + style); - vGraph.setAttribute("ui.stylesheet", style); - USED_STYLE_SHEET = style; + private void setTextSize(int modifier) { + String style = USED_STYLE_SHEET; + if ((style == null) || (style.length() == 0)) { + return; + } + // default.edge + //TraceManager.addDev("Old style: " + style); + style = modifyTextSize(modifier, style, "node "); + style = modifyTextSize(modifier, style, "node.deadlock"); + style = modifyTextSize(modifier, style, "node.init"); + style = modifyTextSize(modifier, style, "edge "); + style = modifyTextSize(modifier, style, "edge.defaultedge"); + //TraceManager.addDev("New style default: " + style); + // external + style = modifyTextSize(modifier, style, "edge.external"); + //TraceManager.addDev("New style external: " + style); + vGraph.setAttribute("ui.stylesheet", style); + USED_STYLE_SHEET = style; - } - public String modifyTextSize(int modifier, String input, String key) { - String ret = input; - int indexD = input.indexOf(key); - if (indexD != -1) { - String before = input.substring(0, indexD); - - String tmp = input.substring(indexD); - int indexBB = tmp.indexOf("{"); - int indexBE = tmp.indexOf("}"); - int indexT = tmp.indexOf("text-size:"); - if ((indexT > -1) && (indexBB >-1) && (indexBE > -1) && (indexT>indexBB) && (indexT < indexBE)) { - String bef = tmp.substring(0, indexT+10); - String textSize = tmp.substring(indexT+10); - int indexVirg = textSize.indexOf(";"); - if (indexVirg > -1) { - String textValue = textSize.substring(0, indexVirg); - String endf = textSize.substring(indexVirg); - int val = Integer.decode(textValue); - val += modifier; - if (val < 1) { - val = 1; + } + + public String modifyTextSize(int modifier, String input, String key) { + String ret = input; + int indexD = input.indexOf(key); + if (indexD != -1) { + String before = input.substring(0, indexD); + + String tmp = input.substring(indexD); + int indexBB = tmp.indexOf("{"); + int indexBE = tmp.indexOf("}"); + int indexT = tmp.indexOf("text-size:"); + if ((indexT > -1) && (indexBB > -1) && (indexBE > -1) && (indexT > indexBB) && (indexT < indexBE)) { + String bef = tmp.substring(0, indexT + 10); + String textSize = tmp.substring(indexT + 10); + int indexVirg = textSize.indexOf(";"); + if (indexVirg > -1) { + String textValue = textSize.substring(0, indexVirg); + String endf = textSize.substring(indexVirg); + int val = Integer.decode(textValue); + val += modifier; + if (val < 1) { + val = 1; + } + //TraceManager.addDev("Value=" + val); + // Rebuild the string + ret = before + bef + val + endf; } - //TraceManager.addDev("Value=" + val); - // Rebuild the string - ret = before + bef + val + endf; } - } + } + return ret; } - return ret; - } - public void screenshot() { - TraceManager.addDev("Screenshot"); - JFileChooser jfcggraph; - if (SpecConfigTTool.GGraphPath.length() > 0) { - jfcggraph = new JFileChooser(SpecConfigTTool.GGraphPath); - } else { - jfcggraph = new JFileChooser(); - } - PNGFilter filter = new PNGFilter(); - jfcggraph.setFileFilter(filter); - int returnVal = jfcggraph.showDialog(this, "Graph capture (in png)"); - if (returnVal != JFileChooser.APPROVE_OPTION) { - return; - } - File pngFile = jfcggraph.getSelectedFile(); - TraceManager.addDev("Making the screenshot in " + pngFile.getAbsolutePath()); + public void screenshot() { + TraceManager.addDev("Screenshot"); + JFileChooser jfcggraph; + if (SpecConfigTTool.GGraphPath.length() > 0) { + jfcggraph = new JFileChooser(SpecConfigTTool.GGraphPath); + } else { + jfcggraph = new JFileChooser(); + } + PNGFilter filter = new PNGFilter(); + jfcggraph.setFileFilter(filter); + int returnVal = jfcggraph.showDialog(this, "Graph capture (in png)"); + if (returnVal != JFileChooser.APPROVE_OPTION) { + return; + } + File pngFile = jfcggraph.getSelectedFile(); + TraceManager.addDev("Making the screenshot in " + pngFile.getAbsolutePath()); - takeScreenshot(dv, pngFile); + takeScreenshot(dv, pngFile); - TraceManager.addDev("Screenshot performed"); - } + TraceManager.addDev("Screenshot performed"); + } - public synchronized void manageInternalActions() { - if (edges == null) { - return; - } - int cpt = 0; - for (AUTTransition transition : graph.getTransitions()) { - if (transition.transition.startsWith("i(")) { - if (internalActions.isSelected()) { - edges.get(cpt).setAttribute("ui.label", transition.transition); - } else { - edges.get(cpt).setAttribute("ui.label", ""); + public synchronized void manageInternalActions() { + if (edges == null) { + return; + } + int cpt = 0; + for (AUTTransition transition : graph.getTransitions()) { + if (transition.transition.startsWith("i(")) { + if (internalActions.isSelected()) { + edges.get(cpt).setAttribute("ui.label", transition.transition); + } else { + edges.get(cpt).setAttribute("ui.label", ""); + } } + cpt++; } - cpt++; + //dv.repaint(); } - //dv.repaint(); - } - public synchronized void manageReadActions() { - if (edges == null) { - return; - } - int cpt = 0; - for (AUTTransition transition : graph.getTransitions()) { - if (transition.transition.contains("?")) { - if (readActions.isSelected()) { - edges.get(cpt).setAttribute("ui.label", transition.transition); - } else { - edges.get(cpt).setAttribute("ui.label", ""); + public synchronized void manageReadActions() { + if (edges == null) { + return; + } + int cpt = 0; + for (AUTTransition transition : graph.getTransitions()) { + if (transition.transition.contains("?")) { + if (readActions.isSelected()) { + edges.get(cpt).setAttribute("ui.label", transition.transition); + } else { + edges.get(cpt).setAttribute("ui.label", ""); + } } + cpt++; } - cpt++; - } - //dv.repaint(); - } - - public synchronized void manageHigherQuality() { - //viewer.disableAutoLayout(); - if (higherQuality.isSelected()) { - vGraph.setAttribute("ui.quality"); - } else { - vGraph.removeAttribute("ui.quality"); - } - try { - //viewer.enableAutoLayout(); //dv.repaint(); - } catch (Exception e) { } - } + public synchronized void manageHigherQuality() { + //viewer.disableAutoLayout(); + if (higherQuality.isSelected()) { + vGraph.setAttribute("ui.quality"); + } else { + vGraph.removeAttribute("ui.quality"); + } + try { + //viewer.enableAutoLayout(); + //dv.repaint(); + } catch (Exception e) { + } + } - public synchronized void manageAntialiasing() { - //viewer.disableAutoLayout(); - if (antialiasing.isSelected()) { - vGraph.setAttribute("ui.antialias"); - } else { - vGraph.removeAttribute("ui.antialias"); - } - try { - //viewer.enableAutoLayout(); - //dv.repaint(); - } catch (Exception e) { + public synchronized void manageAntialiasing() { + //viewer.disableAutoLayout(); + if (antialiasing.isSelected()) { + vGraph.setAttribute("ui.antialias"); + } else { + vGraph.removeAttribute("ui.antialias"); + } + try { + //viewer.enableAutoLayout(); + //dv.repaint(); + } catch (Exception e) { + } } - } - public synchronized void updateMe() { - //TraceManager.addDev("updateMe"); - dv.repaint(); - } + public synchronized void updateMe() { + //TraceManager.addDev("updateMe"); + dv.repaint(); + } - public Node findNodeAt(int x, int y) { - for( int i=0; i<vGraph.getNodeCount(); i++) { - TraceManager.addDev("index:" + i); - Node node = vGraph.getNode(i); - if (node != null) { - double pos[] = Toolkit.nodePosition(node); - if (pos != null) { - //TraceManager.addDev("pos of Node " + node.getId() + " is " + pos[0] + "," + pos[1]); - Point3 position = dv.getCamera().transformGuToPx(pos[0], pos[1], 0); - TraceManager.addDev("Coordinate = " + position + " vs mouse : " + x + "," + y); - double diffX = 1; - double diffY = 1; - if (transform != null) { - diffX = transform.getScaleX(); - diffY = transform.getScaleY(); - } - if ((Math.abs(position.x - diffX*x) < 10) && (Math.abs(position.y - diffY*y) < 10)) { - return node; + public Node findNodeAt(int x, int y) { + for (int i = 0; i < vGraph.getNodeCount(); i++) { + //TraceManager.addDev("index:" + i); + Node node = vGraph.getNode(i); + if (node != null) { + double pos[] = Toolkit.nodePosition(node); + if (pos != null) { + //TraceManager.addDev("pos of Node " + node.getId() + " is " + pos[0] + "," + pos[1]); + Point3 position = dv.getCamera().transformGuToPx(pos[0], pos[1], 0); + //TraceManager.addDev("Coordinate = " + position + " vs mouse : " + x + "," + y); + double diffX = 1; + double diffY = 1; + if (transform != null) { + diffX = transform.getScaleX(); + diffY = transform.getScaleY(); + } + if ((Math.abs(position.x - diffX * x) < 10) && (Math.abs(position.y - diffY * y) < 10)) { + return node; + } + } else { + TraceManager.addDev("Null pos"); } - } else { - TraceManager.addDev("Null pos"); } } - } - return null; - } + return null; + } /*public void setAutoLayout(boolean auto) { autoLayout.setSelected(auto); }*/ - - -} // Basic Frame + } // Basic Frame } // Main class diff --git a/src/main/java/ui/tree/JDiagramTree.java b/src/main/java/ui/tree/JDiagramTree.java index a883fb59c6ef48cdd6d5da3a0135a6c56e552c62..9a61df4165c6b899ea55c2fb6e65ac083b442eec 100755 --- a/src/main/java/ui/tree/JDiagramTree.java +++ b/src/main/java/ui/tree/JDiagramTree.java @@ -519,7 +519,7 @@ public class JDiagramTree extends javax.swing.JTree implements ActionListener, M } else if (ae.getSource() == jmiShow) { if (selectedRG.graph != null) { - selectedRG.graph.display(); + selectedRG.graph.display(!MainGUI.experimentalOn); } else { mgui.displayAUTFromRG(selectedRG.name, selectedRG); } diff --git a/src/main/java/ui/window/JDialogAvatarModelChecker.java b/src/main/java/ui/window/JDialogAvatarModelChecker.java index 26ef37d52c4153fc44bcd6d978765815e6fdb897..d1d0b289843c9da2ab45acb4d5bef5561bb98106 100644 --- a/src/main/java/ui/window/JDialogAvatarModelChecker.java +++ b/src/main/java/ui/window/JDialogAvatarModelChecker.java @@ -770,7 +770,7 @@ public class JDialogAvatarModelChecker extends javax.swing.JFrame implements Act if (graphAUT != null) { AUTGraph rg = new AUTGraph(); rg.buildGraph(graphAUT); - rg.display(); + rg.display(!MainGUI.experimentalOn); } } diff --git a/src/main/java/ui/window/JFrameStatistics.java b/src/main/java/ui/window/JFrameStatistics.java index 9d6724be8f51b1f03e6d655563f0ba2d578f0312..95e7027ae029a673a98436129836480185207da9 100644 --- a/src/main/java/ui/window/JFrameStatistics.java +++ b/src/main/java/ui/window/JFrameStatistics.java @@ -45,6 +45,7 @@ import automata.Transition; import common.SpecConfigTTool; import graph.AUTGraph; import myutil.*; +import ui.MainGUI; import ui.StoppableGUIElement; import ui.ThreadGUIElement; import ui.file.AUTFileFilter; @@ -569,12 +570,12 @@ public class JFrameStatistics extends JFrame implements ActionListener, Stoppabl } else if (evt.getSource() == savePathL) { saveAutomata(lastLongestAutomata); } else if (evt.getSource() == showGraph) { - graph.display(); + graph.display(!MainGUI.experimentalOn); } } public void displayGraph() { - graph.display(); + graph.display(!MainGUI.experimentalOn); } private void saveAutomata(Automata aut) {