Sequence is char []
[jalview.git] / src / jalview / gui / IdCanvas.java
index 84f18ba..9fcbb6e 100755 (executable)
@@ -43,6 +43,9 @@ public class IdCanvas extends JPanel
     int imgHeight = 0;\r
     boolean fastPaint = false;\r
     java.util.Vector searchResults;\r
+    FontMetrics fm;\r
+    AnnotationLabels labels = null;\r
+    AnnotationPanel ap;\r
 \r
     /**\r
      * Creates a new IdCanvas object.\r
@@ -67,6 +70,8 @@ public class IdCanvas extends JPanel
      */\r
     public void drawIdString(Graphics2D gg, SequenceI s, int i, int starty, int ypos)\r
     {\r
+        int xPos = 0;\r
+        int panelWidth = getWidth();\r
         int charHeight = av.charHeight;\r
 \r
         if ((searchResults != null) && searchResults.contains(s))\r
@@ -86,15 +91,21 @@ public class IdCanvas extends JPanel
         }\r
         else\r
         {\r
-            gg.setColor(s.getColor());\r
+            gg.setColor(av.getSequenceColour(s));\r
             gg.fillRect(0, ((i - starty) * charHeight) + ypos, getWidth(),\r
                 charHeight);\r
             gg.setColor(Color.black);\r
         }\r
 \r
+        if (av.rightAlignIds)\r
+        {\r
+          xPos = panelWidth - fm.stringWidth(\r
+              s.getDisplayId(av.getShowJVSuffix())\r
+              ) - 4;\r
+        }\r
 \r
         gg.drawString( s.getDisplayId(av.getShowJVSuffix()),\r
-                      0, (((i - starty + 1) * charHeight) + ypos) - (charHeight / 5));\r
+                    xPos, (((i - starty + 1) * charHeight) + ypos) - (charHeight / 5));\r
 \r
         if (av.hasHiddenRows && av.showHiddenMarkers)\r
           drawMarker(i, starty, ypos);\r
@@ -190,6 +201,7 @@ public class IdCanvas extends JPanel
         }\r
 \r
         gg = (Graphics2D) image.getGraphics();\r
+\r
         //Fill in the background\r
         gg.setColor(Color.white);\r
         gg.fillRect(0, 0, getWidth(), imgHeight);\r
@@ -211,6 +223,7 @@ public class IdCanvas extends JPanel
                              av.getFont().getSize());\r
 \r
       gg.setFont(italic);\r
+      fm = gg.getFontMetrics();\r
 \r
       if (av.antiAlias)\r
         gg.setRenderingHint(RenderingHints.KEY_ANTIALIASING,\r
@@ -228,13 +241,16 @@ public class IdCanvas extends JPanel
             maxwidth = av.getColumnSelection().findColumnPosition(maxwidth) - 1;\r
 \r
           int annotationHeight = 0;\r
-          AnnotationLabels labels = null;\r
+\r
 \r
           if(av.showAnnotation)\r
           {\r
-            AnnotationPanel ap = new AnnotationPanel(av);\r
+            if (ap == null)\r
+              ap = new AnnotationPanel(av);\r
+\r
             annotationHeight = ap.adjustPanelHeight();\r
-            labels = new AnnotationLabels(av);\r
+            if (labels == null)\r
+              labels = new AnnotationLabels(av);\r
           }\r
 \r
           int hgap = av.charHeight;\r
@@ -266,23 +282,29 @@ public class IdCanvas extends JPanel
                 drawIdString(gg, s, i, 0, ypos);\r
               }\r
 \r
-                if(labels!=null)\r
+                if(labels!=null && av.showAnnotation)\r
                 {\r
                   gg.translate(0, ypos+(alheight * av.charHeight));\r
                   labels.drawComponent(gg, getWidth());\r
                   gg.translate(0, -ypos-(alheight * av.charHeight));\r
                 }\r
-\r
-\r
             }\r
         }\r
         else\r
         {\r
           //Now draw the id strings\r
+          int panelWidth = getWidth();\r
+          int xPos = 0;\r
 \r
+            SequenceI sequence;\r
             //Now draw the id strings\r
             for (int i = starty; i < endy; i++)\r
             {\r
+              sequence = av.alignment.getSequenceAt(i);\r
+\r
+              if(sequence==null)\r
+                continue;\r
+\r
               if (av.hasHiddenRows)\r
               {\r
                 setHiddenFont(i);\r
@@ -290,21 +312,21 @@ public class IdCanvas extends JPanel
 \r
                 // Selected sequence colours\r
                 if ( (searchResults != null) &&\r
-                    searchResults.contains(av.alignment.getSequenceAt(i)))\r
+                    searchResults.contains(sequence))\r
                 {\r
                   currentColor = Color.black;\r
                   currentTextColor = Color.white;\r
                 }\r
                 else if ( (av.getSelectionGroup() != null) &&\r
                          av.getSelectionGroup().getSequences(false).contains(\r
-                             av.alignment.getSequenceAt(i)))\r
+                             sequence))\r
                 {\r
                   currentColor = Color.lightGray;\r
                   currentTextColor = Color.black;\r
                 }\r
                 else\r
                 {\r
-                  currentColor = av.alignment.getSequenceAt(i).getColor();\r
+                  currentColor = av.getSequenceColour(sequence);\r
                   currentTextColor = Color.black;\r
                 }\r
 \r
@@ -315,9 +337,15 @@ public class IdCanvas extends JPanel
 \r
                 gg.setColor(currentTextColor);\r
 \r
-                String string = av.alignment.getSequenceAt(i).getDisplayId( av.getShowJVSuffix());\r
+                String string = sequence.getDisplayId( av.getShowJVSuffix());\r
 \r
-                gg.drawString(string, 0,\r
+\r
+                if(av.rightAlignIds)\r
+                {\r
+                  xPos = panelWidth - fm.stringWidth(string) - 4;\r
+                }\r
+\r
+                gg.drawString(string, xPos,\r
                     (((i - starty) * av.charHeight) + av.charHeight) -\r
                     (av.charHeight / 5));\r
 \r
@@ -395,7 +423,9 @@ public class IdCanvas extends JPanel
       Font bold = new Font(av.getFont().getName(), Font.BOLD,\r
                            av.getFont().getSize());\r
 \r
-      if (av.alignment.getSequenceAt(i).getHiddenSequences() != null)\r
+\r
+      if (av.alignment.getSequenceAt(i)!=null\r
+          && av.alignment.getSequenceAt(i).getHiddenSequences() != null)\r
         gg.setFont(bold);\r
       else\r
         gg.setFont(italic);\r