JAL-1517 update copyright to version 2.8.2
[jalview.git] / src / jalview / renderer / AnnotationRenderer.java
index a589d90..1c125a6 100644 (file)
@@ -1,6 +1,6 @@
 /*
- * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8)
- * Copyright (C) 2012 J Procter, AM Waterhouse, LM Lui, J Engelhardt, G Barton, M Clamp, S Searle
+ * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8.2)
+ * Copyright (C) 2014 The Jalview Authors
  * 
  * This file is part of Jalview.
  * 
@@ -14,6 +14,7 @@
  * PURPOSE.  See the GNU General Public License for more details.
  * 
  * You should have received a copy of the GNU General Public License along with Jalview.  If not, see <http://www.gnu.org/licenses/>.
+ * The Jalview Authors are detailed in the 'AUTHORS' file.
  */
 package jalview.renderer;
 
@@ -184,7 +185,7 @@ public class AnnotationRenderer
     int sCol = (lastSSX / charWidth) + startRes;
     int x1 = lastSSX;
     int x2 = (x * charWidth);
-    Regex closeparen = new Regex("}|]|<|a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z");
+    Regex closeparen = new Regex("}|]|<|[a-z]");
     
     String dc = (column == 0 || row_annotations[column - 1] == null) ? ""
             : row_annotations[column - 1].displayCharacter;
@@ -364,6 +365,7 @@ public class AnnotationRenderer
     updateFromAwtRenderPanel(annotPanel, av);
     fm = g.getFontMetrics();
     AlignmentAnnotation[] aa = av.getAlignment().getAlignmentAnnotation();
+    int temp = 0;
     if (aa==null)
     {
       return false;
@@ -648,267 +650,47 @@ public class AnnotationRenderer
                
              }
            }
-           if (ss == 'A')
+           if (ss >=65)
            {
              // distinguish between forward/backward base-pairing
-             if (row_annotations[column].displayCharacter.indexOf('a') > -1)
+             if (row_annotations[column].displayCharacter.indexOf(ss+32) > -1)
              {
-               ss = 'a';
               
+               ss = (char) (ss+32);
                
-             }
-           }
-           
-           if (ss == 'B')
-           {
-             // distinguish between forward/backward base-pairing
-             if (row_annotations[column].displayCharacter.indexOf('b') > -1)
-             {
-               ss = 'b';
                
              }
            }
            
