Merge branch 'develop' into features/hmmer
[jalview.git] / src / jalview / io / FileLoader.java
index 26641b1..977cc12 100755 (executable)
@@ -29,6 +29,9 @@ import jalview.bin.Jalview;
 import jalview.datamodel.AlignmentI;
 import jalview.datamodel.HiddenColumns;
 import jalview.datamodel.PDBEntry;
+import jalview.datamodel.Profile;
+import jalview.datamodel.Profiles;
+import jalview.datamodel.SequenceGroup;
 import jalview.datamodel.SequenceI;
 import jalview.gui.AlignFrame;
 import jalview.gui.AlignViewport;
@@ -199,6 +202,32 @@ public class FileLoader implements Runnable
     return alignFrame;
   }
 
+  public void LoadFileOntoAlignmentWaitTillLoaded(AlignViewport viewport,
+          String file, DataSourceType sourceType, FileFormatI format)
+  {
+    this.viewport = viewport;
+    this.file = file;
+    this.protocol = sourceType;
+    this.format = format;
+    _LoadAlignmentFileWaitTillLoaded();
+  }
+
+  protected void _LoadAlignmentFileWaitTillLoaded()
+  {
+    Thread loader = new Thread(this);
+    loader.start();
+
+    while (loader.isAlive())
+    {
+      try
+      {
+        Thread.sleep(500);
+      } catch (Exception ex)
+      {
+      }
+    }
+  }
+
   public void updateRecentlyOpened()
   {
     Vector recent = new Vector();
@@ -394,6 +423,42 @@ public class FileLoader implements Runnable
             }
             // append to existing alignment
             viewport.addAlignment(al, title);
+            if (source instanceof HMMFile)
+            {
+              AlignmentI alignment = viewport.getAlignment();
+              SequenceI seq = alignment
+                      .getSequenceAt(alignment.getAbsoluteHeight() - 1);
+              alignment.deleteSequence(alignment.getAbsoluteHeight() - 1);
+              SequenceGroup sg = viewport.getSelectionGroup();
+              if (sg != null)
+              {
+                seq.insertCharAt(0, sg.getStartRes(), '-');
+                seq.insertCharAt(sg.getEndRes() + 1,
+                        alignment.getWidth() - sg.getEndRes(), '-');
+                SequenceI topSeq = sg.getSequencesInOrder(alignment)[0];
+                int topIndex = alignment.findIndex(topSeq);
+                alignment.insertSequenceAt(topIndex, seq);
+                sg.setSeqrep(seq);
+                viewport.getSelectionGroup().addSequence(seq, false);
+              }
+              else
+              {
+                alignment.insertSequenceAt(0, seq);
+              }
+              viewport.initInformation();
+              viewport.setSequenceInformationHash(
+                      new Profiles(new Profile[1]), 0);
+              viewport.updateInformation(viewport.getAlignPanel());
+              viewport.getAlignPanel().adjustAnnotationHeight();
+              viewport.updateSequenceIdColours();
+              if (viewport.getAlignPanel().alignFrame
+                      .getSelectedHMM() == null)
+              {
+                viewport.getAlignPanel().alignFrame
+                        .setSelectedHMM(seq.getHMM());
+              }
+
+            }
           }
           else
           {