Edit and annotate wrapped alignment
authoramwaterhouse <Andrew Waterhouse>
Mon, 29 Aug 2005 10:18:50 +0000 (10:18 +0000)
committeramwaterhouse <Andrew Waterhouse>
Mon, 29 Aug 2005 10:18:50 +0000 (10:18 +0000)
src/jalview/gui/SeqCanvas.java
src/jalview/gui/SeqPanel.java

index 841f929..6c2c07b 100755 (executable)
@@ -129,7 +129,7 @@ public class SeqCanvas extends JComponent
 \r
             if (value != -1)\r
             {\r
-                int x = LABEL_WEST - fm.stringWidth(value + "");\r
+                int x = LABEL_WEST - fm.stringWidth(String.valueOf(value))-av.charWidth/2;\r
                 g.drawString(value + "", x,\r
                     (ypos + (i * av.charHeight)) - (av.charHeight / 5));\r
             }\r
@@ -171,7 +171,7 @@ public class SeqCanvas extends JComponent
 \r
             if (value != -1)\r
             {\r
-                g.drawString(value + "", 0,\r
+                g.drawString(String.valueOf(value), av.charWidth/2,\r
                     (ypos + (i * av.charHeight)) - (av.charHeight / 5));\r
             }\r
         }\r
@@ -324,17 +324,32 @@ public class SeqCanvas extends JComponent
 \r
         if (av.scaleRightWrapped)\r
         {\r
-            LABEL_EAST = fm.stringWidth(av.alignment.getWidth() + "000");\r
+            LABEL_EAST = fm.stringWidth(getMask()+"0");\r
         }\r
 \r
         if (av.scaleLeftWrapped)\r
         {\r
-            LABEL_WEST = fm.stringWidth(av.alignment.getWidth() + "");\r
+            LABEL_WEST = fm.stringWidth(getMask());\r
         }\r
 \r
         return (cwidth - LABEL_EAST - LABEL_WEST) / av.charWidth;\r
     }\r
 \r