-           if (ss == 'C')
-           {
-             // distinguish between forward/backward base-pairing
-             if (row_annotations[column].displayCharacter.indexOf('c') > -1)
-             {
-               ss = 'c';
-               
-             }
-           }
-           if (ss == 'D')
-           {
-             // distinguish between forward/backward base-pairing
-             if (row_annotations[column].displayCharacter.indexOf('d') > -1)
-             {
-               ss = 'd';
-               
-             }
-           }
-           if (ss == '1')
-           {
-             // distinguish between forward/backward base-pairing
-             if (row_annotations[column].displayCharacter.indexOf('e') > -1)
-             {
-               ss = 'e';
-               
-             }
-           }
-           if (ss == 'F')
-           {
-             // distinguish between forward/backward base-pairing
-             if (row_annotations[column].displayCharacter.indexOf('f') > -1)
-             {
-               ss = 'f';
-               
-             }
-           }
-           if (ss == 'G')
-           {
-             // distinguish between forward/backward base-pairing
-             if (row_annotations[column].displayCharacter.indexOf('g') > -1)
-             {
-               ss = 'g';
-               
-             }
-           }
-           if (ss == '2')
-           {
-             // distinguish between forward/backward base-pairing
-             if (row_annotations[column].displayCharacter.indexOf('h') > -1)
-             {
-               ss = 'h';
-               
-             }
-           }
-           if (ss == 'I')
-           {
-             // distinguish between forward/backward base-pairing
-             if (row_annotations[column].displayCharacter.indexOf('i') > -1)
-             {
-               ss = 'i';
-               
-             }
-           }
-           if (ss == 'J')
-           {
-             // distinguish between forward/backward base-pairing
-             if (row_annotations[column].displayCharacter.indexOf('j') > -1)
-             {
-               ss = 'j';
-               
-             }
-           }
-           if (ss == 'K')
-           {
-             // distinguish between forward/backward base-pairing
-             if (row_annotations[column].displayCharacter.indexOf('k') > -1)
-             {
-               ss = 'k';
                
-             }
-           }
-           if (ss == 'L')
-           {
-             // distinguish between forward/backward base-pairing
-             if (row_annotations[column].displayCharacter.indexOf('l') > -1)
-             {
-               ss = 'l';
-               
-             }
-           }
-           if (ss == 'M')
-           {
-             // distinguish between forward/backward base-pairing
-             if (row_annotations[column].displayCharacter.indexOf('m') > -1)
-             {
-               ss = 'm';
-               
-             }
-           }
-           if (ss == 'N')
-           {
-             // distinguish between forward/backward base-pairing
-             if (row_annotations[column].displayCharacter.indexOf('n') > -1)
-             {
-               ss = 'n';
-               
-             }
-           }
-           if (ss == 'O')
-           {
-             // distinguish between forward/backward base-pairing
-             if (row_annotations[column].displayCharacter.indexOf('o') > -1)
-             {
-               ss = 'o';
-               
-             }
-           }
-           if (ss == 'P')
-           {
-             // distinguish between forward/backward base-pairing
-             if (row_annotations[column].displayCharacter.indexOf('p') > -1)
-             {
-               ss = 'p';
-               
-             }
-           }
-           if (ss == 'Q')
-           {
-             // distinguish between forward/backward base-pairing
-             if (row_annotations[column].displayCharacter.indexOf('q') > -1)
-             {
-               ss = 'q';
-               
-             }
-           }
-           if (ss == 'R')
-           {
-             // distinguish between forward/backward base-pairing
-             if (row_annotations[column].displayCharacter.indexOf('r') > -1)
-             {
-               ss = 'r';
-               
-             }
-           }
-           if (ss == 'S')
-           {
-             // distinguish between forward/backward base-pairing
-             if (row_annotations[column].displayCharacter.indexOf('s') > -1)
-             {
-               ss = 's';
-               
-             }
-           }
-           if (ss == 'T')
-           {
-             // distinguish between forward/backward base-pairing
-             if (row_annotations[column].displayCharacter.indexOf('t') > -1)
-             {
-               ss = 't';
-               
-             }
-           }
-           if (ss == 'U')
-           {
-             // distinguish between forward/backward base-pairing
-             if (row_annotations[column].displayCharacter.indexOf('u') > -1)
-             {
-               ss = 'u';
-               
-             }
-           }
-           if (ss == 'V')
-           {
-             // distinguish between forward/backward base-pairing
-             if (row_annotations[column].displayCharacter.indexOf('v') > -1)
+          if (!validRes || (ss != lastSS))
              {
-               ss = 'v';
                
-             }
-           }
-           if (ss == 'W')
-           {
-             // distinguish between forward/backward base-pairing
-             if (row_annotations[column].displayCharacter.indexOf('w') > -1)
-             {
-               ss = 'w';
                
-             }
-           }
-           if (ss == 'X')
-           {
-             // distinguish between forward/backward base-pairing
-             if (row_annotations[column].displayCharacter.indexOf('x') > -1)
+            if (x > -1)
              {
-               ss = 'x';
                
-             }
-           }
-           if (ss == 'Y')
-           {
-             // distinguish between forward/backward base-pairing
-             if (row_annotations[column].displayCharacter.indexOf('y') > -1)
-             {
-               ss = 'y';
                
-             }
-           }
-           if (ss == 'Z')
-           {
-             // distinguish between forward/backward base-pairing
-             if (row_annotations[column].displayCharacter.indexOf('z') > -1)
+              int nb_annot=x-temp;
+              //System.out.println("\t type :"+lastSS+"\t x :"+x+"\t nbre annot :"+nb_annot);
+              switch (lastSS)
              {
-               ss = 'z';
                
-             }
-           }
-          if (!validRes || (ss != lastSS))
-          {
-            if (x > -1)
-            {
-              switch (lastSS)
-              {
-              case 'H':
-                drawHelixAnnot(g, row_annotations, lastSSX, x, y,
-                        iconOffset, startRes, column, validRes, validEnd);
+              case '$':
+                drawHelixAnnot(g, row_annotations, lastSSX, x, y, iconOffset, startRes,
+                        column, validRes, validEnd);
                 break;
 
-              case 'E':
-                drawSheetAnnot(g, row_annotations, lastSSX, x, y,
-                        iconOffset, startRes, column, validRes, validEnd);
+              case '�':
+                drawSheetAnnot(g, row_annotations, lastSSX, x, y, iconOffset, startRes,
+                        column, validRes, validEnd);
                 break;
 
               case '(': // Stem case for RNA secondary structure
               case ')': // and opposite direction
                 drawStemAnnot(g, row_annotations, lastSSX, x, y, iconOffset, startRes,
                         column, validRes, validEnd);
-//              case 'S': // Stem case for RNA secondary structure
-//              case 's': // and opposite direction
-//                drawStemAnnot(g, row_annotations, lastSSX, x, y,
-//                        iconOffset, startRes, column, validRes, validEnd);
+                temp=x;
                 break;
               case '{':
               case '}':
@@ -924,13 +706,13 @@ public class AnnotationRenderer
               case 'c':
               case 'D':
               case 'd':
-              case '1':
+              case 'E':
               case 'e':
               case 'F':
               case 'f':
               case 'G':
               case 'g':
-              case '2':
+              case 'H':
               case 'h':
               case 'I':
               case 'i':
@@ -968,16 +750,17 @@ public class AnnotationRenderer
               case 'y':
               case 'Z':
               case 'z':
-                 //System.out.println(lastSS);
+                 
                  Color nonCanColor= getNotCanonicalColor(lastSS);
                  drawNotCanonicalAnnot(g, nonCanColor, row_annotations, lastSSX, x, y, iconOffset, startRes,
                           column, validRes, validEnd);
+                 temp=x;
                  break;
               default:
                 g.setColor(Color.gray);
                 g.fillRect(lastSSX, y + 6 + iconOffset, (x * charWidth)
                         - lastSSX, 2);
-
+                temp=x;
                 break;
               }
             }
@@ -1023,19 +806,21 @@ public class AnnotationRenderer
       {
         switch (lastSS)
         {
-        case 'H':
-          drawHelixAnnot(g, row_annotations, lastSSX, x, y, iconOffset,
-                  startRes, column, validRes, validEnd);
+        case '$':
+          drawHelixAnnot(g, row_annotations, lastSSX, x, y, iconOffset, startRes,
+                  column, validRes, validEnd);
           break;
 
-        case 'E':
-          drawSheetAnnot(g, row_annotations, lastSSX, x, y, iconOffset,
-                  startRes, column, validRes, validEnd);
+        case '�':
+          drawSheetAnnot(g, row_annotations, lastSSX, x, y, iconOffset, startRes,
+                  column, validRes, validEnd);
           break;
         case 's':
         case 'S': // Stem case for RNA secondary structure
-          drawStemAnnot(g, row_annotations, lastSSX, x, y, iconOffset,
-                  startRes, column, validRes, validEnd);
+               
+          drawStemAnnot(g, row_annotations, lastSSX, x, y, iconOffset, startRes,
+                  column, validRes, validEnd);
+          
           break;
         case '{':
         case '}':
@@ -1051,13 +836,13 @@ public class AnnotationRenderer
         case 'c':
         case 'D':
         case 'd':
-        case '1':
+        case 'E':
         case 'e':
         case 'F':
         case 'f':
         case 'G':
         case 'g':
-        case '2':
+        case 'H':
         case 'h':
         case 'I':
         case 'i':
@@ -1099,8 +884,8 @@ public class AnnotationRenderer
                     column, validRes, validEnd);
          break;
         default:
-          drawGlyphLine(g, row_annotations, lastSSX, x, y, iconOffset,
-                  startRes, column, validRes, validEnd);
+          drawGlyphLine(g, row_annotations, lastSSX, x, y, iconOffset, startRes,
+                  column, validRes, validEnd);
           break;
         }
       }
