formatting
[jalview.git] / src / jalview / gui / AnnotationPanel.java
index dbc1c92..0f6901d 100755 (executable)
@@ -49,6 +49,7 @@ public class AnnotationPanel extends JPanel implements MouseListener,
     AlignmentPanel ap;\r
     int activeRow = -1;\r
     BufferedImage image;\r
+    BufferedImage fadedImage;\r
     Graphics2D gg;\r
     FontMetrics fm;\r
     int imgWidth = 0;\r
@@ -107,7 +108,6 @@ public class AnnotationPanel extends JPanel implements MouseListener,
     public int adjustPanelHeight()\r
     {\r
         // setHeight of panels\r
-        image = null;\r
         AlignmentAnnotation[] aa = av.alignment.getAlignmentAnnotation();\r
         int height = 0;\r
 \r
@@ -167,6 +167,15 @@ public class AnnotationPanel extends JPanel implements MouseListener,
         AlignmentAnnotation[] aa = av.alignment.getAlignmentAnnotation();\r
         Annotation[] anot = aa[activeRow].annotations;\r
 \r
+        if (anot.length < av.getColumnSelection().getMax())\r
+        {\r
+          Annotation[] temp = new Annotation[av.getColumnSelection().getMax()+2 ];\r
+          System.arraycopy(anot, 0, temp, 0, anot.length);\r
+          anot = temp;\r
+          aa[activeRow].annotations = anot;\r
+        }\r
+\r
+\r
         if (evt.getActionCommand().equals(REMOVE))\r
         {\r
             for (int i = 0; i < av.getColumnSelection().size(); i++)\r
@@ -279,7 +288,6 @@ public class AnnotationPanel extends JPanel implements MouseListener,
     public void mousePressed(MouseEvent evt)\r
     {\r
 \r
-\r
         AlignmentAnnotation[] aa = av.alignment.getAlignmentAnnotation();\r
         if(aa==null)\r
           return;\r
@@ -349,6 +357,9 @@ public class AnnotationPanel extends JPanel implements MouseListener,
 \r
         int res = (evt.getX() / av.getCharWidth()) + av.getStartRes();\r
 \r
+        if(av.hasHiddenColumns)\r
+          res = av.getColumnSelection().adjustForHiddenColumns(res);\r
+\r
         min = res;\r
         max = res;\r
 \r
@@ -430,6 +441,9 @@ public class AnnotationPanel extends JPanel implements MouseListener,
 \r
         int res = (evt.getX() / av.getCharWidth()) + av.getStartRes();\r
 \r
+        if(av.hasHiddenColumns)\r
+          res = av.getColumnSelection().adjustForHiddenColumns(res);\r
+\r
         SequenceGroup sg = av.getSelectionGroup();\r
 \r
         if (res < min)\r
@@ -487,6 +501,7 @@ public class AnnotationPanel extends JPanel implements MouseListener,
 \r
         if (aa == null)\r
         {\r
+          this.setToolTipText(null);\r
             return;\r
         }\r
 \r
@@ -508,12 +523,20 @@ public class AnnotationPanel extends JPanel implements MouseListener,
             }\r
         }\r
 \r
+        if(row==-1)\r
+       {\r
+         this.setToolTipText(null);\r
+         return;\r
+       }\r
+\r
         int res = (evt.getX() / av.getCharWidth()) + av.getStartRes();\r
 \r
         if(av.hasHiddenColumns)\r
           res = av.getColumnSelection().adjustForHiddenColumns(res);\r
 \r
-        if (row > -1 && res<aa[row].annotations.length)\r
+        if ( aa[row].annotations!=null\r
+             && row > -1\r
+             && res < (int) aa[row].annotations.length)\r
         {\r
             if(aa[row].graphGroup>-1)\r
             {\r
@@ -529,18 +552,23 @@ public class AnnotationPanel extends JPanel implements MouseListener,
                 this.setToolTipText(tip.toString() + "</html>");\r
               }\r
             }\r
-            else if(aa[row].annotations[res] != null)\r
+            else if(aa[row].annotations[res] != null\r
+                    && aa[row].annotations[res].description!=null)\r
               this.setToolTipText(aa[row].annotations[res].description);\r
 \r
             if(aa[row].annotations[res]!=null)\r
             {\r
               StringBuffer text = new StringBuffer("Sequence position " +\r
-                                                   (res + 1) + "  " +\r
-                                                   aa[row].annotations[res].description);\r
+                                                   (res + 1));\r
+\r
+              if (aa[row].annotations[res].description != null)\r
+                text.append("  " + aa[row].annotations[res].description);\r
 \r
               ap.alignFrame.statusBar.setText(text.toString());\r
             }\r
         }\r
