Merge branch 'develop' of https://source.jalview.org/git/jalview.git into develop
authorgmungoc <g.m.carstairs@dundee.ac.uk>
Wed, 10 Jun 2015 10:25:08 +0000 (11:25 +0100)
committergmungoc <g.m.carstairs@dundee.ac.uk>
Wed, 10 Jun 2015 10:25:08 +0000 (11:25 +0100)
1  2 
src/jalview/gui/AlignFrame.java

@@@ -1098,6 -1098,11 +1098,6 @@@ public class AlignFrame extends GAlignF
                  .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(
        String output = f.formatSequences(format,
                exportData.getAlignment(), // class cast exceptions will
                // occur in the distant future
-               exportData.getOmitHidden(), f.getCacheSuffixDefault(format),
+               exportData.getOmitHidden(), exportData.getStartEndPostions(),
+               f.getCacheSuffixDefault(format),
                viewport.getColumnSelection());
  
        if (output == null)
        cap.setText(new FormatAdapter(viewport).formatSequences(
                e.getActionCommand(),
   exportData.getAlignment(),
-               exportData.getOmitHidden(),
+               exportData.getOmitHidden(), exportData.getStartEndPostions(),
                viewport.getColumnSelection()));
        Desktop.addInternalFrame(cap, MessageManager.formatMessage(
                "label.alignment_output_command", new Object[]
    {
      AlignmentI alignmentToExport = null;
      String[] omitHidden = null;
+     int[] alignmentStartEnd = new int[2];
      FeatureRenderer fr = new FeatureRenderer(this.alignPanel);
      viewport.setFeatureRenderer(fr);
      HiddenSequences hiddenSeqs = viewport.getAlignment()
              .getHiddenSequences();
+     alignmentToExport = viewport.getAlignment();
+     alignmentStartEnd = new int[]
+     { 0, alignmentToExport.getWidth() - 1 };
      if (viewport.hasHiddenColumns() || hiddenSeqs.getSize() > 0)
      {
        int reply = JOptionPane
  
        if (reply == JOptionPane.YES_OPTION)
        {
+         // export only visible region
          omitHidden = viewport.getViewAsString(false);
+         alignmentToExport = viewport.getAlignment();
+         alignmentStartEnd = getStartEnd(alignmentStartEnd, viewport
+                 .getColumnSelection().getHiddenColumns());
        }
        else
        {
-         alignmentToExport = viewport.getAlignment().getHiddenSequences()
-                 .getFullAlignment();
+         // export all region including visible
+         alignmentToExport = hiddenSeqs.getFullAlignment();
        }
      }
-     if (alignmentToExport == null)
+     return new ExportData(alignmentToExport, omitHidden, alignmentStartEnd);
+   }
+   private static int[] getStartEnd(int[] aligmentStartEnd,
+           List<int[]> hiddenCols)
+   {
+     int startPos = aligmentStartEnd[0];
+     int endPos = aligmentStartEnd[1];
+     int[] lowestRange = new int[2];
+     int[] higestRange = new int[2];
+     for (int[] hiddenCol : hiddenCols)
+     {
+       // System.out.println("comparing : " + hiddenCol[0] + "-" + hiddenCol[1]);
+       lowestRange = (hiddenCol[0] <= startPos) ? hiddenCol : lowestRange;
+       higestRange = (hiddenCol[1] >= endPos) ? hiddenCol : higestRange;
+     }
+     // System.out.println("min : " + lowestRange[0] + "-" + lowestRange[1]);
+     // System.out.println("max : " + higestRange[0] + "-" + higestRange[1]);
+     if (lowestRange[0] == 0 && lowestRange[1] == 0)
+     {
+       startPos = aligmentStartEnd[0];
+     }
+     else
+     {
+       startPos = lowestRange[1] + 1;
+     }
+     if (higestRange[0] == 0 && higestRange[1] == 0)
+     {
+       endPos = aligmentStartEnd[1];
+     }
+     else
      {
-       alignmentToExport = viewport.getAlignment();
+       endPos = higestRange[0];
      }
-     return new ExportData(alignmentToExport, omitHidden);
+     // System.out.println("Export range : " + minPos + " - " + maxPos);
+     return new int[]
+     { startPos, endPos };
+   }
+   public static void main(String[] args)
+   {
+     ArrayList<int[]> hiddenCols = new ArrayList<int[]>();
+     hiddenCols.add(new int[]
+     { 0, 4 });
+     hiddenCols.add(new int[]
+     { 6, 9 });
+     hiddenCols.add(new int[]
+     { 11, 12 });
+     hiddenCols.add(new int[]
+     { 33, 33 });
+     hiddenCols.add(new int[]
+     { 45, 50 });
+     int[] x = getStartEnd(new int[]
+     { 0, 50 }, hiddenCols);
+     // System.out.println("Export range : " + x[0] + " - " + x[1]);
    }
  
    /**
      }
  
      String output = new FormatAdapter().formatSequences("Fasta", seqs,
-             omitHidden);
+             omitHidden, null);
  
      StringSelection ss = new StringSelection(output);
  
  
      private String[] omitHidden;
  
-     public ExportData(AlignmentI align, String[] ommit)
+     private int[] startEnd;
+     public ExportData(AlignmentI align, String[] ommit, int[] startEnd)
      {
        this.alignment = align;
        this.omitHidden = ommit;
-       System.out.println();
+       this.startEnd = startEnd;
      }
  
      public AlignmentI getAlignment()
      {
        this.omitHidden = omitHidden;
      }
+     public int[] getStartEndPostions()
+     {
+       return startEnd;
+     }
+     public void setStartEndPostions(int[] startEnd)
+     {
+       this.startEnd = startEnd;
+     }
    }
  
    @Override