JAL-2089 patch broken merge to master for Release 2.10.0b1
[jalview.git] / src / jalview / gui / ScalePanel.java
index 2165b2c..0aa2459 100755 (executable)
@@ -23,7 +23,10 @@ package jalview.gui;
 import jalview.datamodel.ColumnSelection;
 import jalview.datamodel.SequenceGroup;
 import jalview.datamodel.SequenceI;
+import jalview.renderer.ScaleRenderer;
+import jalview.renderer.ScaleRenderer.ScaleMark;
 import jalview.util.MessageManager;
+import jalview.util.Platform;
 
 import java.awt.Color;
 import java.awt.FontMetrics;
@@ -40,6 +43,7 @@ import java.util.List;
 import javax.swing.JMenuItem;
 import javax.swing.JPanel;
 import javax.swing.JPopupMenu;
+import javax.swing.SwingUtilities;
 import javax.swing.ToolTipManager;
 
 /**
@@ -117,10 +121,19 @@ public class ScalePanel extends JPanel implements MouseMotionListener,
     min = res;
     max = res;
 
-    if (evt.isPopupTrigger())
+    if (evt.isPopupTrigger()) // Mac: mousePressed
     {
       rightMouseButtonPressed(evt, res);
     }
+    else if (SwingUtilities.isRightMouseButton(evt) && !Platform.isAMac())
+    {
+      /*
+       * defer right-mouse click handling to mouse up on Windows
+       * (where isPopupTrigger() will answer true)
+       * but accept Cmd-click on Mac which passes isRightMouseButton
+       */
+      return;
+    }
     else
     {
       leftMouseButtonPressed(evt, res);
@@ -219,7 +232,12 @@ public class ScalePanel extends JPanel implements MouseMotionListener,
    */
   protected void leftMouseButtonPressed(MouseEvent evt, final int res)
   {
-    if (!evt.isControlDown() && !evt.isShiftDown())
+    /*
+     * Ctrl-click/Cmd-click adds to the selection
+     * Shift-click extends the selection
+     */
+    // TODO Problem: right-click on Windows not reported until mouseReleased?!?
+    if (!Platform.isControlDown(evt) && !evt.isShiftDown())
     {
       av.getColumnSelection().clear();
     }
@@ -278,8 +296,14 @@ public class ScalePanel extends JPanel implements MouseMotionListener,
 
     if (!stretchingGroup)
     {
-      ap.paintAlignment(false);
-
+      if (evt.isPopupTrigger()) // Windows: mouseReleased
+      {
+        rightMouseButtonPressed(evt, res);
+      }
+      else
+      {
+        ap.paintAlignment(false);
+      }
       return;
     }
 
@@ -497,7 +521,8 @@ public class ScalePanel extends JPanel implements MouseMotionListener,
     int widthx = 1 + endx - startx;
 
     FontMetrics fm = gg.getFontMetrics(av.getFont());
-    int y = avCharHeight, yOf = fm.getDescent();
+    int y = avCharHeight;
+    int yOf = fm.getDescent();
     y -= yOf;
     if (av.hasHiddenColumns())
     {
@@ -522,7 +547,6 @@ public class ScalePanel extends JPanel implements MouseMotionListener,
               -1 + res * avCharWidth - avCharHeight / 4,
               -1 + res * avCharWidth + avCharHeight / 4,
               -1 + res * avCharWidth }, new int[] { y, y, y + 2 * yOf }, 3);
-
         }
       }
     }
@@ -530,14 +554,14 @@ public class ScalePanel extends JPanel implements MouseMotionListener,
     gg.setColor(Color.black);
 
     int maxX = 0;
-    List<Object[]> marks = jalview.renderer.ScaleRenderer.calculateMarks(
-            av, startx, endx);
+    List<ScaleMark> marks = new ScaleRenderer().calculateMarks(av, startx,
+            endx);
 
-    for (Object[] mark : marks)
+    for (ScaleMark mark : marks)
     {
-      boolean major = Boolean.valueOf((Boolean) mark[0]);
-      int mpos = ((Integer) mark[1]).intValue(); // (i - startx - 1)
-      String mstring = (String) mark[2];
+      boolean major = mark.major;
+      int mpos = mark.column; // (i - startx - 1)
+      String mstring = mark.text;
       if (mstring != null)
       {
         if (mpos * avCharWidth > maxX)
@@ -557,15 +581,6 @@ public class ScalePanel extends JPanel implements MouseMotionListener,
                 (mpos * avCharWidth) + (avCharWidth / 2), y + (yOf * 2));
       }
     }
-    if (av.hasHiddenColumns())
-    {
-      if (reveal != null && reveal[0] > startx && reveal[0] < endx)
-      {
-        gg.drawString(MessageManager.getString("label.reveal_columns"),
-                reveal[0] * avCharWidth, 0);
-      }
-    }
-
   }
 
 }