]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.graphviz/src/org/simantics/graphviz/drawable/JViewer.java
(refs #7272) Support updating named Graphviz windows
[simantics/platform.git] / bundles / org.simantics.graphviz / src / org / simantics / graphviz / drawable / JViewer.java
index 6f972d746d4e22620e8c7328acdb8bd54c8b14ab..2543a7a667429d10626e7a92fe8e507fad4ef493 100644 (file)
@@ -33,6 +33,7 @@ import java.awt.geom.AffineTransform;
 import java.awt.geom.Rectangle2D;
 import java.io.File;
 import java.io.IOException;
+import java.util.HashMap;
 
 import javax.swing.AbstractAction;
 import javax.swing.JFileChooser;
@@ -41,6 +42,7 @@ import javax.swing.JMenu;
 import javax.swing.JMenuBar;
 import javax.swing.JMenuItem;
 import javax.swing.JOptionPane;
+import javax.swing.SwingUtilities;
 import javax.swing.filechooser.FileFilter;
 import javax.swing.filechooser.FileView;
 
@@ -51,12 +53,16 @@ import org.simantics.graphviz.Graphs;
  * A stand alone frame that shows and makes it
  * possible to navigate a given Drawable.
  * 
- * @author Hannu Niemistö
+ * @author Hannu Niemist
  */
 public class JViewer extends JFrame {
+    private static final HashMap<String, JViewer> VIEWER_MAP = new HashMap<String, JViewer>(); 
+    
        private static final long serialVersionUID = 3022682167091092801L;
        Drawable drawable;
        ViewerCanvas canvas = new ViewerCanvas();
+
+    private String windowName;
        
        class ViewerCanvas extends Canvas {
                private static final long serialVersionUID = -5330090168115281754L;
@@ -205,6 +211,12 @@ public class JViewer extends JFrame {
            setVisible(true);
        }
        
+       public void updateDrawable(Drawable drawable) {
+           this.drawable = drawable;
+           canvas.fit();
+           canvas.repaint();
+       }
+       
        public class ExitAction extends AbstractAction {
 
                private static final long serialVersionUID = 5680421985865931443L;
@@ -324,5 +336,26 @@ public class JViewer extends JFrame {
                        return null;
                }
        }
-       
+
+    public static void getOrCreateViewer(String windowName, GraphDrawable graphDrawable) {
+        JViewer viewer = VIEWER_MAP.get(windowName);
+        if(viewer == null) {
+            viewer = new JViewer(graphDrawable);
+            viewer.setTitle(windowName);
+            viewer.windowName = windowName;
+            VIEWER_MAP.put(windowName, viewer);
+            viewer.toFront();
+        }
+        else {
+            viewer.updateDrawable(graphDrawable);
+            viewer.toFront();
+        }
+    }
+    
+    @Override
+    public void dispose() {
+        if(windowName != null)
+            VIEWER_MAP.remove(windowName);
+        super.dispose();
+    }
 }