JAL-1780 more support for export setting for flatfile output
[jalview.git] / src / jalview / gui / AlignFrame.java
index b646d5b..85b6767 100644 (file)
@@ -74,6 +74,7 @@ import jalview.analysis.CrossRef;
 import jalview.analysis.Dna;
 import jalview.analysis.ParseProperties;
 import jalview.analysis.SequenceIdMatcher;
+import jalview.api.AlignExportSettingI;
 import jalview.api.AlignViewControllerGuiI;
 import jalview.api.AlignViewControllerI;
 import jalview.api.AlignViewportI;
@@ -240,6 +241,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
     this(al, hiddenColumns, width, height, null);
   }
 
+
   /**
    * Create alignment frame for al with hiddenColumns, a specific width and
    * height, and specific sequenceId
@@ -289,6 +291,29 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
     init();
   }
 
+  public AlignFrame(AlignmentI al, SequenceI[] hiddenSeqs,
+          ColumnSelection hiddenColumns, int width, int height)
+  {
+    setSize(width, height);
+
+    if (al.getDataset() == null)
+    {
+      al.setDataset(null);
+    }
+
+    viewport = new AlignViewport(al, hiddenColumns);
+
+    if (hiddenSeqs != null && hiddenSeqs.length > 0)
+    {
+      viewport.hideSequence(hiddenSeqs);
+      viewport.setHasHiddenRows(true);
+    }
+    alignPanel = new AlignmentPanel(this, viewport);
+    addAlignmentPanel(alignPanel, true);
+    init();
+  }
+
+
   /**
    * Make a new AlignFrame from existing alignmentPanels
    * 
@@ -1098,11 +1123,6 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
                 .lastIndexOf(java.io.File.separatorChar) + 1);
       }
 
-      /*
-       * First save any linked Chimera session.
-       */
-      Desktop.instance.saveChimeraSessions(file);
-
       success = new Jalview2XML().saveAlignment(this, file, shortName);
 
       statusBar.setText(MessageManager.formatMessage(
@@ -1121,7 +1141,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
         return false;
       }
 
-      ExportData exportData = getAlignmentForExport();
+      ExportData exportData = getAlignmentForExport(format);
       FormatAdapter f = new FormatAdapter(viewport);
       String output = f.formatSequences(format,
               exportData.getAlignment(), // class cast exceptions will
@@ -1194,10 +1214,13 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
   protected void outputText_actionPerformed(ActionEvent e)
   {
 
-    ExportData exportData = getAlignmentForExport();
+    ExportData exportData = getAlignmentForExport(e.getActionCommand());
+    if (exportData.getSettings().isCancelled())
+    {
+      return;
+    }
     CutAndPasteTransfer cap = new CutAndPasteTransfer();
     cap.setForInput(null);
-
     try
     {
       cap.setText(new FormatAdapter(viewport).formatSequences(
@@ -1216,7 +1239,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
 
   }
 
-  public ExportData getAlignmentForExport()
+  public ExportData getAlignmentForExport(String exportFomat)
   {
     AlignmentI alignmentToExport = null;
     String[] omitHidden = null;
@@ -1231,36 +1254,29 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
     alignmentStartEnd = new int[]
     { 0, alignmentToExport.getWidth() - 1 };
 
-    if (viewport.hasHiddenColumns() || hiddenSeqs.getSize() > 0)
-    {
-      int reply = JOptionPane
-              .showInternalConfirmDialog(
-                      Desktop.desktop,
-                      MessageManager
-                              .getString("label.alignment_contains_hidden_columns"),
-                      MessageManager
-                              .getString("action.save_omit_hidden_columns"),
-                      JOptionPane.YES_NO_OPTION,
-                      JOptionPane.QUESTION_MESSAGE);
+    boolean hasHiddenSeqs = hiddenSeqs.getSize() > 0;
+    AlignExportSettingI settings = new AlignExportSettings(hasHiddenSeqs,
+            viewport.hasHiddenColumns(), exportFomat);
+    viewport.setExportSettings(settings);
+    settings.isExportAnnotations();
 
-      if (reply == JOptionPane.YES_OPTION)
-      {
-        // export only visible region
-        omitHidden = viewport.getViewAsString(false);
-        alignmentToExport = viewport.getAlignment();
-        alignmentStartEnd = getStartEnd(alignmentStartEnd, viewport
-                .getColumnSelection().getHiddenColumns());
-        viewport.setIncludeHiddenRegion(false);
-      }
-      else
-      {
-        // export all region including visible
-        alignmentToExport = hiddenSeqs.getFullAlignment();
-        viewport.setIncludeHiddenRegion(true);
-      }
+    if (viewport.hasHiddenColumns() && !settings.isExportHiddenColumns())
+    {
+      omitHidden = viewport.getViewAsString(false);
     }
 
-    return new ExportData(alignmentToExport, omitHidden, alignmentStartEnd);
+    if (hasHiddenSeqs && settings.isExportHiddenSequences())
+    {
+      alignmentToExport = hiddenSeqs.getFullAlignment();
+    }
+    else
+    {
+      alignmentToExport = viewport.getAlignment();
+      alignmentStartEnd = getStartEnd(alignmentStartEnd, viewport
+              .getColumnSelection().getHiddenColumns());
+    }
+    return new ExportData(alignmentToExport, omitHidden, alignmentStartEnd,
+            settings);
   }
 
   private static int[] getStartEnd(int[] aligmentStartEnd,
@@ -1333,9 +1349,6 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
   @Override
   protected void htmlMenuItem_actionPerformed(ActionEvent e)
   {
-    // new HTMLOutput(alignPanel,
-    // alignPanel.getSeqPanel().seqCanvas.getSequenceRenderer(),
-    // alignPanel.getSeqPanel().seqCanvas.getFeatureRenderer());
     new HtmlSvgOutput(null, alignPanel);
   }
 
@@ -6075,11 +6088,15 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
 
     private int[] startEnd;
 
-    public ExportData(AlignmentI align, String[] ommit, int[] startEnd)
+    private AlignExportSettingI settings;
+
+    public ExportData(AlignmentI align, String[] ommit, int[] startEnd,
+            AlignExportSettingI settings)
     {
       this.alignment = align;
       this.omitHidden = ommit;
       this.startEnd = startEnd;
+      this.settings = settings;
     }
 
     public AlignmentI getAlignment()
@@ -6111,35 +6128,18 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
     {
       this.startEnd = startEnd;
     }
-  }
 
-  @Override
-  public void hideColumns(List<int[]> colsToHide)
-  {
-    for (int[] colRange : colsToHide)
+    public AlignExportSettingI getSettings()
     {
-      viewport.hideColumns(colRange[0], colRange[1]);
+      return settings;
     }
 
+    public void setSettings(AlignExportSettingI settings)
+    {
+      this.settings = settings;
+    }
   }
 
-  @Override
-  public void syncHiddenSequences()
-  {
-    AlignmentI al = viewport.getAlignment();
-    HiddenSequences hiddenSeqs = al.getHiddenSequences();
-    boolean hasHiddenRows = false;
-    for (SequenceI seq : al.getSequencesArray())
-      {
-        if (seq.isHidden())
-        {
-        hiddenSeqs.hideSequence(seq);
-        hasHiddenRows = true;
-        }
-      }
-    viewport.setHasHiddenRows(hasHiddenRows);
-    firePropertyChange("alignment", null, al.getSequences());
-  }
 }
 
 class PrintThread extends Thread