X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FAlignFrame.java;h=764b19243978e099b3edea3f3188debb77fd2aa7;hb=1e0a944431b347efefe067fdecb6f28fe4c187a8;hp=ad2bbc33beceaeeac8c5c17058ad1cd1fa87b03d;hpb=4660fcf0745dbc1f6f6e7241b398301f93edb548;p=jalview.git diff --git a/src/jalview/gui/AlignFrame.java b/src/jalview/gui/AlignFrame.java index ad2bbc3..764b192 100644 --- a/src/jalview/gui/AlignFrame.java +++ b/src/jalview/gui/AlignFrame.java @@ -20,52 +20,6 @@ */ package jalview.gui; -import java.awt.BorderLayout; -import java.awt.Component; -import java.awt.Rectangle; -import java.awt.Toolkit; -import java.awt.datatransfer.Clipboard; -import java.awt.datatransfer.DataFlavor; -import java.awt.datatransfer.StringSelection; -import java.awt.datatransfer.Transferable; -import java.awt.dnd.DnDConstants; -import java.awt.dnd.DropTargetDragEvent; -import java.awt.dnd.DropTargetDropEvent; -import java.awt.dnd.DropTargetEvent; -import java.awt.dnd.DropTargetListener; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.awt.event.ItemEvent; -import java.awt.event.ItemListener; -import java.awt.event.KeyAdapter; -import java.awt.event.KeyEvent; -import java.awt.event.MouseAdapter; -import java.awt.event.MouseEvent; -import java.awt.print.PageFormat; -import java.awt.print.PrinterJob; -import java.beans.PropertyChangeEvent; -import java.io.File; -import java.net.URL; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Deque; -import java.util.Enumeration; -import java.util.Hashtable; -import java.util.List; -import java.util.Set; -import java.util.Vector; - -import javax.swing.JCheckBoxMenuItem; -import javax.swing.JEditorPane; -import javax.swing.JInternalFrame; -import javax.swing.JLayeredPane; -import javax.swing.JMenu; -import javax.swing.JMenuItem; -import javax.swing.JOptionPane; -import javax.swing.JRadioButtonMenuItem; -import javax.swing.JScrollPane; -import javax.swing.SwingUtilities; - import jalview.analysis.AAFrequency; import jalview.analysis.AlignmentSorter; import jalview.analysis.AlignmentUtils; @@ -78,6 +32,7 @@ import jalview.api.AlignViewControllerGuiI; import jalview.api.AlignViewControllerI; import jalview.api.AlignViewportI; import jalview.api.AlignmentViewPanel; +import jalview.api.FeatureSettingsControllerI; import jalview.api.SplitContainerI; import jalview.api.ViewStyleI; import jalview.api.analysis.ScoreModelI; @@ -107,7 +62,6 @@ import jalview.gui.ViewSelectionMenu.ViewSetProvider; import jalview.io.AlignmentProperties; import jalview.io.AnnotationFile; import jalview.io.BioJsHTMLOutput; -import jalview.io.FeaturesFile; import jalview.io.FileLoader; import jalview.io.FormatAdapter; import jalview.io.HtmlSvgOutput; @@ -144,6 +98,52 @@ import jalview.ws.jws2.Jws2Discoverer; import jalview.ws.jws2.jabaws2.Jws2Instance; import jalview.ws.seqfetcher.DbSourceProxy; +import java.awt.BorderLayout; +import java.awt.Component; +import java.awt.Rectangle; +import java.awt.Toolkit; +import java.awt.datatransfer.Clipboard; +import java.awt.datatransfer.DataFlavor; +import java.awt.datatransfer.StringSelection; +import java.awt.datatransfer.Transferable; +import java.awt.dnd.DnDConstants; +import java.awt.dnd.DropTargetDragEvent; +import java.awt.dnd.DropTargetDropEvent; +import java.awt.dnd.DropTargetEvent; +import java.awt.dnd.DropTargetListener; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.ItemEvent; +import java.awt.event.ItemListener; +import java.awt.event.KeyAdapter; +import java.awt.event.KeyEvent; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import java.awt.print.PageFormat; +import java.awt.print.PrinterJob; +import java.beans.PropertyChangeEvent; +import java.io.File; +import java.net.URL; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Deque; +import java.util.Enumeration; +import java.util.Hashtable; +import java.util.List; +import java.util.Set; +import java.util.Vector; + +import javax.swing.JCheckBoxMenuItem; +import javax.swing.JEditorPane; +import javax.swing.JInternalFrame; +import javax.swing.JLayeredPane; +import javax.swing.JMenu; +import javax.swing.JMenuItem; +import javax.swing.JOptionPane; +import javax.swing.JRadioButtonMenuItem; +import javax.swing.JScrollPane; +import javax.swing.SwingUtilities; + /** * DOCUMENT ME! * @@ -240,6 +240,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 +290,28 @@ 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); + } + alignPanel = new AlignmentPanel(this, viewport); + addAlignmentPanel(alignPanel, true); + init(); + } + + /** * Make a new AlignFrame from existing alignmentPanels * @@ -1098,11 +1121,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,12 +1139,13 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, return false; } - ExportData exportData = getAlignmentForExport(); - FormatAdapter f = new FormatAdapter(viewport); + ExportData exportData = getAlignmentForExport(format); + FormatAdapter f = new FormatAdapter(alignPanel); 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) @@ -1193,16 +1212,20 @@ 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( + cap.setText(new FormatAdapter(alignPanel, exportData.getSettings()) + .formatSequences( e.getActionCommand(), exportData.getAlignment(), - exportData.getOmitHidden(), + exportData.getOmitHidden(), exportData.getStartEndPostions(), viewport.getColumnSelection())); Desktop.addInternalFrame(cap, MessageManager.formatMessage( "label.alignment_output_command", new Object[] @@ -1215,41 +1238,103 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, } - public ExportData getAlignmentForExport() + public ExportData getAlignmentForExport(String exportFomat) { AlignmentI alignmentToExport = null; String[] omitHidden = null; - FeatureRenderer fr = new FeatureRenderer(this.alignPanel); - viewport.setFeatureRenderer(fr); + int[] alignmentStartEnd = new int[2]; + HiddenSequences hiddenSeqs = viewport.getAlignment() .getHiddenSequences(); - if (viewport.hasHiddenColumns() || hiddenSeqs.getSize() > 0) + + + alignmentToExport = viewport.getAlignment(); + alignmentStartEnd = new int[] + { 0, alignmentToExport.getWidth() - 1 }; + + boolean hasHiddenSeqs = hiddenSeqs.getSize() > 0; + AlignExportSettings settings = new AlignExportSettings(hasHiddenSeqs, + viewport.hasHiddenColumns(), exportFomat); + settings.isExportAnnotations(); + + if (viewport.hasHiddenColumns() && !settings.isExportHiddenColumns()) { - 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); + omitHidden = viewport.getViewAsString(false); + } - if (reply == JOptionPane.YES_OPTION) - { - omitHidden = viewport.getViewAsString(false); - } - else - { - alignmentToExport = viewport.getAlignment().getHiddenSequences() - .getFullAlignment(); - } + if (hasHiddenSeqs && settings.isExportHiddenSequences()) + { + alignmentToExport = hiddenSeqs.getFullAlignment(); } - if (alignmentToExport == null) + else { alignmentToExport = viewport.getAlignment(); + alignmentStartEnd = getStartEnd(alignmentStartEnd, viewport + .getColumnSelection().getHiddenColumns()); } - return new ExportData(alignmentToExport, omitHidden); + return new ExportData(alignmentToExport, omitHidden, alignmentStartEnd, + settings); + } + + 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 + { + endPos = higestRange[0]; + } + + // 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]); } /** @@ -1261,17 +1346,13 @@ 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); } @Override public void bioJSMenuItem_actionPerformed(ActionEvent e) { - BioJsHTMLOutput bjs = new BioJsHTMLOutput(alignPanel, - alignPanel.getSeqPanel().seqCanvas.getFeatureRenderer()); + BioJsHTMLOutput bjs = new BioJsHTMLOutput(alignPanel); bjs.exportJalviewAlignmentAsBioJsHtmlFile(); } public void createImageMap(File file, String image) @@ -1776,7 +1857,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, } String output = new FormatAdapter().formatSequences("Fasta", seqs, - omitHidden); + omitHidden, null); StringSelection ss = new StringSelection(output); @@ -3068,6 +3149,12 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, public FeatureSettings featureSettings; @Override + public FeatureSettingsControllerI getFeatureSettingsUI() + { + return featureSettings; + } + + @Override public void featureSettings_actionPerformed(ActionEvent e) { if (featureSettings != null) @@ -4917,41 +5004,29 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * contents or path to retrieve file * @param type * access mode of file (see jalview.io.AlignFile) - * @return true if features file was parsed corectly. + * @return true if features file was parsed correctly. */ public boolean parseFeaturesFile(String file, String type) { - boolean featuresFile = false; - try - { - featuresFile = new FeaturesFile(file, type).parse(viewport - .getAlignment().getDataset(), alignPanel.getSeqPanel().seqCanvas - .getFeatureRenderer().getFeatureColours(), false, - jalview.bin.Cache.getDefault("RELAXEDSEQIDMATCHING", false)); - } catch (Exception ex) - { - ex.printStackTrace(); - } + return avc.parseFeaturesFile(file, type, + jalview.bin.Cache.getDefault("RELAXEDSEQIDMATCHING", false)); + + } - if (featuresFile) + @Override + public void refreshFeatureUI(boolean enableIfNecessary) + { + // note - currently this is only still here rather than in the controller + // because of the featureSettings hard reference that is yet to be + // abstracted + if (enableIfNecessary) { viewport.setShowSequenceFeatures(true); showSeqFeatures.setSelected(true); - if (alignPanel.getSeqPanel().seqCanvas.fr != null) - { - // update the min/max ranges where necessary - alignPanel.getSeqPanel().seqCanvas.fr.findAllFeatures(true); - } - if (featureSettings != null) - { - featureSettings.setTableData(); - } - alignPanel.paintAlignment(true); } - return featuresFile; - } + } @Override public void dragEnter(DropTargetDragEvent evt) { @@ -6001,11 +6076,17 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, private String[] omitHidden; - public ExportData(AlignmentI align, String[] ommit) + private int[] startEnd; + + private AlignExportSettings settings; + + public ExportData(AlignmentI align, String[] ommit, int[] startEnd, + AlignExportSettings settings) { this.alignment = align; this.omitHidden = ommit; - System.out.println(); + this.startEnd = startEnd; + this.settings = settings; } public AlignmentI getAlignment() @@ -6027,31 +6108,28 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, { this.omitHidden = omitHidden; } - } - @Override - public void hideColumns(List colsToHide) - { - for (int[] colRange : colsToHide) + public int[] getStartEndPostions() { - viewport.hideColumns(colRange[0], colRange[1]); + return startEnd; } - } + public void setStartEndPostions(int[] startEnd) + { + this.startEnd = startEnd; + } - @Override - public void syncHiddenSequences() - { - AlignmentI al = viewport.getAlignment(); - HiddenSequences hiddenSeqs = al.getHiddenSequences(); - for (SequenceI seq : al.getSequencesArray()) - { - if (seq.isHidden()) - { - hiddenSeqs.hideSequence(seq); - } - } + public AlignExportSettings getSettings() + { + return settings; + } + + public void setSettings(AlignExportSettings settings) + { + this.settings = settings; + } } + } class PrintThread extends Thread