JAL-3446 Dynamic menu - Moves calc sortby tree item creation to opening
authorBobHanson <hansonr@stolaf.edu>
Wed, 10 Jun 2020 03:07:59 +0000 (22:07 -0500)
committerBobHanson <hansonr@stolaf.edu>
Wed, 10 Jun 2020 03:07:59 +0000 (22:07 -0500)
of its submenu, rather than the upper-level sort menu.

- suggestion only; changes setVisible to setEnabled, more along the
lines of standard practice (?)
- allows for a simple change from "enabled" to "visible" if desired, but
still leaves the submenu creation in its most proximate location.

src/jalview/gui/AlignFrame.java
src/jalview/jbgui/GAlignFrame.java

index b69ba88..a06c6d8 100644 (file)
@@ -3966,7 +3966,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
    */
   protected int _annotationScoreVectorHash;
 
-  /**
+  /**g
    * search the alignment and rebuild the sort by annotation score submenu the
    * last alignment annotation vector hash is stored to minimize cost of
    * rebuilding in subsequence calls.
@@ -4013,6 +4013,18 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
   }
 
   /**
+   * Enable (or, if desired, make visible) the By Tree 
+   * submenu only if it has at least one element (or will have).
+   * 
+   */
+  @Override
+  protected void enableSortMenuOptions()
+  {
+    List<TreePanel> treePanels = getTreePanels();
+    sortByTreeMenu.setEnabled(!treePanels.isEmpty());
+  }
+  
+  /**
    * Maintain the Order by->Displayed Tree menu. Creates a new menu item for a
    * TreePanel with an appropriate <code>jalview.analysis.AlignmentSorter</code>
    * call. Listeners are added to remove the menu item when the treePanel is
@@ -4025,24 +4037,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
   {
     sortByTreeMenu.removeAll();
 
-    List<Component> comps = PaintRefresher.components
-            .get(viewport.getSequenceSetId());
-    List<TreePanel> treePanels = new ArrayList<>();
-    for (Component comp : comps)
-    {
-      if (comp instanceof TreePanel)
-      {
-        treePanels.add((TreePanel) comp);
-      }
-    }
-
-    if (treePanels.size() < 1)
-    {
-      sortByTreeMenu.setVisible(false);
-      return;
-    }
-
-    sortByTreeMenu.setVisible(true);
+    List<TreePanel> treePanels = getTreePanels();
 
     for (final TreePanel tp : treePanels)
     {
@@ -4063,6 +4058,21 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
     }
   }
 
+  private List<TreePanel> getTreePanels()
+  {
+    List<Component> comps = PaintRefresher.components
+            .get(viewport.getSequenceSetId());
+    List<TreePanel> treePanels = new ArrayList<>();
+    for (Component comp : comps)
+    {
+      if (comp instanceof TreePanel)
+      {
+        treePanels.add((TreePanel) comp);
+      }
+    }
+    return treePanels;
+  }
+
   public boolean sortBy(AlignmentOrder alorder, String undoname)
   {
     SequenceI[] oldOrder = viewport.getAlignment().getSequencesArray();
index 836aa33..b6c5280 100755 (executable)
@@ -26,7 +26,9 @@ import jalview.analysis.GeneticCodes;
 import jalview.api.SplitContainerI;
 import jalview.bin.Cache;
 import jalview.gui.JvSwingUtils;
+import jalview.gui.PaintRefresher;
 import jalview.gui.Preferences;
+import jalview.gui.TreePanel;
 import jalview.io.FileFormats;
 import jalview.schemes.ResidueColourScheme;
 import jalview.util.MessageManager;
@@ -34,6 +36,7 @@ import jalview.util.Platform;
 
 import java.awt.BorderLayout;
 import java.awt.Color;
+import java.awt.Component;
 import java.awt.GridLayout;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
@@ -42,7 +45,9 @@ import java.awt.event.FocusEvent;
 import java.awt.event.KeyEvent;
 import java.awt.event.MouseAdapter;
 import java.awt.event.MouseEvent;
+import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 
 import javax.swing.BorderFactory;
@@ -1173,6 +1178,24 @@ public class GAlignFrame extends JInternalFrame
       @Override
       public void menuSelected(MenuEvent e)
       {
+        enableSortMenuOptions();
+      }
+
+      @Override
+      public void menuDeselected(MenuEvent e)
+      {
+      }
+
+      @Override
+      public void menuCanceled(MenuEvent e)
+      {
+      }
+    });
+    sortByTreeMenu.addMenuListener(new MenuListener()
+    {
+      @Override
+      public void menuSelected(MenuEvent e)
+      {
         buildTreeSortMenu();
       }
 
@@ -1737,9 +1760,9 @@ public class GAlignFrame extends JInternalFrame
     alignFrameMenuBar.add(selectMenu);
     alignFrameMenuBar.add(viewMenu);
     alignFrameMenuBar.add(annotationsMenu);
+    alignFrameMenuBar.add(calculateMenu);
     alignFrameMenuBar.add(formatMenu);
     alignFrameMenuBar.add(colourMenu);
-    alignFrameMenuBar.add(calculateMenu);
     if (!Platform.isJS())
     {
       alignFrameMenuBar.add(webService);
@@ -1919,6 +1942,10 @@ public class GAlignFrame extends JInternalFrame
     // selectMenu.add(listenToViewSelections);
   }
 
+  protected void enableSortMenuOptions()
+  {
+  }
+  
   protected void loadVcf_actionPerformed()
   {
   }
@@ -2717,4 +2744,6 @@ public class GAlignFrame extends JInternalFrame
   protected void showComplement_actionPerformed(boolean complement)
   {
   }
+  
+
 }