FeatureRenderer synchronized featuresAdded method
[jalview.git] / src / jalview / gui / AlignmentPanel.java
index 00f27aa..8e02a9c 100755 (executable)
@@ -32,6 +32,8 @@ import java.io.*;
 \r
 import javax.swing.*;\r
 \r
+import org.biojava.dasobert.eventmodel.*;\r
+\r
 \r
 /**\r
  * DOCUMENT ME!\r
@@ -40,7 +42,7 @@ import javax.swing.*;
  * @version $Revision$\r
  */\r
 public class AlignmentPanel extends GAlignmentPanel\r
-    implements AdjustmentListener, Printable\r
+    implements AdjustmentListener, Printable, FeatureListener\r
 {\r
   public AlignViewport av;\r
   OverviewPanel overviewPanel;\r
@@ -92,11 +94,8 @@ public class AlignmentPanel extends GAlignmentPanel
 \r
     setScrollValues(0, 0);\r
 \r
-    annotationPanel.adjustPanelHeight();\r
-    annotationSpaceFillerHolder.setPreferredSize(annotationPanel.\r
-                                                 getPreferredSize());\r
-    annotationScroller.setPreferredSize(annotationPanel.\r
-                                        getPreferredSize());\r
+    adjustAnnotationHeight();\r
+\r
     setAnnotationVisible(av.getShowAnnotation());\r
 \r
     hscroll.addAdjustmentListener(this);\r
@@ -161,18 +160,15 @@ public class AlignmentPanel extends GAlignmentPanel
             break;\r
 \r
           case KeyEvent.VK_DELETE:\r
-            if(av.cursorMode)\r
-            {\r
-              seqPanel.deleteGapAtCursor(evt.isControlDown() || evt.isShiftDown());\r
-            }\r
-            break;\r
-\r
           case KeyEvent.VK_BACK_SPACE:\r
             if(!av.cursorMode)\r
             {\r
               alignFrame.cut_actionPerformed(null);\r
               seqPanel.seqCanvas.repaint();\r
             }\r
+            else\r
+              seqPanel.deleteGapAtCursor(evt.isControlDown() || evt.isShiftDown());\r
+\r
             break;\r
 \r
           case KeyEvent.VK_S:\r
@@ -249,6 +245,22 @@ public class AlignmentPanel extends GAlignmentPanel
     });\r
   }\r
 \r
+  public void comeBackLater(FeatureEvent evt)\r
+  {}\r
+\r
+  public void newFeatures(FeatureEvent evt)\r
+  {\r
+    if (evt.getFeatures().length > 0)\r
+    {\r
+      seqPanel.seqCanvas.fr.featuresAdded();\r
+      repaint();\r
+    }\r
+    else\r
+    {\r
+      System.out.println("No Features found for "+evt.getDasSource().getNickname());\r
+    }\r
+  }\r
+\r
   /**\r
    * DOCUMENT ME!\r
    */\r
@@ -371,16 +383,21 @@ public class AlignmentPanel extends GAlignmentPanel
       }\r
       else\r
       {\r
-        int cwidth = seqPanel.seqCanvas.getWrappedCanvasWidth(seqPanel.seqCanvas.getWidth());\r
-        if( start<av.getStartRes() || start>(av.getStartRes()+cwidth) )\r
-        {\r
-          vscroll.setValue(start / cwidth);\r
-          av.startRes = vscroll.getValue() * cwidth;\r
-        }\r
+        scrollToWrappedVisible(start);\r
       }\r
     }\r
   }\r
 \r