@@ -1138,8 +923,8 @@ public class AnnotationRenderer
             {
               if (aa[gg].graphGroup == row.graphGroup)
               {
-                drawLineGraph(g, aa[gg], aa[gg].annotations, startRes,
-                        endRes, y, groupmin, groupmax, row.graphHeight);
+                drawLineGraph(g, aa[gg], aa[gg].annotations, startRes, endRes, y, groupmin,
+                        groupmax, row.graphHeight);
               }
             }
 
@@ -1147,8 +932,8 @@ public class AnnotationRenderer
           }
           else
           {
-            drawLineGraph(g, row, row_annotations, startRes, endRes, y,
-                    row.graphMin, row.graphMax, row.graphHeight);
+            drawLineGraph(g, row, row_annotations, startRes, endRes, y, row.graphMin,
+                    row.graphMax, row.graphHeight);
           }
         }
         else if (row.graph == AlignmentAnnotation.BAR_GRAPH)
@@ -1207,17 +992,18 @@ public class AnnotationRenderer
   
   private  Color sdNOTCANONICAL_COLOUR;
 
-  public void drawGlyphLine(Graphics g, Annotation[] row, int lastSSX,
-          int x, int y, int iconOffset, int startRes, int column,
-          boolean validRes, boolean validEnd)
+  public void drawGlyphLine(Graphics g, Annotation[] row,
+          int lastSSX, int x, int y, int iconOffset, int startRes,
+          int column, boolean validRes, boolean validEnd)
   {
     g.setColor(GLYPHLINE_COLOR);
     g.fillRect(lastSSX, y + 6 + iconOffset, (x * charWidth) - lastSSX, 2);
   }
 