+        else\r
+          this.setToolTipText(null);\r
     }\r
 \r
     /**\r
@@ -587,6 +615,8 @@ public class AnnotationPanel extends JPanel implements MouseListener,
 \r
         gg.setFont(av.getFont());\r
         fm = gg.getFontMetrics();\r
+        gg.setColor(Color.white);\r
+        gg.fillRect(0, 0, imgWidth, image.getHeight());\r
       }\r
 \r
 \r
@@ -601,9 +631,12 @@ public class AnnotationPanel extends JPanel implements MouseListener,
      */\r
     public void fastPaint(int horizontal)\r
     {\r
-        if ((horizontal == 0) || gg==null ||\r
-                (av.alignment.getAlignmentAnnotation() == null) ||\r
-                (av.alignment.getAlignmentAnnotation().length < 1))\r
+        if ((horizontal == 0)\r
+            || gg==null\r
+            || av.alignment.getAlignmentAnnotation()==null\r
+            || av.alignment.getAlignmentAnnotation().length < 1\r
+            || av.updatingConsensus\r
+            || av.updatingConservation)\r
         {\r
             repaint();\r
             return;\r
@@ -646,14 +679,49 @@ public class AnnotationPanel extends JPanel implements MouseListener,
      */\r
     public void drawComponent(Graphics g, int startRes, int endRes)\r
     {\r
-      g.setFont(av.getFont());\r
+      if(av.updatingConsensus || av.updatingConservation)\r
+      {\r
+        if(image==null)\r
+         {\r
+           return;\r
+         }\r
+        //We'll keep a record of the old image,\r
+        //and draw a faded image until the calculation\r
+        //has completed\r
+        if(fadedImage==null\r
+           || fadedImage.getWidth()!=imgWidth\r
+        || fadedImage.getHeight()!=image.getHeight())\r
+        {\r
+          fadedImage = new BufferedImage(\r
+              imgWidth, image.getHeight(),\r
+              BufferedImage.TYPE_INT_RGB);\r
+\r
+          Graphics2D fadedG = (Graphics2D) fadedImage.getGraphics();\r
+\r
+          fadedG.setColor(Color.white);\r
+        fadedG.fillRect(0, 0, imgWidth, image.getHeight());\r
 \r
+          fadedG.setComposite(\r
+              AlphaComposite.getInstance(\r
+                  AlphaComposite.SRC_OVER, .3f));\r
+          fadedG.drawImage(image, 0, 0, this);\r
+\r
+        }\r
+\r
+      }\r
+      else\r
+        fadedImage = null;\r
+\r
+\r
+      g.setColor(Color.white);\r
+      g.fillRect(0, 0, (endRes - startRes) * av.charWidth, getHeight());\r
+\r
+      g.setFont(av.getFont());\r
       if (fm == null)\r
         fm = g.getFontMetrics();\r
 \r
 \r
-        g.setColor(Color.white);\r
-        g.fillRect(0, 0, (endRes - startRes) * av.charWidth, getHeight());\r
+\r
 \r
         if ( (av.alignment.getAlignmentAnnotation() == null) ||\r
                 (av.alignment.getAlignmentAnnotation().length < 1))\r
@@ -708,24 +776,41 @@ public class AnnotationPanel extends JPanel implements MouseListener,
                 }\r
             }\r
 \r
-            if (av.updatingConsensus && aa[i].label.equals("Consensus"))\r
+            if (av.updatingConsensus && aa[i]==av.consensus)\r
             {\r
-              g.setColor(Color.darkGray);\r
-              g.drawString("Recalculating Consensus....", 20, y - 5);\r
               y += av.charHeight;\r
+\r
+              g.drawImage(fadedImage,\r
+              0,y-row.height,imgWidth, y,\r
+              0,y-row.height,imgWidth, y, this);\r
+              g.setColor(Color.black);\r
+             // g.drawString("Calculating Consensus....",20, y-row.height/2);\r
+\r
               continue;\r
             }\r
             else if (av.updatingConservation && aa[i].label.equals("Conservation"))\r
             {\r
-              g.setColor(Color.darkGray);\r
-              g.drawString("Recalculating Conservation.....", 20, y - 5);\r
+\r
               y += av.charHeight;\r
+              g.drawImage(fadedImage,\r
+                          0, y - row.height, imgWidth, y,\r
+                          0, y - row.height, imgWidth, y, this);\r
+\r
+              g.setColor(Color.black);\r
+            //  g.drawString("Calculating Conservation.....",20, y-row.height/2);\r
+\r
               continue;\r
             }\r
             else if (av.updatingConservation && aa[i].label.equals("Quality"))\r
             {\r
-              g.setColor(Color.darkGray);\r
-              g.drawString("Recalculating Quality....", 20, y - 5);\r
+\r
+              y += av.charHeight;\r
+              g.drawImage(fadedImage,\r
+                          0, y - row.height, imgWidth, y,\r
+                          0, y - row.height, imgWidth, y, this);\r
+              g.setColor(Color.black);\r
+             /// g.drawString("Calculating Quality....",20, y-row.height/2);\r
+\r
               continue;\r
             }\r
 \r
@@ -968,7 +1053,6 @@ public class AnnotationPanel extends JPanel implements MouseListener,
 \r
                 default:\r
                   g.setColor(Color.gray);\r
-                  if(!av.wrapAlignment || endRes==av.endRes)\r
                   g.fillRect(lastSSX, y + 6 + iconOffset,\r
                              (x*av.charWidth) - lastSSX, 2);\r
 \r
@@ -1192,13 +1276,16 @@ public class AnnotationPanel extends JPanel implements MouseListener,
 \r
       for (int j = sRes; j < eRes; j++)\r
       {\r
+        if (aa.annotations[j] != null)\r
+        {\r
           g.setColor(aa.annotations[j].colour);\r
 \r
-          height = (int) ((aa.annotations[j].value / aa.graphMax) * y);\r
-          if(height>y)\r
+          height = (int) ( (aa.annotations[j].value / aa.graphMax) * y);\r
+          if (height > y)\r
             height = y;\r
 \r
           g.fillRect(x, y - height, av.charWidth, height);\r
+        }\r
           x += av.charWidth;\r
       }\r
     }\r