JAL-3187 better semantics for feature settings closed event handler
[jalview.git] / src / jalview / gui / FeatureSettings.java
index 11d5e39..961ff14 100644 (file)
  */
 package jalview.gui;
 
+import jalview.api.AlignViewControllerGuiI;
 import jalview.api.AlignViewportI;
 import jalview.api.FeatureColourI;
 import jalview.api.FeatureSettingsControllerI;
+import jalview.api.SplitContainerI;
 import jalview.api.ViewStyleI;
+import jalview.controller.FeatureSettingsControllerGuiI;
 import jalview.datamodel.AlignmentI;
 import jalview.datamodel.SequenceI;
 import jalview.datamodel.features.FeatureMatcher;
@@ -112,7 +115,7 @@ import javax.xml.stream.XMLInputFactory;
 import javax.xml.stream.XMLStreamReader;
 
 public class FeatureSettings extends JPanel
-        implements FeatureSettingsControllerI
+        implements FeatureSettingsControllerI, FeatureSettingsControllerGuiI
 {
   private static final String SEQUENCE_FEATURE_COLOURS = MessageManager
           .getString("label.sequence_feature_colours");
@@ -356,7 +359,6 @@ public class FeatureSettings extends JPanel
     }
 
     discoverAllFeatureData();
-    final PropertyChangeListener change;
     final FeatureSettings fs = this;
     fr.addPropertyChangeListener(change = new PropertyChangeListener()
     {
@@ -373,37 +375,60 @@ public class FeatureSettings extends JPanel
       }
 
     });
-
-    frame = new JInternalFrame();
-    frame.setContentPane(this);
-    if (Platform.isAMac())
+    SplitContainerI splitframe = af.getSplitViewContainer();
+    if (splitframe != null)
     {
-      Desktop.addInternalFrame(frame,
-              MessageManager.getString("label.sequence_feature_settings"),
-              600, 480);
+      frame = null; // keeps eclipse happy
+      splitframe.addFeatureSettingsUI(this);
     }
     else
     {
-      Desktop.addInternalFrame(frame,
-              MessageManager.getString("label.sequence_feature_settings"),
-              600, 450);
-    }
-    frame.setMinimumSize(new Dimension(MIN_WIDTH, MIN_HEIGHT));
+      frame = new JInternalFrame();
+      frame.setContentPane(this);
+      if (Platform.isAMac())
+      {
+        Desktop.addInternalFrame(frame,
+                MessageManager.getString("label.sequence_feature_settings"),
+                600, 480);
+      }
+      else
+      {
+        Desktop.addInternalFrame(frame,
+                MessageManager.getString("label.sequence_feature_settings"),
+                600, 450);
+      }
+      frame.setMinimumSize(new Dimension(MIN_WIDTH, MIN_HEIGHT));
 
-    frame.addInternalFrameListener(
-            new javax.swing.event.InternalFrameAdapter()
-            {
-              @Override
-              public void internalFrameClosed(
-                      javax.swing.event.InternalFrameEvent evt)
+      frame.addInternalFrameListener(
+              new javax.swing.event.InternalFrameAdapter()
               {
-                fr.removePropertyChangeListener(change);
-              };
-            });
-    frame.setLayer(JLayeredPane.PALETTE_LAYER);
+                @Override
+                public void internalFrameClosed(
+                        javax.swing.event.InternalFrameEvent evt)
+                {
+                  featureSettings_isClosed();
+                };
+              });
+      frame.setLayer(JLayeredPane.PALETTE_LAYER);
+    }
     inConstruction = false;
   }
 
+  PropertyChangeListener change;
+
+  @Override
+  public AlignViewControllerGuiI getAlignframe()
+  {
+    return af;
+  }
+
+  @Override
+  public void featureSettings_isClosed()
+  {
+    fr.removePropertyChangeListener(change);
+    change = null;
+  }
+
   protected void popupSort(final int rowSelected, final String type,
           final Object typeCol, final Map<String, float[][]> minmax, int x,
           int y)
@@ -1083,7 +1108,16 @@ public class FeatureSettings extends JPanel
   {
     try
     {
-      frame.setClosed(true);
+      if (frame != null)
+      {
+        frame.setClosed(true);
+      }
+      else
+      {
+        SplitContainerI sc = af.getSplitViewContainer();
+        sc.closeFeatureSettings(this);
+        af.featureSettings = null;
+      }
     } catch (Exception exe)
     {
     }
@@ -1310,7 +1344,38 @@ public class FeatureSettings extends JPanel
         refreshDisplay();
       }
     });
-
+    // JButton viewComplementSettings = new JButton(MessageManager
+    // .formatMessage("label.show_linked_feature_settings",
+    // nucleotide
+    // ? MessageManager.getString("label.protein")
+    // .toLowerCase()
+    // : "CDS"));
+    // viewComplementSettings.addActionListener(new ActionListener()
+    // {
+    //
+    // @Override
+    // public void actionPerformed(ActionEvent e)
+    // {
+    // AlignViewControllerGuiI complAf = af.getSplitViewContainer()
+    // .getComplementAlignFrame(af);
+    // FeatureSettings complFeatureSettings = (FeatureSettings) complAf
+    // .getFeatureSettingsUI();
+    // if (complFeatureSettings != null)
+    // {
+    // complFeatureSettings.frame.setVisible(true);
+    // try
+    // {
+    // complFeatureSettings.frame.setSelected(true);
+    // return;
+    // } catch (Exception q)
+    // {
+    // }
+    // }
+    // {
+    // complAf.showFeatureSettingsUI();
+    // }
+    // }
+    // });
     JPanel lowerPanel = new JPanel(new GridLayout(1, 2));
     bigPanel.add(lowerPanel, BorderLayout.SOUTH);
 
@@ -1323,7 +1388,7 @@ public class FeatureSettings extends JPanel
 
     boolean hasComplement = af.getViewport().getCodingComplement() != null;
     JPanel transPanelLeft = new JPanel(
-            new GridLayout(hasComplement ? 3 : 2, 1));
+            new GridLayout(hasComplement ? 4 : 2, 1));
     transPanelLeft.add(new JLabel(" Colour transparency" + ":"));
     transPanelLeft.add(transparency);
     if (hasComplement)