X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fjalview%2Fgui%2FAlignFrame.java;fp=src%2Fjalview%2Fgui%2FAlignFrame.java;h=64818559caf57c3dfc134916a00ac298aa9a51d7;hb=e938531cf3debbdcd4e054f39e8f71899e443310;hp=ad2bbc33beceaeeac8c5c17058ad1cd1fa87b03d;hpb=a394f0df3650d5b1e0b76e0319b650fe8ac98e41;p=jalview.git diff --git a/src/jalview/gui/AlignFrame.java b/src/jalview/gui/AlignFrame.java index ad2bbc3..6481855 100644 --- a/src/jalview/gui/AlignFrame.java +++ b/src/jalview/gui/AlignFrame.java @@ -1126,7 +1126,8 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, 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) @@ -1202,7 +1203,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, 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[] @@ -1219,10 +1220,17 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, { 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 @@ -1237,19 +1245,81 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, 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 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 hiddenCols = new ArrayList(); + 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]); } /** @@ -1776,7 +1846,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, } String output = new FormatAdapter().formatSequences("Fasta", seqs, - omitHidden); + omitHidden, null); StringSelection ss = new StringSelection(output); @@ -6001,11 +6071,13 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, 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() @@ -6027,6 +6099,16 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, { this.omitHidden = omitHidden; } + + public int[] getStartEndPostions() + { + return startEnd; + } + + public void setStartEndPostions(int[] startEnd) + { + this.startEnd = startEnd; + } } @Override