-  public void drawSheetAnnot(Graphics g, Annotation[] row, int lastSSX,
-          int x, int y, int iconOffset, int startRes, int column,
-          boolean validRes, boolean validEnd)
+  public void drawSheetAnnot(Graphics g, Annotation[] row,
+
+          int lastSSX, int x, int y, int iconOffset, int startRes,
+          int column, boolean validRes, boolean validEnd)
   {
     g.setColor(SHEET_COLOUR);
 
@@ -1578,122 +1364,122 @@ public class AnnotationRenderer
       {
          case '{':  
              case '}':
-                 return Color.cyan;
+                 return new Color(255,125,5);
                 
              case '[':
              case ']':
-                 return Color.green;
+                 return new Color(245,115,10);
                 
              case '>':
              case '<':
-                 return Color.magenta;
+                 return new Color(235,135,15);
                  
              case 'A':
              case 'a':
-                 return Color.orange;
+                 return new Color(225,105,20);
                
              case 'B':
              case 'b':
-                 return Color.pink;
+                 return new Color(215,145,30);
                  
              case 'C':
              case 'c':
-                 return Color.red;
+                 return new Color(205,95,35);
                 
              case 'D':
              case 'd':
-                 return Color.yellow;
+                 return new Color(195,155,45);
                  
-             case '1':
+             case 'E':
              case 'e':
-                 return Color.black;
+                 return new Color(185,85,55);
                 
              case 'F':
              case 'f':
-                 return Color.darkGray;
+                 return new Color(175,165,65);
                 
              case 'G':
              case 'g':
-                 return Color.gray;
+                 return new Color(170,75,75);
                
-             case '2':
+             case 'H':
              case 'h':
-                 return Color.lightGray;
+                 return new Color(160,175,85);
                  
              case 'I':
              case 'i':
-                 return Color.white;
+                 return new Color(150,65,95);
                 
              case 'J':
              case 'j':
-                 return Color.cyan;
+                 return new Color(140,185,105);
                  
              case 'K':
              case 'k':
-                 return Color.magenta;
+                 return new Color(130,55,110);
                
              case 'L':
              case 'l':
-                 return Color.orange;
+                 return new Color(120,195,120);
        
              case 'M':
              case 'm':
-                 return Color.red;
+                 return new Color(110,45,130);
                
              case 'N':
              case 'n':
-                 return Color.yellow;
+                 return new Color(100,205,140);
                  
              case 'O':
              case 'o':
-                 return Color.pink;
+                 return new Color(90,35,150);
                
              case 'P':
              case 'p':
-                 return Color.black;
+                 return new Color(85,215,160);
                
              case 'Q':
              case 'q':
-                 return Color.blue;
+                 return new Color(75,25,170);
        
              case 'R':
              case 'r':
-                 return Color.cyan;
+                 return new Color(65,225,180);
        
              case 'S':
              case 's':
-                 return Color.magenta;
+                 return new Color(55,15,185);
                
              case 'T':
              case 't':
-                 return Color.darkGray;
+                 return new Color(45,235,195);
                 
              case 'U':
              case 'u':
-                 return Color.yellow;
+                 return new Color(35,5,205);
                  
              case 'V':
              case 'v':
-                 return Color.blue;
+                 return new Color(25,245,215);
                 
              case 'W':
              case 'w':
-                 return Color.orange;
+                 return new Color(15,0,225);
                  
              case 'X':
              case 'x':
-                 return Color.magenta;
+                 return new Color(10,255,235);
                 
              case 'Y':
              case 'y':
-                 return Color.blue;
+                 return new Color(5,150,245);
                  
              case 'Z':
              case 'z':
-                 return Color.blue;
+                 return new Color(0,80,255);
                 
        default :
-               System.out.println("This is not a interaction");
+               System.out.println("This is not a interaction : "+lastss);
                return null;
                
       }