X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FScalePanel.java;h=8f49c6ce11342e657583914aa1d93fcc9ce09718;hb=bf049bfae9dda6deb9ca2f39175b5404b7dace3f;hp=0f2b765c189909e86f0619457503b4970c52d57f;hpb=7e00183505bd4c58d1ce62ee121ed372c3b058f2;p=jalview.git diff --git a/src/jalview/gui/ScalePanel.java b/src/jalview/gui/ScalePanel.java index 0f2b765..8f49c6c 100755 --- a/src/jalview/gui/ScalePanel.java +++ b/src/jalview/gui/ScalePanel.java @@ -115,15 +115,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; @@ -157,10 +149,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) @@ -198,9 +207,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")); @@ -222,8 +231,8 @@ public class ScalePanel extends JPanel } }); pop.add(item); - pop.show(this, evt.getX(), evt.getY()); } + return pop; } /** @@ -274,18 +283,21 @@ public class ScalePanel extends JPanel @Override public void mouseReleased(MouseEvent evt) { + boolean wasDragging = mouseDragging; mouseDragging = false; ap.getSeqPanel().stopScrolling(); int xCords = Math.max(0, evt.getX()); // prevent negative X coordinates + ViewportRanges ranges = av.getRanges(); int res = (xCords / av.getCharWidth()) - + av.getRanges().getStartRes(); + + ranges.getStartRes(); + res = Math.min(res, ranges.getEndRes()); if (av.hasHiddenColumns()) { res = av.getAlignment().getHiddenColumns() .visibleToAbsoluteColumn(res); } - res = Math.min(res, av.getAlignment().getWidth() - 1); + res = Math.max(0, res); if (!stretchingGroup) { @@ -312,6 +324,12 @@ public class ScalePanel extends JPanel { sg.setStartRes(res); } + if (wasDragging) + { + min = Math.min(res, min); + max = Math.max(res, max); + av.getColumnSelection().stretchGroup(res, sg, min, max); + } } stretchingGroup = false; ap.paintAlignment(false, false);