+  void scrollToWrappedVisible(int res)\r
+  {\r
+    int cwidth = seqPanel.seqCanvas.getWrappedCanvasWidth(seqPanel.seqCanvas.getWidth());\r
+    if( res<=av.getStartRes() || res>=(av.getStartRes()+cwidth) )\r
+    {\r
+      vscroll.setValue(res / cwidth);\r
+      av.startRes = vscroll.getValue() * cwidth;\r
+    }\r
+  }\r
+\r
   /**\r
    * DOCUMENT ME!\r
    *\r
@@ -416,6 +433,37 @@ public class AlignmentPanel extends GAlignmentPanel
     repaint();\r
   }\r
 \r
+  public void adjustAnnotationHeight()\r
+  {\r
+    javax.swing.SwingUtilities.invokeLater(new Runnable()\r
+    {\r
+      public void run()\r
+      {\r
+          while(alignFrame.getHeight()==0)\r
+          {\r
+            Thread.yield();\r
+          }\r
+\r
+        int height = annotationPanel.adjustPanelHeight();\r
+\r
+        if (height > alignFrame.getHeight() / 2)\r
+        {\r
+          height = alignFrame.getHeight() / 2;\r
+        }\r
+\r
+        annotationScroller.setPreferredSize(\r
+            new Dimension(annotationScroller.getWidth(),\r
+                          height));\r
+\r
+        annotationSpaceFillerHolder.setPreferredSize(new Dimension(\r
+            annotationSpaceFillerHolder.getWidth(),\r
+            height));\r
+\r
+        annotationPanel.repaint();\r
+      }\r
+    });\r
+  }\r
+\r
   /**\r
    * DOCUMENT ME!\r
    *\r
@@ -941,7 +989,6 @@ public class AlignmentPanel extends GAlignmentPanel
   {\r
     int height = ( (av.alignment.getHeight() + 1) * av.charHeight) + 30;\r
     int width = idPanel.getWidth() + (av.alignment.getWidth() * av.charWidth);\r
-\r
     if (idPanel.getWidth() == 0)\r
     {\r
       width += calculateIdWidth().getWidth() + 4;\r
@@ -950,7 +997,15 @@ public class AlignmentPanel extends GAlignmentPanel
     if (av.getWrapAlignment())\r
     {\r
       height = getWrappedHeight();\r
-      width = seqPanel.getWidth() + idPanel.getWidth();\r
+      if (System.getProperty("java.awt.headless") != null\r
+          && System.getProperty("java.awt.headless").equals("true"))\r
+      {\r
+        width = alignFrame.getWidth() - 22;\r
+      }\r
+      else\r
+\r
+        width = seqPanel.getWidth() + idPanel.getWidth();\r
+\r
     }\r
     else if (av.getShowAnnotation())\r
     {\r
@@ -1123,9 +1178,9 @@ public class AlignmentPanel extends GAlignmentPanel
                       if (features[f].getDescription() != null && !features[f].getType().equals(features[f].getDescription()))\r
                         text.append(" " + features[f].getDescription());\r
 \r
-                      if (features[f].getStatus() != null && features[f].getStatus().length()>0)\r
+                      if (features[f].getValue("status") != null )\r
                       {\r
-                        text.append(" (" + features[f].getStatus() + ")");\r
+                        text.append(" (" + features[f].getValue("status") + ")");\r
                       }\r
                     }\r
                   }\r
@@ -1153,9 +1208,19 @@ public class AlignmentPanel extends GAlignmentPanel
 \r
   int getWrappedHeight()\r
   {\r
+    int seqPanelWidth = seqPanel.seqCanvas.getWidth();\r
+\r
+    //If headless, seqPanel will have 0 width\r
+    if (System.getProperty("java.awt.headless") != null\r
+              && System.getProperty("java.awt.headless").equals("true"))\r
+    {\r
+      int idWidth = calculateIdWidth().width + 4;\r
+      seqPanelWidth = alignFrame.getWidth() - idWidth;\r
+    }\r
 \r
     int chunkWidth = seqPanel.seqCanvas.getWrappedCanvasWidth(\r
-        seqPanel.seqCanvas.getWidth());\r
+        seqPanelWidth\r
+          );\r
 \r
     int hgap = av.charHeight;\r
     if (av.scaleAboveWrapped)\r