X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FScalePanel.java;h=ca3faf8542713b4edc9de4bff65ed7401628e53c;hb=5db57ea2e44da7e8f3d5ff0866b0b81cd4458aeb;hp=9c2b42f0faa5cbb0d4ffee93c92531475dff64d2;hpb=3da878124135ff033f42d19d8733891b09e953cd;p=jalview.git diff --git a/src/jalview/gui/ScalePanel.java b/src/jalview/gui/ScalePanel.java index 9c2b42f..ca3faf8 100755 --- a/src/jalview/gui/ScalePanel.java +++ b/src/jalview/gui/ScalePanel.java @@ -48,7 +48,6 @@ import java.util.List; import javax.swing.JMenuItem; import javax.swing.JPanel; import javax.swing.JPopupMenu; -import javax.swing.SwingUtilities; import javax.swing.ToolTipManager; /** @@ -115,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; @@ -155,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) @@ -179,7 +187,8 @@ public class ScalePanel extends JPanel }); pop.add(item); - if (av.getAlignment().getHiddenColumns().hasMultiHiddenColumnRegions()) + if (av.getAlignment().getHiddenColumns() + .hasMultiHiddenColumnRegions()) { item = new JMenuItem(MessageManager.getString("action.reveal_all")); item.addActionListener(new ActionListener() @@ -196,9 +205,9 @@ public class ScalePanel extends JPanel }); 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")); @@ -220,8 +229,8 @@ public class ScalePanel extends JPanel } }); pop.add(item); - pop.show(this, evt.getX(), evt.getY()); } + return pop; } /** @@ -278,15 +287,14 @@ public class ScalePanel extends JPanel // todo res calculation should be a method on AlignViewport int xCords = Math.max(0, evt.getX()); // prevent negative X coordinates - int res = (xCords / av.getCharWidth()) - + av.getRanges().getStartRes(); - + ViewportRanges ranges = av.getRanges(); + int res = (xCords / av.getCharWidth()) + ranges.getStartRes(); + res = Math.min(res, ranges.getEndRes()); if (av.hasHiddenColumns()) { res = av.getAlignment().getHiddenColumns() .visibleToAbsoluteColumn(res); } - res = Math.min(res, av.getRanges().getEndRes()); res = Math.max(0, res); if (!stretchingGroup) @@ -427,7 +435,7 @@ public class ScalePanel extends JPanel @Override public void paintComponent(Graphics g) { - //super.paintComponent(g); // BH 2019 + // super.paintComponent(g); // BH 2019 /* * shouldn't get called in wrapped mode as the scale above is @@ -515,10 +523,11 @@ public class ScalePanel extends JPanel gg.fillPolygon( new int[] - { -1 + res * avCharWidth - avCharHeight / 4, - -1 + res * avCharWidth + avCharHeight / 4, - -1 + res * avCharWidth }, new int[] - { y, y, y + 2 * yOf }, 3); + { -1 + res * avCharWidth - avCharHeight / 4, + -1 + res * avCharWidth + avCharHeight / 4, + -1 + res * avCharWidth }, + new int[] + { y, y, y + 2 * yOf }, 3); } } } @@ -569,10 +578,11 @@ public class ScalePanel extends JPanel || evt.getPropertyName().equals(ViewportRanges.MOVE_VIEWPORT)) { // scroll event, repaint panel - - // Call repaint on alignment panel so that repaints from other alignment - // panel components can be aggregated. Otherwise performance of the overview - // window and others may be adversely affected. + + // Call repaint on alignment panel so that repaints from other alignment + // panel components can be aggregated. Otherwise performance of the + // overview + // window and others may be adversely affected. av.getAlignPanel().repaint(); } }