JAL-3383 removing colour caching (to a separate branch)
[jalview.git] / src / jalview / gui / AlignFrame.java
index 01aa9b0..0b84e9b 100644 (file)
@@ -131,6 +131,7 @@ import java.awt.event.MouseEvent;
 import java.awt.print.PageFormat;
 import java.awt.print.PrinterJob;
 import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
 import java.io.File;
 import java.io.FileWriter;
 import java.io.PrintWriter;
@@ -413,10 +414,24 @@ public class AlignFrame extends GAlignFrame
     if (Desktop.getDesktopPane() != null)
     {
       this.setDropTarget(new java.awt.dnd.DropTarget(this, this));
-      if (!Platform.isJS())
+      PropertyChangeListener serviceListener = (Platform.isJS() ? null
+              : addServiceListeners());
+      addInternalFrameListener(new javax.swing.event.InternalFrameAdapter()
       {
-        addServiceListeners();
-      }
+        @Override
+        public void internalFrameClosed(
+                javax.swing.event.InternalFrameEvent evt)
+        {
+          // System.out.println("deregistering discoverer listener");
+          if (serviceListener != null)
+          {
+            Desktop.getInstance().removeJalviewPropertyChangeListener(
+                    "services", serviceListener);
+          }
+          closeMenuItem_actionPerformed(true);
+        }
+      });
+
       setGUINucleotide();
     }
 
@@ -833,43 +848,30 @@ public class AlignFrame extends GAlignFrame
   }
 
   /* Set up intrinsic listeners for dynamically generated GUI bits. */
-  private void addServiceListeners()
+  private PropertyChangeListener addServiceListeners()
   {
-    final java.beans.PropertyChangeListener thisListener;
-    Desktop.getInstance().addJalviewPropertyChangeListener("services",
-            thisListener = new java.beans.PropertyChangeListener()
-            {
-              @Override
-              public void propertyChange(PropertyChangeEvent evt)
-              {
-                {
-                  SwingUtilities.invokeLater(new Runnable()
-                  {
-
-                    @Override
-                    public void run()
-                    {
-                      System.err.println(
-                              "Rebuild WS Menu for service change");
-                      BuildWebServiceMenu();
-                    }
-
-                  });
-                }
-              }
-            });
-    addInternalFrameListener(new javax.swing.event.InternalFrameAdapter()
+    PropertyChangeListener serviceListener = new PropertyChangeListener()
     {
       @Override
-      public void internalFrameClosed(
-              javax.swing.event.InternalFrameEvent evt)
+      public void propertyChange(PropertyChangeEvent evt)
       {
-        // System.out.println("deregistering discoverer listener");
-        Desktop.getInstance().removeJalviewPropertyChangeListener("services",
-                thisListener);
-        closeMenuItem_actionPerformed(true);
+        {
+          SwingUtilities.invokeLater(new Runnable()
+          {
+
+            @Override
+            public void run()
+            {
+              System.err.println("Rebuild WS Menu for service change");
+              BuildWebServiceMenu();
+            }
+          });
+        }
       }
-    });
+    };
+
+    Desktop.getInstance().addJalviewPropertyChangeListener("services",
+            serviceListener);
     // Finally, build the menu once to get current service state
     new Thread(new Runnable()
     {
@@ -879,6 +881,7 @@ public class AlignFrame extends GAlignFrame
         BuildWebServiceMenu();
       }
     }).start();
+    return serviceListener;
   }
 
   /**
@@ -3385,12 +3388,38 @@ public class AlignFrame extends GAlignFrame
     }
 
     JInternalFrame frame = new JInternalFrame();
-    final OverviewPanel overview = new OverviewPanel(alignPanel);
+
+    // BH 2019.07.26 we allow for an embedded
+    // undecorated overview with defined size
+    frame.setName(Jalview.getAppID("overview"));
+    //
+    Dimension dim = (Dimension) Platform.getEmbeddedAttribute(frame,
+            Platform.EMBEDDED_DIM);
+    if (dim != null && dim.width == 0)
+    {
+      dim = null; // hidden, not embedded
+    }
+
+    OverviewPanel overview = new OverviewPanel(alignPanel, dim);
+
     frame.setContentPane(overview);
+    if (dim == null)
+    {
+      dim = new Dimension();
+      // was frame.getSize(), but that is 0,0 at this point;
+    }
+    else
+    {
+      // we are imbedding, and so we have an undecorated frame
+      // and we can set the the frame dimensions accordingly.
+    }
+    // allowing for unresizable option using, style="resize:none"
+    boolean resizable = (Platform.getEmbeddedAttribute(frame,
+            "resize") != "none");
     Desktop.addInternalFrame(frame, MessageManager
             .formatMessage("label.overview_params", new Object[]
-            { this.getTitle() }), true, frame.getWidth(), frame.getHeight(),
-            true, true, "overview");
+            { this.getTitle() }), true, dim.width, dim.height, resizable,
+            true);
     frame.pack();
     frame.setLayer(JLayeredPane.PALETTE_LAYER);
     frame.addInternalFrameListener(