Helix glyphs drawn correctly
authoramwaterhouse <Andrew Waterhouse>
Fri, 28 Apr 2006 12:32:58 +0000 (12:32 +0000)
committeramwaterhouse <Andrew Waterhouse>
Fri, 28 Apr 2006 12:32:58 +0000 (12:32 +0000)
src/jalview/appletgui/AnnotationPanel.java

index cb638dd..d9b8dd3 100755 (executable)
@@ -296,8 +296,8 @@ public class AnnotationPanel
       int j;\r
       int x = 0;\r
       int y = 0;\r
-      char[] lastSS = new char[aa.length];\r
-      int[] lastSSX = new int[aa.length];\r
+      char lastSS;\r
+      int lastSSX;\r
       int iconOffset = av.charHeight / 2;\r
       boolean validRes = false;\r
 \r
@@ -314,7 +314,8 @@ public class AnnotationPanel
               continue;\r
           }\r
 \r
-\r
+          lastSS = ' ';\r
+          lastSSX = 0;\r
 \r
           if (row.graph>0)\r
           {\r
@@ -339,10 +340,11 @@ public class AnnotationPanel
               iconOffset = 0;\r
           }\r
 \r
-          for (j = startRes; j < endRes; j++)\r
+          int column = startRes;\r
+          while(column < endRes)\r
           {\r
-              if ((row.annotations.length <= j) ||\r
-                      (row.annotations[j] == null))\r
+              if ((row.annotations.length <= column) ||\r
+                      (row.annotations[column] == null))\r
               {\r
                   validRes = false;\r
               }\r
@@ -351,68 +353,69 @@ public class AnnotationPanel
                   validRes = true;\r
               }\r
 \r
-              x = (j - startRes) * av.charWidth;\r
+              x = (column - startRes) * av.charWidth;\r
 \r
