Middle mouse to compress alignment
[jalview.git] / src / jalview / appletgui / SeqPanel.java
index 987b0b8..87e9bec 100755 (executable)
@@ -55,6 +55,9 @@ public class SeqPanel
   StringBuffer keyboardNo1;\r
   StringBuffer keyboardNo2;\r
 \r
+  boolean mouseWheelPressed = false;\r
+  Point lastMousePress;\r
+\r
   public SeqPanel(AlignViewport avp, AlignmentPanel p)\r
   {\r
     this.av = avp;\r
@@ -314,6 +317,15 @@ public class SeqPanel
     }\r
      public void mousePressed(MouseEvent evt)\r
      {\r
+       lastMousePress = evt.getPoint();\r
+\r
+       if ( (evt.getModifiers() & InputEvent.BUTTON2_MASK) ==\r
+         InputEvent.BUTTON2_MASK)\r
+       {\r
+         mouseWheelPressed = true;\r
+         return;\r
+       }\r
+\r
        if (evt.isShiftDown() || evt.isAltDown() ||\r
            evt.isControlDown())\r
        {\r
@@ -360,6 +372,7 @@ public class SeqPanel
   public void mouseReleased(MouseEvent evt)\r
   {\r
     mouseDragging = false;\r
+    mouseWheelPressed = false;\r
 \r
     if (!editingSeqs)\r
     {\r
@@ -370,7 +383,7 @@ public class SeqPanel
      editOccurred();\r
 \r
      endEditing();\r
-       ap.repaint();\r
+     ap.repaint();\r
   }\r
 \r
   int startWrapBlock=-1;\r
@@ -566,11 +579,66 @@ public class SeqPanel
 \r
   public void mouseDragged(MouseEvent evt)\r
   {\r
-    if (!editingSeqs)\r
-{\r
-  doMouseDraggedDefineMode(evt);\r
-  return;\r
-}\r
+    if (mouseWheelPressed)\r
+    {\r
+      int oldWidth = av.charWidth;\r
+\r
+      //Which is bigger, left-right or up-down?\r
+      if (Math.abs(evt.getY() - lastMousePress.y)\r
+          > Math.abs(evt.getX() - lastMousePress.x))\r
+      {\r
+        int fontSize = av.font.getSize();\r
+\r
+        if (evt.getY() < lastMousePress.y && av.charHeight > 1)\r
+        {\r
+          fontSize--;\r
+        }\r
+        else if (evt.getY() > lastMousePress.y)\r
+        {\r
+          fontSize++;\r
+        }\r
+\r
+\r
+        if(fontSize<1)\r
+          fontSize = 1;\r
+\r
+        av.setFont(new Font(av.font.getName(), av.font.getStyle(), fontSize));\r
+        av.charWidth = oldWidth;\r
+      }\r
+      else\r
+      {\r
+        if (evt.getX() < lastMousePress.x && av.charWidth > 1)\r
+        {\r
+          av.charWidth--;\r
+        }\r
+        else if (evt.getX() > lastMousePress.x)\r
+        {\r
+          av.charWidth++;\r
+        }\r
+\r
+        if(av.charWidth<1)\r
+        {\r
+          av.charWidth = 1;\r
+        }\r
+      }\r
+\r
+      ap.fontChanged();\r
+\r
+      FontMetrics fm = getFontMetrics(av.getFont());\r
+      av.validCharWidth = fm.charWidth('M') <= av.charWidth;\r
+\r
+      lastMousePress = evt.getPoint();\r
+\r
+      ap.repaint();\r
+      ap.annotationPanel.image = null;\r
+      return;\r
+      }\r
+\r
+      if (!editingSeqs)\r
+      {\r
+        doMouseDraggedDefineMode(evt);\r
+        return;\r
+      }\r
 \r
   int res = findRes(evt);\r
 \r
@@ -925,6 +993,8 @@ public class SeqPanel
 //////////////////////////////////////////\r
   public void doMousePressedDefineMode(MouseEvent evt)\r
   {\r
+\r
+\r
     if (scrollThread != null)\r
     {\r
       scrollThread.running = false;\r