+\r
+    /**\r
+     * Generates a string of zeroes.\r
+     * @return String\r
+     */\r
+    String getMask()\r
+    {\r
+      String mask = "0";\r
+      for (int i = av.alignment.getWidth(); i > 0; i /= 10)\r
+      {\r
+        mask += "0";\r
+      }\r
+      return mask;\r
+    }\r
+\r
     /**\r
      * DOCUMENT ME!\r
      *\r
@@ -346,6 +361,7 @@ public class SeqCanvas extends JComponent
     public void drawWrappedPanel(Graphics g, int canvasWidth, int canvasHeight,\r
         int startRes)\r
     {\r
+\r
         AlignmentI al = av.getAlignment();\r
 \r
         FontMetrics fm = getFontMetrics(av.getFont());\r
@@ -354,14 +370,14 @@ public class SeqCanvas extends JComponent
 \r
         if (av.scaleRightWrapped)\r
         {\r
-            LABEL_EAST = fm.stringWidth(al.getWidth() + "000");\r
+            LABEL_EAST = fm.stringWidth(getMask()+"0");\r
         }\r
 \r
         int LABEL_WEST = 0;\r
 \r
         if (av.scaleLeftWrapped)\r
         {\r
-            LABEL_WEST = fm.stringWidth(al.getWidth() + "0");\r
+            LABEL_WEST = fm.stringWidth(getMask());\r
         }\r
 \r
         int cWidth = (canvasWidth - LABEL_EAST - LABEL_WEST) / av.charWidth;\r
@@ -383,9 +399,9 @@ public class SeqCanvas extends JComponent
 \r
             if (av.scaleRightWrapped)\r
             {\r
-                g.translate(canvasWidth - LABEL_EAST + av.charWidth, 0);\r
+                g.translate(canvasWidth - LABEL_EAST, 0);\r
                 drawEastScale(g, startRes, endx, ypos);\r
-                g.translate(-(canvasWidth - LABEL_EAST + av.charWidth), 0);\r
+                g.translate(-(canvasWidth - LABEL_EAST), 0);\r
             }\r
 \r
             g.translate(LABEL_WEST, 0);\r
index bc8f200..41174d4 100755 (executable)
@@ -95,21 +95,11 @@ public class SeqPanel extends JPanel
             {\r
                 public void mouseMoved(MouseEvent evt)\r
                 {\r
-                    if (av.getWrapAlignment())\r
-                    {\r
-                        return;\r
-                    }\r
-\r
                     doMouseMoved(evt);\r
                 }\r
 \r
                 public void mouseDragged(MouseEvent evt)\r
                 {\r
-                    if (av.getWrapAlignment())\r
-                    {\r
-                        return;\r
-                    }\r
-\r
                     if (editingSeqs)\r
                     {\r
                         doMouseDragged(evt);\r
@@ -155,10 +145,6 @@ public class SeqPanel extends JPanel
                 public void mouseReleased(MouseEvent evt)\r
                 {\r
                     mouseWheelPressed = false;\r
-                    if (av.getWrapAlignment())\r
-                    {\r
-                        return;\r
-                    }\r
 \r
                     if (editingSeqs)\r
                     {\r
@@ -177,10 +163,6 @@ public class SeqPanel extends JPanel
                     mouseWheelPressed = true;\r
                     return;\r
                   }\r
-                    if (av.getWrapAlignment())\r
-                    {\r
-                        return;\r
-                    }\r
 \r
                     if (evt.isShiftDown() || evt.isAltDown() ||\r
                             evt.isControlDown())\r
@@ -201,26 +183,63 @@ public class SeqPanel extends JPanel
 \r
                 public void mouseExited(MouseEvent evt)\r
                 {\r
-                    if (av.getWrapAlignment() || editingSeqs)\r
-                    {\r
-                        return;\r
-                    }\r
-\r
                     doMouseExitedDefineMode(evt);\r
                 }\r
 \r
                 public void mouseEntered(MouseEvent evt)\r
                 {\r
-                    if (av.getWrapAlignment() || editingSeqs)\r
-                    {\r
-                        return;\r
-                    }\r
-\r
                     doMouseEnteredDefineMode(evt);\r
                 }\r
             });\r
     }\r
 \r
+    int findRes(MouseEvent evt)\r
+   {\r
+     int res = 0;\r
+     int x = evt.getX();\r
+\r
+    if (av.wrapAlignment)\r
+    {\r
+        int y = evt.getY();\r
+        y -= (2 * av.charHeight);\r
+        x -= seqCanvas.LABEL_WEST;\r
+\r
+        int chunkHeight = (av.getAlignment().getHeight() + 2) * av.charHeight;\r
+        int cwidth = seqCanvas.getWrappedCanvasWidth(this.getWidth());\r
+        int block = y/chunkHeight;\r
+        block += av.getStartRes()/cwidth;\r
+\r
+        res = block*cwidth   +   x / av.getCharWidth();\r
+    }\r
+    else\r
+    {\r
+        res = (x / av.getCharWidth()) + av.getStartRes();\r
+    }\r
+\r
+    return res;\r
+\r
+   }\r
+\r
+   int findSeq(MouseEvent evt)\r
+   {\r
+     int seq = 0;\r
+     int y = evt.getY();\r
+\r
+     if (av.wrapAlignment)\r
+     {\r
+       y -= (2 * av.charHeight);\r
+       int chunkHeight = (av.getAlignment().getHeight() + 2) * av.charHeight;\r
+       seq = ( (y % chunkHeight) / av.getCharHeight());\r
+     }\r
+     else\r
+     {\r
+       seq = (y / av.getCharHeight()) + av.getStartSeq();\r
+     }\r
+\r
+     return seq;\r
+   }\r
+\r
+\r
     /**\r
      * DOCUMENT ME!\r
      *\r
@@ -249,17 +268,11 @@ public class SeqPanel extends JPanel
      */\r
     public void doMousePressed(MouseEvent evt)\r
     {\r
-        ap.alignFrame.addHistoryItem(new HistoryItem("Edit Sequence",\r
-                av.alignment, HistoryItem.EDIT));\r
+      ap.alignFrame.addHistoryItem(new HistoryItem("Edit Sequence",\r
+                                                   av.alignment, HistoryItem.EDIT));\r
 \r
-        int seq;\r
-        int res;\r
-\r
-        int x = evt.getX();\r
-        int y = evt.getY();\r
-\r
-        res = (x / av.getCharWidth()) + av.getStartRes();\r
-        seq = (y / av.getCharHeight()) + av.getStartSeq();\r
+      int seq = findSeq(evt);\r
+      int res = findRes(evt);\r
 \r
         if ((seq < av.getAlignment().getHeight()) &&\r
                 (res < av.getAlignment().getSequenceAt(seq).getLength()))\r
@@ -286,39 +299,17 @@ public class SeqPanel extends JPanel
      */\r
     public void doMouseMoved(MouseEvent evt)\r
     {\r
-        int res = 0;\r
-        int seq = 0;\r
-        int x = evt.getX();\r
-        int y = evt.getY();\r
-\r
-        if (av.wrapAlignment)\r
-        {\r
-            y -= (2 * av.charHeight);\r
+      int res = findRes(evt);\r
+      int seq = findSeq(evt);\r
 \r
-            int chunkHeight = (av.getAlignment().getHeight() + 2) * av.charHeight;\r
-\r
-            res = (int) ((y / chunkHeight) * (getWidth() / av.charWidth)) +\r
-                (x / av.getCharWidth()) + av.getStartRes();\r
-\r
-            y %= chunkHeight;\r
-            seq = (y / av.getCharHeight()) + av.getStartSeq();\r
-        }\r
-        else\r
-        {\r
-            res = (x / av.getCharWidth()) + av.getStartRes();\r
-            seq = (y / av.getCharHeight()) + av.getStartSeq();\r
-        }\r
-\r
-        if (seq >= av.getAlignment().getHeight())\r
-        {\r
+      if(res<0 || seq<0 || seq >= av.getAlignment().getHeight())\r
             return;\r
-        }\r
 \r
-        SequenceI sequence = av.getAlignment().getSequenceAt(seq);\r
+      SequenceI sequence = av.getAlignment().getSequenceAt(seq);\r
 \r
-        if (res > sequence.getLength())\r
-        {\r
-            return;\r
+      if (res > sequence.getLength())\r
+      {\r
+          return;\r
         }\r
 \r
         Object obj = ResidueProperties.aa2Triplet.get(sequence.getCharAt(res) +\r
@@ -381,7 +372,7 @@ public class SeqPanel extends JPanel
     public void doMouseDragged(MouseEvent evt)\r
     {\r
         // If we're dragging we're editing\r
-        int res = (evt.getX() / av.getCharWidth()) + av.getStartRes();\r
+        int res = findRes(evt);\r
 \r
         if (res < 0)\r
         {\r
@@ -679,9 +670,9 @@ public class SeqPanel extends JPanel
      */\r
     public void doMousePressedDefineMode(MouseEvent evt)\r
     {\r
-        int res = (evt.getX() / av.getCharWidth()) + av.getStartRes();\r
-        int seq = (evt.getY() / av.getCharHeight()) + av.getStartSeq();\r
-        oldSeq = seq;\r
+      int res = findRes(evt);\r
+      int seq = findSeq(evt);\r
+      oldSeq = seq;\r
 \r
         SequenceI sequence = (Sequence) av.getAlignment().getSequenceAt(seq);\r
 \r
@@ -827,11 +818,11 @@ public class SeqPanel extends JPanel
      */\r
     public void doMouseDraggedDefineMode(MouseEvent evt)\r
     {\r
-        int res = (evt.getX() / av.getCharWidth()) + av.getStartRes();\r
-        int y = (evt.getY() / av.getCharHeight()) + av.getStartSeq();\r
+      int res = findRes(evt);\r
+      int y = findSeq(evt);\r
 \r
-        if (stretchGroup == null)\r
-        {\r
+      if (stretchGroup == null)\r
+      {\r
             return;\r
         }\r
 \r
@@ -855,7 +846,7 @@ public class SeqPanel extends JPanel
         {\r
             res = av.getStartRes();\r
         }\r
-        else if (res > av.getEndRes())\r
+        else if (res > av.getEndRes() && !av.getWrapAlignment())\r
         {\r
             res = av.getEndRes();\r
         }\r