-              if (activeRow == i)\r
-              {\r
-                  g.setColor(Color.red);\r
-\r
-                  if (activeRes != null)\r
-                  {\r
-                      for (int n = 0; n < activeRes.size(); n++)\r
-                      {\r
-                          int v = Integer.parseInt(activeRes.elementAt(n).toString());\r
-\r
-                          if (v == j)\r
-                          {\r
-                              g.fillRect((j - startRes) * av.charWidth, y,\r
-                                  av.charWidth, row.height);\r
-                          }\r
-                      }\r
-                  }\r
-              }\r
 \r
               if (validRes &&\r
-                      (row.annotations[j].displayCharacter.length() > 0))\r
+                      (row.annotations[column].displayCharacter.length() > 0))\r
               {\r
-\r
-                  int charOffset = (av.charWidth -\r
-                      fm.charWidth(row.annotations[j].displayCharacter.charAt(\r
-                              0))) / 2;\r
-                  g.setColor(row.annotations[j].colour);\r
-\r
-                  if (j == 0 || row.graph>0)\r
-                  {\r
-                      g.drawString(row.annotations[j].displayCharacter, x+charOffset,\r
-                          y + iconOffset + 3);\r
-                  }\r
-                  else if (((row.annotations[j - 1] == null) ||\r
-                          (!row.annotations[j].displayCharacter.equals(\r
-                           row.annotations[j - 1].displayCharacter))))\r
-                  {\r
-                      g.drawString(row.annotations[j].displayCharacter, x+charOffset,\r
-                          y + iconOffset + 3);\r
-                  }\r
+                int charOffset = (av.charWidth -\r
+                    fm.charWidth(row.annotations[column].displayCharacter.charAt(\r
+                            0))) / 2;\r
+                g.setColor(row.annotations[column].colour);\r
+\r
+                if (column == 0 || row.graph>0)\r
+                {\r
+                    g.drawString(row.annotations[column].displayCharacter, x+charOffset,\r
+                        y + iconOffset + 3);\r
+                }\r
+                else if (\r
+                    row.annotations[column - 1] == null\r
+                    ||(!row.annotations[column].displayCharacter.equals(\r
+                        row.annotations[column - 1].displayCharacter)\r
+                    ||\r
+              (row.annotations[column].displayCharacter.length() <2 &&\r
+               row.annotations[column].secondaryStructure==' ')))\r
+                {\r
+                    g.drawString(row.annotations[column].displayCharacter, x+charOffset,\r
+                        y + iconOffset + 3);\r
+                    }\r
               }\r
 \r
               if (row.hasIcons)\r
               {\r
                   if (!validRes ||\r
-                          (row.annotations[j].secondaryStructure != lastSS[i]))\r
+                          (row.annotations[column].secondaryStructure != lastSS))\r
                   {\r
-                      switch (lastSS[i])\r
+                      switch (lastSS)\r
                       {\r
                       case 'H':\r
-                          g.setColor(HELIX_COLOUR);\r
-                          g.fillRoundRect(lastSSX[i], y + 4 + iconOffset,\r
-                              x - lastSSX[i], 7, 8, 8);\r
-\r
-                          break;\r
+                        g.setColor(HELIX_COLOUR);\r
+                        int sCol = (lastSSX / av.charWidth) + startRes;\r
+                        int x1 = lastSSX;\r
+                        int x2 = x;\r
+\r
+                       if(row.annotations[sCol-1]==null ||\r
+                          row.annotations[sCol-1].secondaryStructure!='H')\r
+                       {\r
+                         g.fillArc(lastSSX, y+4+iconOffset, av.charWidth, 8, 90,180) ;\r
+                         x1 += av.charWidth/2;\r
+                       }\r
+\r
+                        if(row.annotations[column]==null ||\r
+                           row.annotations[column].secondaryStructure!='H')\r
+                        {\r
+                          g.fillArc(x-av.charWidth, y+4+iconOffset, av.charWidth, 8, 270,180);\r
+                          x2 -= av.charWidth/2;\r
+                        }\r
+\r
+                        g.fillRect(x1, y+4+iconOffset, x2-x1, 8);\r
+                            break;\r
 \r
                       case 'E':\r
                           g.setColor(SHEET_COLOUR);\r
-                          g.fillRect(lastSSX[i], y + 4 + iconOffset,\r
-                              x - lastSSX[i] - 4, 7);\r
+                          g.fillRect(lastSSX, y + 4 + iconOffset,\r
+                              x - lastSSX - 4, 7);\r
                           g.fillPolygon(new int[] { x - 4, x - 4, x },\r
                               new int[]\r
                               {\r
@@ -425,38 +428,59 @@ public class AnnotationPanel
 \r
                       default:\r
                           g.setColor(Color.gray);\r
-                          g.fillRect(lastSSX[i], y + 6 + iconOffset,\r
-                              x - lastSSX[i], 2);\r
+                          g.fillRect(lastSSX, y + 6 + iconOffset,\r
+                              x - lastSSX, 2);\r
 \r
                           break;\r
                       }\r
 \r
                       if (validRes)\r
                       {\r
-                          lastSS[i] = row.annotations[j].secondaryStructure;\r
+                          lastSS = row.annotations[column].secondaryStructure;\r
                       }\r
                       else\r
                       {\r
-                          lastSS[i] = ' ';\r
+                          lastSS = ' ';\r
                       }\r
 \r
-                      lastSSX[i] = x;\r
+                      lastSSX = x;\r
                   }\r
               }\r
+\r
+\r
+          column++;\r
           }\r
 \r
           x += av.charWidth;\r
 \r
           if (row.hasIcons)\r
           {\r
-              switch (lastSS[i])\r
+              switch (lastSS)\r
               {\r
               case 'H':\r
-                  g.setColor(HELIX_COLOUR);\r
-                  g.fillRoundRect(lastSSX[i], y + 4 + iconOffset,\r
-                      x - lastSSX[i], 7, 8, 8);\r
+                g.setColor(HELIX_COLOUR);\r
 \r
-                  break;\r
+                int sCol = (lastSSX / av.charWidth) + startRes;\r
+                int x1 = lastSSX;\r
+                int x2 = x;\r
+\r
+               if(row.annotations[sCol-1]==null ||\r
+                  row.annotations[sCol-1].secondaryStructure!='H')\r
+               {\r
+                 g.fillArc(lastSSX, y+4+iconOffset, av.charWidth, 8, 90,180) ;\r
+                 x1 += av.charWidth/2;\r
+               }\r
+\r
+                if(row.annotations[column]==null ||\r
+                   row.annotations[column].secondaryStructure!='H')\r
+                {\r
+                  g.fillArc(x-av.charWidth, y+4+iconOffset, av.charWidth, 8, 270,180);\r
+                  x2 -= av.charWidth/2;\r
+                }\r
+\r
+                g.fillRect(x1, y+4+iconOffset, x2-x1, 8);\r
+\r
+                    break;\r
 \r
               case 'E':\r
                   g.setColor(SHEET_COLOUR);\r
@@ -464,8 +488,8 @@ public class AnnotationPanel
                   if (row.annotations.length > endRes\r
                       && row.annotations[endRes].secondaryStructure != 'E')\r
                   {\r
-                    g.fillRect(lastSSX[i], y + 4 + iconOffset,\r
-                               x - lastSSX[i] - 4, 7);\r
+                    g.fillRect(lastSSX, y + 4 + iconOffset,\r
+                               x - lastSSX - 4, 7);\r
                     g.fillPolygon(new int[]\r
                                   {x - 4, x - 4, x},\r
                                   new int[]\r
@@ -475,17 +499,15 @@ public class AnnotationPanel
                     }, 3);\r
                   }\r
                   else\r
-                    g.fillRect(lastSSX[i], y + 4 + iconOffset,\r
-                               x - lastSSX[i], 7);\r
+                    g.fillRect(lastSSX, y + 4 + iconOffset,\r
+                               x - lastSSX, 7);\r
 \r
                   break;\r
 \r
-              case 'C':\r
-                  break;\r
 \r
               default:\r
                   g.setColor(Color.gray);\r
-                  g.fillRect(lastSSX[i], y + 6 + iconOffset, x - lastSSX[i], 2);\r
+                  g.fillRect(lastSSX, y + 6 + iconOffset, x - lastSSX, 2);\r
 \r
                   break;\r
               }\r