JAL-244 Changes to Annotation labels width now adjusts the overall idWidth if larger...
[jalview.git] / src / jalview / gui / AlignViewport.java
index 30ccdbe..ef9e575 100644 (file)
  */
 package jalview.gui;
 
+import java.awt.Container;
+import java.awt.Dimension;
+import java.awt.Font;
+import java.awt.FontMetrics;
+import java.awt.Rectangle;
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Hashtable;
+import java.util.List;
+
+import javax.swing.JInternalFrame;
+
 import jalview.analysis.AlignmentUtils;
 import jalview.analysis.AnnotationSorter.SequenceAnnotationOrder;
 import jalview.api.AlignViewportI;
@@ -35,11 +47,19 @@ import jalview.datamodel.AlignedCodonFrame;
 import jalview.datamodel.Alignment;
 import jalview.datamodel.AlignmentI;
 import jalview.datamodel.ColumnSelection;
+import jalview.datamodel.ContactMatrixI;
 import jalview.datamodel.HiddenColumns;
 import jalview.datamodel.SearchResults;
 import jalview.datamodel.SearchResultsI;
 import jalview.datamodel.SequenceGroup;
 import jalview.datamodel.SequenceI;
+import jalview.io.AppletFormatAdapter;
+import jalview.io.DataSourceType;
+import jalview.io.FileFormatException;
+import jalview.io.FileFormatI;
+import jalview.io.FileFormats;
+import jalview.io.FileLoader;
+import jalview.io.IdentifyFile;
 import jalview.renderer.ResidueShader;
 import jalview.schemes.ColourSchemeI;
 import jalview.schemes.ColourSchemeProperty;
@@ -53,17 +73,6 @@ import jalview.util.MessageManager;
 import jalview.viewmodel.AlignmentViewport;
 import jalview.ws.params.AutoCalcSetting;
 
-import java.awt.Container;
-import java.awt.Dimension;
-import java.awt.Font;
-import java.awt.FontMetrics;
-import java.awt.Rectangle;
-import java.util.ArrayList;
-import java.util.Hashtable;
-import java.util.List;
-
-import javax.swing.JInternalFrame;
-
 /**
  * DOCUMENT ME!
  * 
@@ -719,12 +728,62 @@ public class AlignViewport extends AlignmentViewport
         al.addSequence(seq);
       }
     }
-
+    for (ContactMatrixI cm : toAdd.getContactMaps())
+    {
+      al.addContactList(cm);
+    }
     ranges.setEndSeq(getAlignment().getHeight() - 1); // BH 2019.04.18
     firePropertyChange("alignment", null, getAlignment().getSequences());
   }
 
   /**
+   * Load a File into this AlignViewport attempting to detect format if not
+   * given or given as null.
+   * 
+   * @param file
+   * @param format
+   */
+  public void addFile(File file, FileFormatI format)
+  {
+    addFile(file, format, true);
+  }
+
+  public void addFile(File file, FileFormatI format, boolean async)
+  {
+    DataSourceType protocol = AppletFormatAdapter.checkProtocol(file);
+
+    if (format == null)
+    {
+      try
+      {
+        format = new IdentifyFile().identify(file, protocol);
+      } catch (FileFormatException e1)
+      {
+        jalview.bin.Console.error("Unknown file format for '" + file + "'");
+      }
+    }
+    else if (FileFormats.getInstance().isIdentifiable(format))
+    {
+      try
+      {
+        format = new IdentifyFile().identify(file, protocol);
+      } catch (FileFormatException e)
+      {
+        jalview.bin.Console.error("Unknown file format for '" + file + "'",
+                e);
+      }
+    }
+
+    new FileLoader().LoadFile(this, file, DataSourceType.FILE, format,
+            async);
+  }
+
+  public void addFile(File file)
+  {
+    addFile(file, null);
+  }
+
+  /**
    * Show a dialog with the option to open and link (cDNA <-> protein) as a new
    * alignment, either as a standalone alignment or in a split frame. Returns
    * true if the new alignment was opened, false if not, because the user
@@ -748,27 +807,12 @@ public class AlignViewport extends AlignmentViewport
      * in reverse order)
      */
     JvOptionPane dialog = JvOptionPane.newOptionDialog(Desktop.desktop)
-            .setResponseHandler(0, new Runnable()
-            {
-              @Override
-              public void run()
-              {
-                addDataToAlignment(al);
-              }
-            }).setResponseHandler(1, new Runnable()
-            {
-              @Override
-              public void run()
-              {
-                us.openLinkedAlignmentAs(al, title, true);
-              }
-            }).setResponseHandler(2, new Runnable()
-            {
-              @Override
-              public void run()
-              {
-                us.openLinkedAlignmentAs(al, title, false);
-              }
+            .setResponseHandler(0, () -> {
+              addDataToAlignment(al);
+            }).setResponseHandler(1, () -> {
+              us.openLinkedAlignmentAs(al, title, true);
+            }).setResponseHandler(2, () -> {
+              us.openLinkedAlignmentAs(al, title, false);
             });
     dialog.showDialog(question,
             MessageManager.getString("label.open_split_window"),
@@ -1114,4 +1158,5 @@ public class AlignViewport extends AlignmentViewport
   {
     this.viewName = viewName;
   }
+
 }