Middle mouse to compress alignment
authoramwaterhouse <Andrew Waterhouse>
Tue, 2 May 2006 12:23:01 +0000 (12:23 +0000)
committeramwaterhouse <Andrew Waterhouse>
Tue, 2 May 2006 12:23:01 +0000 (12:23 +0000)
src/jalview/appletgui/AnnotationPanel.java
src/jalview/appletgui/FeatureRenderer.java
src/jalview/appletgui/ScalePanel.java
src/jalview/appletgui/SeqPanel.java
src/jalview/appletgui/SequenceRenderer.java

index daa68d1..1bf3d38 100755 (executable)
@@ -60,7 +60,7 @@ public class AnnotationPanel
 \r
     this.ap = ap;\r
     av = ap.av;\r
-    this.setLayout(null);\r
+    setLayout(null);\r
     adjustPanelHeight();\r
 \r
     addMouseMotionListener(new MouseMotionAdapter()\r
@@ -131,9 +131,6 @@ public class AnnotationPanel
     }\r
 \r
     this.setSize(getSize().width, height);\r
-    if(ap!=null)\r
-       ap.annotationScroller.setSize(getSize().width, height);\r
-\r
 \r
     repaint();\r
 \r
@@ -211,6 +208,8 @@ public class AnnotationPanel
 \r
   public void paint(Graphics g)\r
   {\r
+\r
+\r
     imgWidth = (av.endRes - av.startRes + 1) * av.charWidth;\r
 \r
     if (image == null || imgWidth != image.getWidth(this))\r
@@ -230,6 +229,8 @@ public class AnnotationPanel
     }\r
 \r
     drawComponent(gg, av.startRes, av.endRes + 1);\r
+    g.setColor(Color.white);\r
+    g.fillRect(0, 0, getSize().width, getSize().height);\r
     g.drawImage(image, 0, 0, this);\r
   }\r
 \r
@@ -291,14 +292,14 @@ public class AnnotationPanel
           g.setColor(Color.white);\r
           g.fillRect(0, 0, getSize().width, getSize().height);\r
           g.setColor(Color.black);\r
-          g.drawString("Alignment has no annotations", 20, 15);\r
+          if(av.validCharWidth)\r
+            g.drawString("Alignment has no annotations", 20, 15);\r
 \r
           return;\r
       }\r
 \r
       AlignmentAnnotation[] aa = av.alignment.getAlignmentAnnotation();\r
 \r
-      int j;\r
       int x = 0;\r
       int y = 0;\r
       char lastSS;\r
@@ -361,8 +362,8 @@ public class AnnotationPanel
               x = (column - startRes) * av.charWidth;\r
 \r
 \r
-              if (validRes &&\r
-                      (row.annotations[column].displayCharacter.length() > 0))\r
+              if (av.validCharWidth && validRes &&\r
+                        (row.annotations[column].displayCharacter.length() > 0))\r
               {\r
                 int charOffset = (av.charWidth -\r
                     fm.charWidth(row.annotations[column].displayCharacter.charAt(\r
index 83a8340..900de83 100755 (executable)
@@ -1,3 +1,4 @@
+\r
 /*\r
  * Jalview - A Sequence Alignment Editor and Viewer\r
  * Copyright (C) 2005 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle\r
@@ -281,6 +282,9 @@ public class FeatureRenderer
 \r
             g.fillRect( (i - start) * width, y1, width, height);\r
 \r
+            if(!av.validCharWidth)\r
+              continue;\r
+\r
             g.setColor(Color.white);\r
             charOffset = (width - fm.charWidth(s)) / 2;\r
             g.drawString(String.valueOf(s),\r
index fc7be6d..f8706ae 100755 (executable)
@@ -204,11 +204,21 @@ public class ScalePanel
       scalestartx += 5;\r
     }\r
 \r
+    String string;\r
+    int maxX=0;\r
+\r
     for (int i = scalestartx; i < endx; i += 5)\r
     {\r
       if (i % 10 == 0)\r
       {\r
-        gg.drawString(String.valueOf(i), (i - startx - 1) * av.charWidth, y);\r
+        string = String.valueOf(i);\r
+        if ( (i - startx - 1) * av.charWidth > maxX)\r
+        {\r
+          gg.drawString(string,\r
+                        (i - startx - 1) * av.charWidth, y);\r
+          maxX = (i - startx + 1) * av.charWidth + fm.stringWidth(string);\r
+        }\r
+\r
         gg.drawLine( (int) ( (i - startx - 1) * av.charWidth + av.charWidth / 2),\r
                     y + 2,\r
                     (int) ( (i - startx - 1) * av.charWidth + av.charWidth / 2),\r
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
index 891dfab..9dbb05c 100755 (executable)
@@ -97,9 +97,11 @@ public class SequenceRenderer
 \r
     drawBoxes(seq, start, end,  y1);\r
 \r
-    fm = g.getFontMetrics();\r
-    drawText(seq, start, end, y1);\r
-\r
+    if(av.validCharWidth)\r
+    {\r
+      fm = g.getFontMetrics();\r
+      drawText(seq, start, end, y1);\r
+    }\r
   }\r
 \r
   public void drawBoxes(SequenceI seq, int start, int end,  int y1)\r
@@ -250,17 +252,20 @@ public class SequenceRenderer
 \r
     char s = '~';\r
     // Need to find the sequence position here.\r
-    for (int i = start; i <= end; i++)\r
+    if(av.validCharWidth)\r
     {\r
-      if (i < seq.getLength())\r
+      for (int i = start; i <= end; i++)\r
       {\r
-        s = seq.getSequence().charAt(i);\r
-      }\r
+        if (i < seq.getLength())\r
+        {\r
+          s = seq.getSequence().charAt(i);\r
+        }\r
 \r
-      charOffset = (width - fm.charWidth(s)) / 2;\r
-      graphics.drawString(String.valueOf(s),\r
-                          charOffset + x1 + width * (i - start),\r
-                          y1 + height - pady);\r
+        charOffset = (width - fm.charWidth(s)) / 2;\r
+        graphics.drawString(String.valueOf(s),\r
+                            charOffset + x1 + width * (i - start),\r
+                            y1 + height - pady);\r
+      }\r
     }\r
   }\r
 \r
@@ -275,11 +280,14 @@ public class SequenceRenderer
     graphics.setColor(Color.white);\r
 \r
     char s = seq.getCharAt(res);\r
+    if (av.validCharWidth)\r
+    {\r
 \r
-    charOffset = (av.charWidth - fm.charWidth(s)) / 2;\r
-    graphics.drawString(String.valueOf(s),\r
-              charOffset + x1,\r
-              (y1 + av.charHeight) - pady);\r
+      charOffset = (av.charWidth - fm.charWidth(s)) / 2;\r
+      graphics.drawString(String.valueOf(s),\r
+                          charOffset + x1,\r
+                          (y1 + av.charHeight) - pady);\r
+    }\r
     }\r
 \r
 }\r