X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FAlignFrame.java;h=b85d5d447d320dd2d50f9e7dadece70e9fa00f12;hb=c42fcf7bf5cfcf51e67dd0f683edb9ab6683d157;hp=32a50cfbfa30c359defac13060d2ebab1b8adf1b;hpb=e30c8f0736f711e2dc7c32680ac57a28c77d567d;p=jalview.git diff --git a/src/jalview/gui/AlignFrame.java b/src/jalview/gui/AlignFrame.java index 32a50cf..b85d5d4 100755 --- a/src/jalview/gui/AlignFrame.java +++ b/src/jalview/gui/AlignFrame.java @@ -35,7 +35,7 @@ import jalview.jbgui.*; import jalview.schemes.*; import jalview.ws.*; import java.awt.dnd.*; - +import org.biojava.dasobert.eventmodel.*; /** * DOCUMENT ME! @@ -44,7 +44,7 @@ import java.awt.dnd.*; * @version $Revision$ */ public class AlignFrame - extends GAlignFrame implements DropTargetListener + extends GAlignFrame implements DropTargetListener, FeatureListener { /** DOCUMENT ME!! */ public static final int NEW_WINDOW_WIDTH = 700; @@ -60,15 +60,14 @@ public class AlignFrame Stack redoList = new Stack(); private int treeCount = 0; - /** - * Creates a new AlignFrame object. - * - * @param al DOCUMENT ME! + * new alignment window with hidden columns + * @param al AlignmentI + * @param hiddenColumns ColumnSelection or null */ - public AlignFrame(AlignmentI al) - { - viewport = new AlignViewport(al); + public AlignFrame(AlignmentI al, ColumnSelection hiddenColumns) { + + viewport = new AlignViewport(al, hiddenColumns); this.setDropTarget(new java.awt.dnd.DropTarget(this, this)); @@ -131,11 +130,29 @@ public class AlignFrame setGUINucleotide(al.isNucleotide()); } - if(jalview.bin.Cache.getDefault("WRAP_ALIGNMENT", false)) + + if (jalview.bin.Cache.getDefault("WRAP_ALIGNMENT", false)) { wrapMenuItem.setSelected(true); wrapMenuItem_actionPerformed(null); } + + } + + + /** + * Creates a new AlignFrame object. + * + * @param al DOCUMENT ME! + */ + public AlignFrame(AlignmentI al) + { + this(al, null); + } + + public AlignViewport getViewport() + { + return viewport; } /* Set up intrinsic listeners for dynamically generated GUI bits. */ @@ -169,7 +186,6 @@ public class AlignFrame } ; }); - } public void setGUINucleotide(boolean nucleotide) @@ -187,6 +203,58 @@ public class AlignFrame } } + public void comeBackLater(FeatureEvent evt) + {} + + public void newFeatures(FeatureEvent evt) + { + if (evt.getFeatures().length > 0) + { + alignPanel.seqPanel.seqCanvas.fr.featuresAdded(); + alignPanel.repaint(); + if(featureSettings!=null) + featureSettings.setTableData(); + } + } + + Hashtable progressBars; + public void setProgressBar(String message, long id) + { + if(progressBars == null) + progressBars = new Hashtable(); + + JPanel progressPanel; + GridLayout layout = (GridLayout) statusPanel.getLayout(); + if(progressBars.get( new Long(id) )!=null) + { + progressPanel = (JPanel)progressBars.get( new Long(id) ); + statusPanel.remove(progressPanel); + progressBars.remove( progressPanel ); + progressPanel = null; + if(message!=null) + statusBar.setText(message); + + layout.setRows(layout.getRows() - 1); + } + else + { + progressPanel = new JPanel(new BorderLayout(10, 5)); + + JProgressBar progressBar = new JProgressBar(); + progressBar.setIndeterminate(true); + + progressPanel.add(new JLabel(message), BorderLayout.WEST); + progressPanel.add(progressBar, BorderLayout.CENTER); + + layout.setRows(layout.getRows() + 1); + statusPanel.add(progressPanel); + + progressBars.put(new Long(id), progressPanel); + } + + validate(); + } + /* Added so Castor Mapping file can obtain Jalview Version @@ -288,9 +356,26 @@ public class AlignFrame } else { - String output = new FormatAdapter().formatSequences(format, - viewport.getAlignment(). - getSequences()); + + String[] omitHidden = null; + + if (viewport.hasHiddenColumns) + { + int reply = JOptionPane.showInternalConfirmDialog(Desktop.desktop, + "The Alignment contains hidden columns." + + "\nDo you want to save only the visible alignment?", + "Save / Omit Hidden Columns", + JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE); + + if (reply == JOptionPane.YES_OPTION) + omitHidden = viewport.getViewAsString(false); + } + + String output = new FormatAdapter().formatSequences( + format, + viewport.alignment.getSequencesArray(), + omitHidden); + if (output == null) { return false; @@ -321,13 +406,32 @@ public class AlignFrame */ protected void outputText_actionPerformed(ActionEvent e) { + String [] omitHidden = null; + + if(viewport.hasHiddenColumns) + { + int reply = JOptionPane.showInternalConfirmDialog(Desktop.desktop, + "The Alignment contains hidden columns." + +"\nDo you want to output only the visible alignment?", + "Save / Omit Hidden Columns", + JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE); + + if(reply==JOptionPane.YES_OPTION) + { + omitHidden = viewport.getViewAsString(false); + } + } + CutAndPasteTransfer cap = new CutAndPasteTransfer(); Desktop.addInternalFrame(cap, "Alignment output - " + e.getActionCommand(), 600, 500); - cap.setText(new FormatAdapter().formatSequences(e.getActionCommand(), - viewport.getAlignment(). - getSequences())); + + + cap.setText(new FormatAdapter().formatSequences( + e.getActionCommand(), + viewport.alignment.getSequencesArray(), + omitHidden)); } /** @@ -384,6 +488,7 @@ public class AlignFrame new AnnotationExporter().exportFeatures(alignPanel); } + public void exportAnnotations_actionPerformed(ActionEvent e) { new AnnotationExporter().exportAnnotations( @@ -533,14 +638,14 @@ public class AlignFrame { SequenceI seq = viewport.alignment.getSequenceAt(i); - if (!sg.sequences.contains(seq)) + if (!sg.getSequences(false).contains(seq)) { continue; } SequenceI temp = viewport.alignment.getSequenceAt(i - 1); - if (sg.sequences.contains(temp)) + if (sg.getSequences(false).contains(temp)) { continue; } @@ -555,14 +660,14 @@ public class AlignFrame { SequenceI seq = viewport.alignment.getSequenceAt(i); - if (!sg.sequences.contains(seq)) + if (!sg.getSequences(false).contains(seq)) { continue; } SequenceI temp = viewport.alignment.getSequenceAt(i + 1); - if (sg.sequences.contains(temp)) + if (sg.getSequences(false).contains(temp)) { continue; } @@ -589,83 +694,41 @@ public class AlignFrame return; } - SequenceGroup sg = viewport.getSelectionGroup(); - - Clipboard c = Toolkit.getDefaultToolkit().getSystemClipboard(); - - Hashtable orderedSeqs = new Hashtable(); - SequenceI[] seqs = new SequenceI[sg.getSize()]; + SequenceI [] seqs = viewport.getSelectionAsNewSequence(); + String[] omitHidden = null; - for (int i = 0; i < sg.getSize(); i++) + if (viewport.hasHiddenColumns) { - SequenceI seq = sg.getSequenceAt(i); - int index = viewport.alignment.findIndex(seq); - orderedSeqs.put(index + "", seq); + omitHidden = viewport.getViewAsString(true); } - int index = 0, startRes, endRes; - char ch; + String output = new FormatAdapter().formatSequences( + "Fasta", + seqs, + omitHidden); - for (int i = 0; i < sg.getSize(); i++) - { - SequenceI seq = null; - - while (seq == null) - { - if (orderedSeqs.containsKey(index + "")) - { - seq = (SequenceI) orderedSeqs.get(index + ""); - index++; - - break; - } - else - { - index++; - } - } - //FIND START RES - //Returns residue following index if gap - startRes = seq.findPosition(sg.getStartRes()); + Toolkit.getDefaultToolkit().getSystemClipboard() + .setContents(new StringSelection(output), Desktop.instance); - //FIND END RES - //Need to find the residue preceeding index if gap - endRes = 0; - - for (int j = 0; j < sg.getEndRes() + 1 && j < seq.getLength(); j++) - { - ch = seq.getCharAt(j); - if (!jalview.util.Comparison.isGap( (ch))) - { - endRes++; - } - } - - if (endRes > 0) + Vector hiddenColumns = null; + if(viewport.hasHiddenColumns) + { + hiddenColumns =new Vector(); + int hiddenOffset = viewport.getSelectionGroup().getStartRes(); + for(int i=0; i>>This is a fix for the moment, until a better solution is found!!<<< af.alignPanel.seqPanel.seqCanvas.getFeatureRenderer().transferSettings( @@ -880,7 +960,7 @@ public class AlignFrame HistoryItem.HIDE)); - for (int i = 0; i < sg.sequences.size(); i++) + for (int i = 0; i < sg.getSize(false); i++) { SequenceI seq = sg.getSequenceAt(i); int index = viewport.getAlignment().findIndex(seq); @@ -888,7 +968,7 @@ public class AlignFrame seq.deleteChars(sg.getStartRes(), sg.getEndRes() + 1); // If the cut affects all sequences, remove highlighted columns - if (sg.sequences.size() == viewport.alignment.getHeight()) + if (sg.getSize(false) == viewport.alignment.getHeight()) { viewport.getColumnSelection().removeElements(sg.getStartRes(), sg.getEndRes() + 1); @@ -973,6 +1053,7 @@ public class AlignFrame viewport.setSelectionGroup(null); alignPanel.seqPanel.seqCanvas.highlightSearchResults(null); alignPanel.idPanel.idCanvas.searchResults = null; + alignPanel.repaint(); PaintRefresher.Refresh(null, viewport.alignment); } @@ -1001,6 +1082,13 @@ public class AlignFrame PaintRefresher.Refresh(null, viewport.alignment); } + public void invertColSel_actionPerformed(ActionEvent e) + { + viewport.invertColumnSelection(); + alignPanel.repaint(); + } + + /** * DOCUMENT ME! * @@ -1125,10 +1213,10 @@ public class AlignFrame int end = viewport.alignment.getWidth(); if (viewport.getSelectionGroup() != null - && viewport.getSelectionGroup().sequences != null - && viewport.getSelectionGroup().sequences.size() > 0) + && viewport.getSelectionGroup().getSequences(true) != null + && viewport.getSelectionGroup().getSize(true) > 0) { - seqs = viewport.getSelectionGroup().sequences; + seqs = viewport.getSelectionGroup().getSequences(true); start = viewport.getSelectionGroup().getStartRes(); end = viewport.getSelectionGroup().getEndRes()+1; } @@ -1240,7 +1328,8 @@ public class AlignFrame SequenceGroup sg = (SequenceGroup)viewport.alignment.getGroups().elementAt(s); if(sg.cs!=null && sg.cs instanceof ClustalxColourScheme) { - ((ClustalxColourScheme)sg.cs).resetClustalX(sg.sequences, sg.getWidth()); + ((ClustalxColourScheme)sg.cs).resetClustalX( + sg.getSequences(true), sg.getWidth()); } sg.recalcConservation(); } @@ -1326,14 +1415,53 @@ public class AlignFrame */ public void wrapMenuItem_actionPerformed(ActionEvent e) { - viewport.setWrapAlignment(wrapMenuItem.isSelected()); - alignPanel.setWrapAlignment(wrapMenuItem.isSelected()); scaleAbove.setVisible(wrapMenuItem.isSelected()); scaleLeft.setVisible(wrapMenuItem.isSelected()); scaleRight.setVisible(wrapMenuItem.isSelected()); + viewport.setWrapAlignment(wrapMenuItem.isSelected()); + alignPanel.setWrapAlignment(wrapMenuItem.isSelected()); + } + + public void showAllSeqs_actionPerformed(ActionEvent e) + { + viewport.showAllHiddenSeqs(); + repaint(); + } + + public void showAllColumns_actionPerformed(ActionEvent e) + { + viewport.showAllHiddenColumns(); + } + + public void hideSelSequences_actionPerformed(ActionEvent e) + { + if(viewport.getSelectionGroup()==null) + return; + + SequenceI [] seqs = viewport.getSelectionGroup().getSequencesInOrder( + viewport.alignment + ); + + for(int i=0; i 0)) || + (viewport.getSelectionGroup().getSize(false) < 4) && + (viewport.getSelectionGroup().getSize(false) > 0)) || (viewport.getAlignment().getHeight() < 4)) { JOptionPane.showInternalMessageDialog(this, @@ -2050,15 +2174,15 @@ public class AlignFrame TreePanel tp; if ( (viewport.getSelectionGroup() != null) && - (viewport.getSelectionGroup().getSize() > 3)) + (viewport.getSelectionGroup().getSize(false) > 3)) { int s = 0; SequenceGroup sg = viewport.getSelectionGroup(); /* Decide if the selection is a column region */ - while (s < sg.sequences.size()) + while (s < sg.getSize(false)) { - if ( ( (SequenceI) sg.sequences.elementAt(s++)).getLength() < + if ( ( (SequenceI) sg.getSequences(false).elementAt(s++)).getLength() < sg.getEndRes()) { JOptionPane.showMessageDialog(Desktop.desktop, @@ -2073,9 +2197,7 @@ public class AlignFrame } title = title + " on region"; - tp = new TreePanel(viewport, - viewport.getSelectionGroup().sequences, type, pwType, - sg.getStartRes(), sg.getEndRes()); + tp = new TreePanel(viewport, type, pwType); } else { @@ -2092,10 +2214,10 @@ public class AlignFrame return; } - tp = new TreePanel(viewport, - viewport.getAlignment().getSequences(), type, pwType, - 0, - viewport.alignment.getWidth()); + if(viewport.alignment.getHeight()<2) + return; + + tp = new TreePanel(viewport, type, pwType); } addTreeMenuItem(tp, title); @@ -2183,27 +2305,28 @@ public class AlignFrame * or just the selected set will be submitted for multiple alignment. * */ - private SequenceI[] gatherSequencesForAlignment() + private jalview.datamodel.AlignmentView gatherSequencesForAlignment() { // Now, check we have enough sequences - SequenceI[] msa = null; + AlignmentView msa = null; if ( (viewport.getSelectionGroup() != null) && - (viewport.getSelectionGroup().getSize() > 1)) + (viewport.getSelectionGroup().getSize(false) > 1)) { // JBPNote UGLY! To prettify, make SequenceGroup and Alignment conform to some common interface! - SequenceGroup seqs = viewport.getSelectionGroup(); + /*SequenceGroup seqs = viewport.getSelectionGroup(); int sz; - msa = new SequenceI[sz = seqs.getSize()]; + msa = new SequenceI[sz = seqs.getSize(false)]; for (int i = 0; i < sz; i++) { msa[i] = (SequenceI) seqs.getSequenceAt(i); - } + } */ + msa = viewport.getAlignmentView(true); } else { - Vector seqs = viewport.getAlignment().getSequences(); + /*Vector seqs = viewport.getAlignment().getSequences(); if (seqs.size() > 1) { @@ -2213,7 +2336,8 @@ public class AlignFrame { msa[i] = (SequenceI) seqs.elementAt(i); } - } + }*/ + msa = viewport.getAlignmentView(false); } return msa; } @@ -2230,19 +2354,19 @@ public class AlignFrame SequenceI[] msa = null; if ( (viewport.getSelectionGroup() != null) && - (viewport.getSelectionGroup().getSize() > 0)) + (viewport.getSelectionGroup().getSize(false) > 0)) { // JBPNote UGLY! To prettify, make SequenceGroup and Alignment conform to some common interface! SequenceGroup seqs = viewport.getSelectionGroup(); - if ( (seqs.getSize() == 1) || !viewport.alignment.isAligned()) + if ( (seqs.getSize(false) == 1) || !viewport.alignment.isAligned()) { seq = (SequenceI) seqs.getSequenceAt(0); } else { int sz; - msa = new SequenceI[sz = seqs.getSize()]; + msa = new SequenceI[sz = seqs.getSize(false)]; for (int i = 0; i < sz; i++) { @@ -2346,9 +2470,9 @@ public class AlignFrame if (nf.getTree() != null) { tp = new TreePanel(viewport, - viewport.getAlignment().getSequences(), nf, "FromFile", - title); + title, + nf); tp.setSize(w,h); @@ -2417,7 +2541,7 @@ public class AlignFrame { public void actionPerformed(ActionEvent e) { - SequenceI[] msa = gatherSequencesForAlignment(); + AlignmentView msa = gatherSequencesForAlignment(); new jalview.ws.MsaWSClient(sh, title, msa, false, true, viewport.getAlignment().getDataset(), af); @@ -2434,7 +2558,7 @@ public class AlignFrame { public void actionPerformed(ActionEvent e) { - SequenceI[] msa = gatherSequencesForAlignment(); + AlignmentView msa = gatherSequencesForAlignment(); new jalview.ws.MsaWSClient(sh, title, msa, true, true, viewport.getAlignment().getDataset(), af); @@ -2519,10 +2643,12 @@ public class AlignFrame - public void showTranslation_actionPerformed(ActionEvent e) { - int s, sSize = viewport.alignment.getHeight(); + SequenceI [] selection = viewport.getSelectionAsNewSequence(); + String [] seqstring = viewport.getViewAsString(true); + + int s, sSize = selection.length; SequenceI [] newSeq = new SequenceI[sSize]; int res, resSize; @@ -2531,7 +2657,7 @@ public void showTranslation_actionPerformed(ActionEvent e) for(s=0; s