JAL-3066 Fix NullPointerException thrown when showing HMMER run dialog
[jalview.git] / src / jalview / gui / ScalePanel.java
index bb15bd2..fda1e03 100755 (executable)
@@ -114,15 +114,7 @@ public class ScalePanel extends JPanel
     {
       x = av.getAlignment().getHiddenColumns().visibleToAbsoluteColumn(x);
     }
-
-    if (x >= av.getAlignment().getWidth())
-    {
-      res = av.getAlignment().getWidth() - 1;
-    }
-    else
-    {
-      res = x;
-    }
+    res = Math.min(x, av.getAlignment().getWidth() - 1);
 
     min = res;
     max = res;
@@ -154,10 +146,27 @@ public class ScalePanel extends JPanel
    */
   protected void rightMouseButtonPressed(MouseEvent evt, final int res)
   {
+    JPopupMenu pop = buildPopupMenu(res);
+    if (pop.getSubElements().length > 0)
+    {
+      pop.show(this, evt.getX(), evt.getY());
+    }
+  }
+
+  /**
+   * Builds a popup menu with 'Hide' or 'Reveal' options, or both, or neither
+   * 
+   * @param res
+   *          column number (0..)
+   * @return
+   */
+  protected JPopupMenu buildPopupMenu(final int res)
+  {
     JPopupMenu pop = new JPopupMenu();
 
     /*
-     * grab the hidden range in case mouseMoved nulls it
+     * logic here depends on 'reveal', set in mouseMoved;
+     * grab the hidden range in case mouseMoved nulls it later
      */
     final int[] hiddenRange = reveal;
     if (hiddenRange != null)
@@ -171,9 +180,7 @@ public class ScalePanel extends JPanel
         {
           av.showColumn(hiddenRange[0]);
           reveal = null;
-          ap.updateLayout();
-          ap.paintAlignment(true, true);
-          av.sendSelection();
+          updatePanel();
         }
       });
       pop.add(item);
@@ -188,16 +195,14 @@ public class ScalePanel extends JPanel
           {
             av.showAllHiddenColumns();
             reveal = null;
-            ap.updateLayout();
-            ap.paintAlignment(true, true);
-            av.sendSelection();
+            updatePanel();
           }
         });
         pop.add(item);
       }
-      pop.show(this, evt.getX(), evt.getY());
     }
-    else if (av.getColumnSelection().contains(res))
+
+    if (av.getColumnSelection().contains(res))
     {
       JMenuItem item = new JMenuItem(
               MessageManager.getString("label.hide_columns"));
@@ -212,15 +217,20 @@ public class ScalePanel extends JPanel
           {
             av.setSelectionGroup(null);
           }
-
-          ap.updateLayout();
-          ap.paintAlignment(true, true);
-          av.sendSelection();
+          updatePanel();
         }
       });
       pop.add(item);
-      pop.show(this, evt.getX(), evt.getY());
     }
+    return pop;
+  }
+
+  protected void updatePanel()
+  {
+    ap.updateLayout();
+    ap.paintAlignment(true, true);
+    ap.updateScrollBarsFromRanges();
+    av.sendSelection();
   }
 
   /**