X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FAlignFrame.java;h=b2d41e8935bec20c6141000dd1cf9cc7e008d9bd;hb=12cc8cf9004b54db1b9fafa21d22d119bb874dfc;hp=284989d2e04775428691b6fe32ab5ffffae83597;hpb=f27df5aa83fc925caead09b59bb25c11c6d675c4;p=jalview.git diff --git a/src/jalview/gui/AlignFrame.java b/src/jalview/gui/AlignFrame.java index 284989d..b2d41e8 100755 --- a/src/jalview/gui/AlignFrame.java +++ b/src/jalview/gui/AlignFrame.java @@ -1,6 +1,6 @@ /* * Jalview - A Sequence Alignment Editor and Viewer - * Copyright (C) 2006 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle + * Copyright (C) 2007 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -24,19 +24,18 @@ import java.util.*; import java.awt.*; import java.awt.datatransfer.*; +import java.awt.dnd.*; import java.awt.event.*; import java.awt.print.*; import javax.swing.*; import jalview.analysis.*; +import jalview.commands.*; import jalview.datamodel.*; import jalview.io.*; import jalview.jbgui.*; import jalview.schemes.*; -import jalview.util.ShiftList; -import jalview.commands.*; import jalview.ws.*; -import java.awt.dnd.*; /** * DOCUMENT ME! @@ -44,7 +43,8 @@ import java.awt.dnd.*; * @author $author$ * @version $Revision$ */ -public class AlignFrame extends GAlignFrame implements DropTargetListener +public class AlignFrame + extends GAlignFrame implements DropTargetListener { /** DOCUMENT ME!! */ public static final int DEFAULT_WIDTH = 700; @@ -52,17 +52,15 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener /** DOCUMENT ME!! */ public static final int DEFAULT_HEIGHT = 500; public AlignmentPanel alignPanel; - AlignViewport viewport; + AlignViewport viewport; Vector alignPanels = new Vector(); - /** DOCUMENT ME!! */ - public String currentFileFormat = null; - Stack historyList = new Stack(); - Stack redoList = new Stack(); - private int treeCount = 0; + String currentFileFormat = null; + + String fileName = null; /** * Creates a new AlignFrame object. @@ -74,7 +72,6 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener this(al, null, width, height); } - /** * new alignment window with hidden columns * @param al AlignmentI @@ -88,12 +85,12 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener alignPanel = new AlignmentPanel(this, viewport); - if(al.getDataset()==null) + if (al.getDataset() == null) { al.setDataset(null); } - addAlignmentPanel(alignPanel); + addAlignmentPanel(alignPanel, true); init(); } @@ -106,8 +103,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener { viewport = ap.av; alignPanel = ap; - alignPanel.alignFrame = this; - addAlignmentPanel(ap); + addAlignmentPanel(ap, false); init(); } @@ -120,284 +116,283 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener BLOSUM62Colour.setEnabled(false); conservationMenuItem.setEnabled(false); modifyConservation.setEnabled(false); - // PIDColour.setEnabled(false); - // abovePIDThreshold.setEnabled(false); - // modifyPID.setEnabled(false); + // PIDColour.setEnabled(false); + // abovePIDThreshold.setEnabled(false); + // modifyPID.setEnabled(false); } String sortby = jalview.bin.Cache.getDefault("SORT_ALIGNMENT", "No sort"); if (sortby.equals("Id")) + { sortIDMenuItem_actionPerformed(null); + } else if (sortby.equals("Pairwise Identity")) + { sortPairwiseMenuItem_actionPerformed(null); + } if (Desktop.desktop != null) - { - addServiceListeners(); - setGUINucleotide(viewport.alignment.isNucleotide()); - } + { + addServiceListeners(); + setGUINucleotide(viewport.alignment.isNucleotide()); + } - if (jalview.bin.Cache.getDefault("WRAP_ALIGNMENT", false)) - { - wrapMenuItem.setSelected(true); - wrapMenuItem_actionPerformed(null); - } + setMenusFromViewport(viewport); - addKeyListener(); + if (viewport.wrapAlignment) + { + wrapMenuItem_actionPerformed(null); + } + + if (jalview.bin.Cache.getDefault("SHOW_OVERVIEW",false)) + { + this.overviewMenuItem_actionPerformed(null); + } + + addKeyListener(); + + } + + public void setFileName(String file, String format) + { + fileName = file; + currentFileFormat = format; + reload.setEnabled(true); } void addKeyListener() { - final AlignFrame af = this; - addKeyListener(new KeyAdapter() + addKeyListener(new KeyAdapter() + { + public void keyPressed(KeyEvent evt) { - public void keyPressed(KeyEvent evt) + if (viewport.cursorMode + && evt.getKeyCode() >= KeyEvent.VK_0 + && evt.getKeyCode() <= KeyEvent.VK_9) { - if (viewport.cursorMode - && evt.getKeyCode() >= KeyEvent.VK_0 - && evt.getKeyCode() <= KeyEvent.VK_9) - { - alignPanel.seqPanel.numberPressed(evt.getKeyChar()); - } - - switch (evt.getKeyCode()) - { - case KeyEvent.VK_V: - if (!evt.isControlDown()) - { - AlignmentI al; - if(viewport.hasHiddenRows) - { - al = viewport.alignment.getHiddenSequences().getFullAlignment(); - } - else - al = new Alignment(viewport.alignment.getSequencesArray()); - - AlignViewport newview = new AlignViewport(al); - - AlignmentPanel copy = new AlignmentPanel(af, newview); - - if(viewport.viewName==null) - viewport.viewName="View 1"; + alignPanel.seqPanel.numberPressed(evt.getKeyChar()); + } - copy.av.sequenceSetID = viewport.getSequenceSetId(); - copy.av.viewName = "View " + - (Desktop.getViewCount(viewport.getSequenceSetId())+1); + switch (evt.getKeyCode()) + { + case 27: // escape key + deselectAllSequenceMenuItem_actionPerformed(null); - addAlignmentPanel(copy); - PaintRefresher.Register(copy, viewport.getSequenceSetId()); - PaintRefresher.Register(alignPanel, - viewport.getSequenceSetId()); + break; - } - break; - case KeyEvent.VK_G: - Desktop.instance.gatherViews(af); - break; + case KeyEvent.VK_DOWN: + if (viewport.cursorMode) + { + alignPanel.seqPanel.moveCursor(0, 1); + } + else + { + moveSelectedSequences(false); + } + break; - case KeyEvent.VK_X: - if (!evt.isControlDown()) - { - Desktop.instance.explodeViews(af); - } - break; + case KeyEvent.VK_UP: + if (viewport.cursorMode) + { + alignPanel.seqPanel.moveCursor(0, -1); + } + else + { + moveSelectedSequences(true); + } + break; + case KeyEvent.VK_LEFT: + if (viewport.cursorMode) + { + alignPanel.seqPanel.moveCursor( -1, 0); + } + break; - case 27: // escape key - deselectAllSequenceMenuItem_actionPerformed(null); + case KeyEvent.VK_RIGHT: + if (viewport.cursorMode) + { + alignPanel.seqPanel.moveCursor(1, 0); + } + break; - break; + case KeyEvent.VK_SPACE: + if (viewport.cursorMode) + { + alignPanel.seqPanel.insertGapAtCursor(evt.isControlDown() + || evt.isShiftDown() + || evt.isAltDown()); + } + break; - case KeyEvent.VK_DOWN: - if (viewport.cursorMode) - { - alignPanel.seqPanel.moveCursor(0, 1); - } - else - moveSelectedSequences(false); - break; + case KeyEvent.VK_DELETE: + case KeyEvent.VK_BACK_SPACE: + if (!viewport.cursorMode) + { + cut_actionPerformed(null); + } + else + { + alignPanel.seqPanel.deleteGapAtCursor(evt.isControlDown() + || evt.isShiftDown() + || evt.isAltDown()); + } - case KeyEvent.VK_UP: - if (viewport.cursorMode) - { - alignPanel.seqPanel.moveCursor(0, -1); - } - else - moveSelectedSequences(true); - break; + break; - case KeyEvent.VK_LEFT: - if (viewport.cursorMode) - { - alignPanel.seqPanel.moveCursor( -1, 0); - } - break; + case KeyEvent.VK_S: + if (viewport.cursorMode) + { + alignPanel.seqPanel.setCursorRow(); + } + break; + case KeyEvent.VK_C: + if (viewport.cursorMode && !evt.isControlDown()) + { + alignPanel.seqPanel.setCursorColumn(); + } + break; + case KeyEvent.VK_P: + if (viewport.cursorMode) + { + alignPanel.seqPanel.setCursorPosition(); + } + break; - case KeyEvent.VK_RIGHT: - if (viewport.cursorMode) - { - alignPanel.seqPanel.moveCursor(1, 0); - } - break; + case KeyEvent.VK_ENTER: + case KeyEvent.VK_COMMA: + if (viewport.cursorMode) + { + alignPanel.seqPanel.setCursorRowAndColumn(); + } + break; - case KeyEvent.VK_SPACE: - if (viewport.cursorMode) - { - alignPanel.seqPanel.insertGapAtCursor(evt.isControlDown() - || evt.isShiftDown() - || evt.isAltDown()); - } - break; + case KeyEvent.VK_Q: + if (viewport.cursorMode) + { + alignPanel.seqPanel.setSelectionAreaAtCursor(true); + } + break; + case KeyEvent.VK_M: + if (viewport.cursorMode) + { + alignPanel.seqPanel.setSelectionAreaAtCursor(false); + } + break; - case KeyEvent.VK_DELETE: - case KeyEvent.VK_BACK_SPACE: - if (!viewport.cursorMode) - { - cut_actionPerformed(null); - } - else - alignPanel.seqPanel.deleteGapAtCursor(evt.isControlDown() - || evt.isShiftDown() - || evt.isAltDown()); + case KeyEvent.VK_F2: + viewport.cursorMode = !viewport.cursorMode; + statusBar.setText("Keyboard editing mode is " + + (viewport.cursorMode ? "on" : "off")); + if (viewport.cursorMode) + { + alignPanel.seqPanel.seqCanvas.cursorX = viewport.startRes; + alignPanel.seqPanel.seqCanvas.cursorY = viewport.startSeq; + } + alignPanel.seqPanel.seqCanvas.repaint(); + break; - break; + case KeyEvent.VK_F1: + try + { + ClassLoader cl = jalview.gui.Desktop.class.getClassLoader(); + java.net.URL url = javax.help.HelpSet.findHelpSet(cl, "help/help"); + javax.help.HelpSet hs = new javax.help.HelpSet(cl, url); - case KeyEvent.VK_S: - if (viewport.cursorMode) - { - alignPanel.seqPanel.setCursorRow(); - } - break; - case KeyEvent.VK_C: - if (viewport.cursorMode && !evt.isControlDown()) - { - alignPanel.seqPanel.setCursorColumn(); - } - break; - case KeyEvent.VK_P: - if (viewport.cursorMode) - { - alignPanel.seqPanel.setCursorPosition(); - } - break; + javax.help.HelpBroker hb = hs.createHelpBroker(); + hb.setCurrentID("home"); + hb.setDisplayed(true); + } + catch (Exception ex) + { + ex.printStackTrace(); + } + break + ; + case KeyEvent.VK_H: + { + boolean toggleSeqs = !evt.isControlDown(); + boolean toggleCols = !evt.isShiftDown(); - case KeyEvent.VK_ENTER: - case KeyEvent.VK_COMMA: - if (viewport.cursorMode) - { - alignPanel.seqPanel.setCursorRowAndColumn(); - } - break; + boolean hide = false; - case KeyEvent.VK_Q: - if (viewport.cursorMode) - { - alignPanel.seqPanel.setSelectionAreaAtCursor(true); - } - break; - case KeyEvent.VK_M: - if (viewport.cursorMode) + SequenceGroup sg = viewport.getSelectionGroup(); + if (toggleSeqs) + { + if (sg != null && sg.getSize() != viewport.alignment.getHeight()) { - alignPanel.seqPanel.setSelectionAreaAtCursor(false); + hideSelSequences_actionPerformed(null); + hide = true; } - break; - - case KeyEvent.VK_F2: - viewport.cursorMode = !viewport.cursorMode; - statusBar.setText("Keyboard editing mode is " + - (viewport.cursorMode ? "on" : "off")); - if (viewport.cursorMode) + else if (! (toggleCols && + viewport.colSel.getSelected().size() > 0)) { - alignPanel.seqPanel.seqCanvas.cursorX = viewport.startRes; - alignPanel.seqPanel.seqCanvas.cursorY = viewport.startSeq; + showAllSeqs_actionPerformed(null); } - alignPanel.seqPanel.seqCanvas.repaint(); - break; - - case KeyEvent.VK_F1: - try - { - ClassLoader cl = jalview.gui.Desktop.class.getClassLoader(); - java.net.URL url = javax.help.HelpSet.findHelpSet(cl, "help/help"); - javax.help.HelpSet hs = new javax.help.HelpSet(cl, url); + } - javax.help.HelpBroker hb = hs.createHelpBroker(); - hb.setCurrentID("home"); - hb.setDisplayed(true); - } - catch (Exception ex) - { - ex.printStackTrace(); - } - break - ; - case KeyEvent.VK_H: + if (toggleCols) { - boolean toggleSeqs = !evt.isControlDown(); - boolean toggleCols = !evt.isShiftDown(); - - boolean hide = false; - - SequenceGroup sg = viewport.getSelectionGroup(); - if (toggleSeqs) + if (viewport.colSel.getSelected().size() > 0) { - if (sg != null && sg.getSize(false) != viewport.alignment.getHeight()) + hideSelColumns_actionPerformed(null); + if (!toggleSeqs) { - hideSelSequences_actionPerformed(null); - hide = true; + viewport.selectionGroup = sg; } - else if (! (toggleCols && viewport.colSel.getSelected().size() > 0)) - showAllSeqs_actionPerformed(null); } - - if (toggleCols) + else if (!hide) { - if (viewport.colSel.getSelected().size() > 0) - { - hideSelColumns_actionPerformed(null); - if (!toggleSeqs) - viewport.selectionGroup = sg; - } - else if (!hide) - showAllColumns_actionPerformed(null); + showAllColumns_actionPerformed(null); } - break; } - case KeyEvent.VK_PAGE_UP: - if (viewport.wrapAlignment) - alignPanel.scrollUp(true); - else - alignPanel.setScrollValues(viewport.startRes, - viewport.startSeq - - viewport.endSeq + viewport.startSeq); - break; - case KeyEvent.VK_PAGE_DOWN: - if (viewport.wrapAlignment) - alignPanel.scrollUp(false); - else - alignPanel.setScrollValues(viewport.startRes, - viewport.startSeq - + viewport.endSeq - viewport.startSeq); - break; - - + break; } + case KeyEvent.VK_PAGE_UP: + if (viewport.wrapAlignment) + { + alignPanel.scrollUp(true); + } + else + { + alignPanel.setScrollValues(viewport.startRes, + viewport.startSeq + - viewport.endSeq + viewport.startSeq); + } + break; + case KeyEvent.VK_PAGE_DOWN: + if (viewport.wrapAlignment) + { + alignPanel.scrollUp(false); + } + else + { + alignPanel.setScrollValues(viewport.startRes, + viewport.startSeq + + viewport.endSeq - viewport.startSeq); + } + break; } - }); + } + }); } - - public void addAlignmentPanel(final AlignmentPanel ap) + public void addAlignmentPanel(final AlignmentPanel ap, + boolean newPanel) { + ap.alignFrame = this; + alignPanels.addElement(ap); + PaintRefresher.Register(ap, ap.av.getSequenceSetId()); + int aSize = alignPanels.size(); - tabbedPane.setVisible(aSize>1 || ap.av.viewName!=null); + tabbedPane.setVisible(aSize > 1 || ap.av.viewName != null); - if (aSize == 1 && ap.av.viewName==null) + if (aSize == 1 && ap.av.viewName == null) { this.getContentPane().add(ap, BorderLayout.CENTER); } @@ -405,35 +400,36 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener { if (aSize == 2) { - AlignmentPanel first = (AlignmentPanel) alignPanels.firstElement(); - tabbedPane.addTab(first.av.viewName==null?"Original":first.av.viewName,first); - - this.getContentPane().add(tabbedPane, BorderLayout.CENTER); + setInitialTabVisible(); } - tabbedPane.addTab(ap.av.viewName==null?"Original":ap.av.viewName, ap); - } - - ap.av.updateConsensus(ap); - ap.av.updateConservation(ap); + expandViews.setEnabled(true); + gatherViews.setEnabled(true); + tabbedPane.addTab(ap.av.viewName, ap); + ap.setVisible(false); + } - ap.av.addPropertyChangeListener(new PropertyChangeListener() + if (newPanel) { - public void propertyChange(PropertyChangeEvent evt) - { - if (evt.getPropertyName().equals("alignment")) - { - PaintRefresher.Refresh(ap, ap.av.getSequenceSetId()); - alignmentChanged(); - } - } - }); - + if (ap.av.padGaps) + { + ap.av.alignment.padGaps(); + } + ap.av.updateConservation(ap); + ap.av.updateConsensus(ap); + } } - - + public void setInitialTabVisible() + { + expandViews.setEnabled(true); + gatherViews.setEnabled(true); + tabbedPane.setVisible(true); + AlignmentPanel first = (AlignmentPanel) alignPanels.firstElement(); + tabbedPane.addTab(first.av.viewName, first); + this.getContentPane().add(tabbedPane, BorderLayout.CENTER); + } public AlignViewport getViewport() { @@ -468,7 +464,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener { // System.out.println("deregistering discoverer listener"); Desktop.discoverer.removePropertyChangeListener(thisListener); - closeMenuItem_actionPerformed(null); + closeMenuItem_actionPerformed(true); } ; }); @@ -476,39 +472,72 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener public void setGUINucleotide(boolean nucleotide) { - showTranslation.setVisible( nucleotide ); - //sequenceFeatures.setVisible(!nucleotide ); - //featureSettings.setVisible( !nucleotide ); - conservationMenuItem.setVisible( !nucleotide ); - modifyConservation.setVisible( !nucleotide ); + showTranslation.setVisible(nucleotide); + conservationMenuItem.setEnabled(!nucleotide); + modifyConservation.setEnabled(!nucleotide); //Remember AlignFrame always starts as protein - if(!nucleotide) + if (!nucleotide) { - calculateMenu.remove(calculateMenu.getItemCount()-2); + calculateMenu.remove(calculateMenu.getItemCount() - 2); } } + /** + * Need to call this method when tabs are selected for multiple views, + * or when loading from Jalview2XML.java + * @param av AlignViewport + */ + void setMenusFromViewport(AlignViewport av) + { + padGapsMenuitem.setSelected(av.padGaps); + colourTextMenuItem.setSelected(av.showColourText); + abovePIDThreshold.setSelected(av.getAbovePIDThreshold()); + conservationMenuItem.setSelected(av.getConservationSelected()); + seqLimits.setSelected(av.getShowJVSuffix()); + idRightAlign.setSelected(av.rightAlignIds); + renderGapsMenuItem.setSelected(av.renderGaps); + wrapMenuItem.setSelected(av.wrapAlignment); + scaleAbove.setVisible(av.wrapAlignment); + scaleLeft.setVisible(av.wrapAlignment); + scaleRight.setVisible(av.wrapAlignment); + annotationPanelMenuItem.setState(av.showAnnotation); + viewBoxesMenuItem.setSelected(av.showBoxes); + viewTextMenuItem.setSelected(av.showText); + + setColourSelected(ColourSchemeProperty. + getColourName(av.getGlobalColourScheme())); + + showSeqFeatures.setSelected(av.showSequenceFeatures); + hiddenMarkers.setState(av.showHiddenMarkers); + applyToAllGroups.setState(av.colourAppliesToAllGroups); + + updateEditMenuBar(); + } Hashtable progressBars; public void setProgressBar(String message, long id) { - if(progressBars == null) + 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); - } + 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)); @@ -528,15 +557,12 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener validate(); } - - - /* Added so Castor Mapping file can obtain Jalview Version - */ + */ public String getVersion() { - return jalview.bin.Cache.getProperty("VERSION"); + return jalview.bin.Cache.getProperty("VERSION"); } public FeatureRenderer getFeatureRenderer() @@ -544,7 +570,6 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener return alignPanel.seqPanel.seqCanvas.getFeatureRenderer(); } - public void fetchSequence_actionPerformed(ActionEvent e) { new SequenceFetcher(this); @@ -555,6 +580,48 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener Desktop.instance.inputLocalFileMenuItem_actionPerformed(viewport); } + public void reload_actionPerformed(ActionEvent e) + { + if (fileName != null) + { + if (currentFileFormat.equals("Jalview")) + { + JInternalFrame[] frames = Desktop.desktop.getAllFrames(); + for (int i = 0; i < frames.length; i++) + { + if (frames[i] instanceof AlignFrame + && frames[i] != this + && ( (AlignFrame) frames[i]).fileName.equals(fileName)) + { + try + { + frames[i].setSelected(true); + Desktop.instance.closeAssociatedWindows(); + } + catch (java.beans.PropertyVetoException ex) + {} + } + + } + Desktop.instance.closeAssociatedWindows(); + + } + else + { + Rectangle bounds = this.getBounds(); + + FileLoader loader = new FileLoader(); + String protocol = fileName.startsWith("http:") ? "URL" : "File"; + AlignFrame newframe = + loader.LoadFileWaitTillLoaded(fileName, protocol, currentFileFormat); + + newframe.setBounds(bounds); + + this.closeMenuItem_actionPerformed(true); + } + } + } + public void addFromText_actionPerformed(ActionEvent e) { Desktop.instance.inputTextboxMenuItem_actionPerformed(viewport); @@ -565,23 +632,37 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener Desktop.instance.inputURLMenuItem_actionPerformed(viewport); } + public void save_actionPerformed(ActionEvent e) + { + if (fileName == null + || currentFileFormat == null + || fileName.startsWith("http") + ) + { + saveAs_actionPerformed(null); + } + else + { + saveAlignment(fileName, currentFileFormat); + } + } + /** * DOCUMENT ME! * * @param e DOCUMENT ME! */ - public void saveAlignmentMenu_actionPerformed(ActionEvent e) + public void saveAs_actionPerformed(ActionEvent e) { JalviewFileChooser chooser = new JalviewFileChooser(jalview.bin.Cache. - getProperty( "LAST_DIRECTORY"), + getProperty("LAST_DIRECTORY"), new String[] - { "fa, fasta, fastq", "aln", "pfam", "msf", "pir", "blc","jar" }, + {"fa, fasta, fastq", "aln", "pfam", "msf", "pir", "blc", "jar"}, new String[] - { "Fasta", "Clustal", "PFAM", "MSF", "PIR", "BLC", "Jalview" }, + {"Fasta", "Clustal", "PFAM", "MSF", "PIR", "BLC", "Jalview"}, currentFileFormat, false); - chooser.setFileView(new JalviewFileView()); chooser.setDialogTitle("Save Alignment to file"); chooser.setToolTipText("Save"); @@ -590,30 +671,32 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener if (value == JalviewFileChooser.APPROVE_OPTION) { - currentFileFormat = chooser.getSelectedFormat(); + currentFileFormat = chooser.getSelectedFormat(); + if (currentFileFormat == null) + { + JOptionPane.showInternalMessageDialog(Desktop.desktop, + "You must select a file format before saving!", + "File format not specified", + JOptionPane.WARNING_MESSAGE); + value = chooser.showSaveDialog(this); + return; + } - if (currentFileFormat == null) - { - JOptionPane.showInternalMessageDialog(Desktop.desktop, - "You must select a file format before saving!", - "File format not specified", - JOptionPane.WARNING_MESSAGE); - value = chooser.showSaveDialog(this); - return; - } + fileName = chooser.getSelectedFile().getPath(); jalview.bin.Cache.setProperty("DEFAULT_FILE_FORMAT", currentFileFormat); - String choice = chooser.getSelectedFile().getPath(); - jalview.bin.Cache.setProperty("LAST_DIRECTORY", choice); + jalview.bin.Cache.setProperty("LAST_DIRECTORY", fileName); - saveAlignment(choice, currentFileFormat); + saveAlignment(fileName, currentFileFormat); } } public boolean saveAlignment(String file, String format) { + boolean success = true; + if (format.equalsIgnoreCase("Jalview")) { String shortName = title; @@ -624,10 +707,12 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener java.io.File.separatorChar) + 1); } - new Jalview2XML().SaveAlignment(this, file, shortName); + success = new Jalview2XML().SaveAlignment(this, file, shortName); + + statusBar.setText("Successfully saved to file: " + + fileName + " in " + + format + " format."); - // USE Jalview2XML to save this file - return true; } else { @@ -643,7 +728,9 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE); if (reply == JOptionPane.YES_OPTION) + { omitHidden = viewport.getViewAsString(false); + } } String output = new FormatAdapter().formatSequences( @@ -653,25 +740,39 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener if (output == null) { - return false; - } - - try - { - java.io.PrintWriter out = new java.io.PrintWriter( - new java.io.FileWriter(file)); - - out.print(output); - out.close(); - this.setTitle(file); - return true; + success = false; } - catch (Exception ex) + else { - ex.printStackTrace(); + try + { + java.io.PrintWriter out = new java.io.PrintWriter( + new java.io.FileWriter(file)); + + out.print(output); + out.close(); + this.setTitle(file); + statusBar.setText("Successfully saved to file: " + + fileName + " in " + + format + " format."); + } + catch (Exception ex) + { + success = false; + ex.printStackTrace(); + } } } - return false; + + if (!success) + { + JOptionPane.showInternalMessageDialog( + this, "Couldn't save file: " + fileName, + "Error Saving File", + JOptionPane.WARNING_MESSAGE); + } + + return success; } /** @@ -681,28 +782,28 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener */ protected void outputText_actionPerformed(ActionEvent e) { - String [] omitHidden = null; + String[] omitHidden = null; - if(viewport.hasHiddenColumns) + 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); + + "\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) + if (reply == JOptionPane.YES_OPTION) { omitHidden = viewport.getViewAsString(false); } } CutAndPasteTransfer cap = new CutAndPasteTransfer(); + cap.setForInput(null); Desktop.addInternalFrame(cap, "Alignment output - " + e.getActionCommand(), 600, 500); - cap.setText(new FormatAdapter().formatSequences( e.getActionCommand(), viewport.alignment.getSequencesArray(), @@ -718,7 +819,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener { new HTMLOutput(viewport, alignPanel.seqPanel.seqCanvas.getSequenceRenderer(), - alignPanel.seqPanel.seqCanvas.getFeatureRenderer()); + alignPanel.seqPanel.seqCanvas.getFeatureRenderer()); } public void createImageMap(File file, String image) @@ -746,6 +847,12 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener alignPanel.makeEPS(f); } + public void pageSetup_actionPerformed(ActionEvent e) + { + PrinterJob printJob = PrinterJob.getPrinterJob(); + PrintThread.pf = printJob.pageDialog(printJob.defaultPage()); + } + /** * DOCUMENT ME! * @@ -754,7 +861,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener public void printMenuItem_actionPerformed(ActionEvent e) { //Putting in a thread avoids Swing painting problems - PrintThread thread = new PrintThread(); + PrintThread thread = new PrintThread(alignPanel); thread.start(); } @@ -763,16 +870,15 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener new AnnotationExporter().exportFeatures(alignPanel); } - public void exportAnnotations_actionPerformed(ActionEvent e) { new AnnotationExporter().exportAnnotations( - alignPanel, - viewport.alignment.getAlignmentAnnotation() + alignPanel, + viewport.showAnnotation ? viewport.alignment.getAlignmentAnnotation() : null, + viewport.alignment.getGroups() ); } - public void associatedData_actionPerformed(ActionEvent e) { // Pick the tree file @@ -794,42 +900,76 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener } - /** * DOCUMENT ME! * * @param e DOCUMENT ME! */ - public void closeMenuItem_actionPerformed(ActionEvent e) + public void closeMenuItem_actionPerformed(boolean closeAllTabs) { + if (alignPanels != null && alignPanels.size() < 2) + { + closeAllTabs = true; + } + try { - for(int i=0; i 0) + if (viewport.historyList.size() > 0) { undoMenuItem.setEnabled(true); - CommandI command = (CommandI) historyList.peek(); + CommandI command = (CommandI) viewport.historyList.peek(); undoMenuItem.setText("Undo " + command.getDescription()); } else @@ -838,11 +978,11 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener undoMenuItem.setText("Undo"); } - if (redoList.size() > 0) + if (viewport.redoList.size() > 0) { redoMenuItem.setEnabled(true); - CommandI command = (CommandI) redoList.peek(); + CommandI command = (CommandI) viewport.redoList.peek(); redoMenuItem.setText("Redo " + command.getDescription()); } else @@ -852,20 +992,17 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener } } - public void addHistoryItem(CommandI command) { - if(command.getSize()>0) + if (command.getSize() > 0) { - historyList.push(command); - redoList.clear(); + viewport.historyList.push(command); + viewport.redoList.clear(); updateEditMenuBar(); viewport.hasHiddenColumns = viewport.colSel.getHiddenColumns() != null; } } - - /** * DOCUMENT ME! * @@ -873,14 +1010,20 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener */ protected void undoMenuItem_actionPerformed(ActionEvent e) { - CommandI command = (CommandI)historyList.pop(); - redoList.push(command); + CommandI command = (CommandI) viewport.historyList.pop(); + viewport.redoList.push(command); command.undoCommand(); + AlignViewport originalSource = getOriginatingSource(command); + updateEditMenuBar(); - viewport.hasHiddenColumns = viewport.colSel.getHiddenColumns()!=null; - updateEditMenuBar(); - viewport.firePropertyChange("alignment", null, viewport.getAlignment().getSequences()); + if (originalSource != null) + { + originalSource.hasHiddenColumns = viewport.colSel.getHiddenColumns() != null; + originalSource.firePropertyChange("alignment", + null, + originalSource.alignment.getSequences()); + } } /** @@ -890,16 +1033,68 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener */ protected void redoMenuItem_actionPerformed(ActionEvent e) { - CommandI command = (CommandI) redoList.pop(); - historyList.push(command); - historyList.push(command); + if (viewport.redoList.size() < 1) + { + return; + } + + CommandI command = (CommandI) viewport.redoList.pop(); + viewport.historyList.push(command); command.doCommand(); - viewport.hasHiddenColumns = viewport.colSel.getHiddenColumns()!=null; + AlignViewport originalSource = getOriginatingSource(command); updateEditMenuBar(); - viewport.firePropertyChange("alignment", null, viewport.getAlignment().getSequences()); + + if (originalSource != null) + { + originalSource.hasHiddenColumns = viewport.colSel.getHiddenColumns() != null; + originalSource.firePropertyChange("alignment", + null, + originalSource.alignment.getSequences()); + } } + AlignViewport getOriginatingSource(CommandI command) + { + AlignViewport originalSource = null; + //For sequence removal and addition, we need to fire + //the property change event FROM the viewport where the + //original alignment was altered + AlignmentI al = null; + if (command instanceof EditCommand) + { + EditCommand editCommand = (EditCommand) command; + al = editCommand.getAlignment(); + Vector comps = (Vector) PaintRefresher.components + .get(viewport.getSequenceSetId()); + + for (int i = 0; i < comps.size(); i++) + { + if (comps.elementAt(i) instanceof AlignmentPanel) + { + if (al == ( (AlignmentPanel) comps.elementAt(i)).av.alignment) + { + originalSource = ( (AlignmentPanel) comps.elementAt(i)).av; + break; + } + } + } + } + + if (originalSource == null) + { + //The original view is closed, we must validate + //the current view against the closed view first + if (al != null) + { + PaintRefresher.validateSequences(al, viewport.alignment); + } + + originalSource = viewport; + } + + return originalSource; + } /** * DOCUMENT ME! @@ -921,14 +1116,14 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener { SequenceI seq = viewport.alignment.getSequenceAt(i); - if (!sg.getSequences(false).contains(seq)) + if (!sg.getSequences(null).contains(seq)) { continue; } SequenceI temp = viewport.alignment.getSequenceAt(i - 1); - if (sg.getSequences(false).contains(temp)) + if (sg.getSequences(null).contains(temp)) { continue; } @@ -943,14 +1138,14 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener { SequenceI seq = viewport.alignment.getSequenceAt(i); - if (!sg.getSequences(false).contains(seq)) + if (!sg.getSequences(null).contains(seq)) { continue; } SequenceI temp = viewport.alignment.getSequenceAt(i + 1); - if (sg.getSequences(false).contains(temp)) + if (sg.getSequences(null).contains(temp)) { continue; } @@ -963,8 +1158,6 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener alignPanel.repaint(); } - - /** * DOCUMENT ME! * @@ -978,7 +1171,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener return; } - SequenceI [] seqs = viewport.getSelectionAsNewSequence(); + SequenceI[] seqs = viewport.getSelectionAsNewSequence(); String[] omitHidden = null; if (viewport.hasHiddenColumns) @@ -995,6 +1188,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener try { + jalview.gui.Desktop.internalCopy = true; //Its really worth setting the clipboard contents //to empty before setting the large StringSelection!! Toolkit.getDefaultToolkit().getSystemClipboard() @@ -1007,42 +1201,44 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener { er.printStackTrace(); javax.swing.SwingUtilities.invokeLater(new Runnable() - { - public void run() - { - javax.swing.JOptionPane.showInternalMessageDialog(Desktop.desktop, - "Out of memory copying region!!" - + - "\nSee help files for increasing Java Virtual Machine memory." - , "Out of memory", - javax.swing.JOptionPane.WARNING_MESSAGE); - } - }); + { + public void run() + { + javax.swing.JOptionPane.showInternalMessageDialog(Desktop.desktop, + "Out of memory copying region!!" + + + "\nSee help files for increasing Java Virtual Machine memory." + , "Out of memory", + javax.swing.JOptionPane.WARNING_MESSAGE); + } + }); return; } Vector hiddenColumns = null; - if(viewport.hasHiddenColumns) + if (viewport.hasHiddenColumns) { - hiddenColumns =new Vector(); + 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( - alignPanel.seqPanel.seqCanvas.getFeatureRenderer()); + if (newAlignment) + { + AlignFrame af = new AlignFrame(alignment, DEFAULT_WIDTH, DEFAULT_HEIGHT); + String newtitle = new String("Copied sequences"); + if (Desktop.jalviewClipboard != null && Desktop.jalviewClipboard[2] != null) + { + Vector hc = (Vector) Desktop.jalviewClipboard[2]; + for (int i = 0; i < hc.size(); i++) + { + int[] region = (int[]) hc.elementAt(i); + af.viewport.hideColumns(region[0], region[1]); + } + } - if (title.startsWith("Copied sequences")) - { - newtitle = title; - } - else - { - newtitle = newtitle.concat("- from " + title); - } + //>>>This is a fix for the moment, until a better solution is found!!<<< + af.alignPanel.seqPanel.seqCanvas.getFeatureRenderer().transferSettings( + alignPanel.seqPanel.seqCanvas.getFeatureRenderer()); - Desktop.addInternalFrame(af, newtitle, DEFAULT_WIDTH, - DEFAULT_HEIGHT); + if (title.startsWith("Copied sequences")) + { + newtitle = title; + } + else + { + newtitle = newtitle.concat("- from " + title); + } - } + Desktop.addInternalFrame(af, newtitle, DEFAULT_WIDTH, + DEFAULT_HEIGHT); + } } catch (Exception ex) { ex.printStackTrace(); - System.out.println("Exception whilst pasting: "+ex); - // could be anything being pasted in here + System.out.println("Exception whilst pasting: " + ex); + // could be anything being pasted in here } - } /** @@ -1267,7 +1459,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener * * @param e DOCUMENT ME! */ - protected void delete_actionPerformed(ActionEvent e) + protected void delete_actionPerformed(ActionEvent evt) { SequenceGroup sg = viewport.getSelectionGroup(); @@ -1277,47 +1469,41 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener } Vector seqs = new Vector(); - int cutLength = sg.getEndRes()-sg.getStartRes()+1; SequenceI seq; - for (int i = 0; i < sg.getSize(false); i++) + for (int i = 0; i < sg.getSize(); i++) { seq = sg.getSequenceAt(i); seqs.addElement(seq); - if(seq.getLength()<=cutLength) - PaintRefresher.Refresh(alignPanel, - alignPanel.av.getSequenceSetId(), - seq, - null); } - // If the cut affects all sequences, remove highlighted columns - if (sg.getSize(false) == viewport.alignment.getHeight()) - { - viewport.getColumnSelection().removeElements(sg.getStartRes(), - sg.getEndRes() + 1); - } - - - SequenceI [] cut = new SequenceI[seqs.size()]; - for(int i=0; i 0) { - if(trimLeft) + if (trimLeft) + { column = colSel.getMin(); + } else + { column = colSel.getMax(); + } - SequenceI [] seqs; - if(viewport.getSelectionGroup()!=null) - seqs = viewport.getSelectionGroup().getSequencesAsArray(true); + SequenceI[] seqs; + if (viewport.getSelectionGroup() != null) + { + seqs = viewport.getSelectionGroup().getSequencesAsArray(viewport. + hiddenRepSequences); + } else + { seqs = viewport.alignment.getSequencesArray(); - + } TrimRegionCommand trimRegion; - if(trimLeft) + if (trimLeft) { trimRegion = new TrimRegionCommand("Remove Left", - TrimRegionCommand.TRIM_LEFT, - seqs, - column, - viewport.alignment, - viewport.colSel, - viewport.selectionGroup); - } - else - { - trimRegion = new TrimRegionCommand("Remove Right", - TrimRegionCommand.TRIM_RIGHT, - seqs, - column, - viewport.alignment, - viewport.colSel, - viewport.selectionGroup); - } - - statusBar.setText("Removed "+trimRegion.getSize()+" columns."); + TrimRegionCommand.TRIM_LEFT, + seqs, + column, + viewport.alignment, + viewport.colSel, + viewport.selectionGroup); + viewport.setStartRes(0); + } + else + { + trimRegion = new TrimRegionCommand("Remove Right", + TrimRegionCommand.TRIM_RIGHT, + seqs, + column, + viewport.alignment, + viewport.colSel, + viewport.selectionGroup); + } + statusBar.setText("Removed " + trimRegion.getSize() + " columns."); addHistoryItem(trimRegion); @@ -1497,7 +1693,8 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener } } - viewport.firePropertyChange("alignment", null, viewport.getAlignment().getSequences()); + viewport.firePropertyChange("alignment", null, + viewport.getAlignment().getSequences()); } } @@ -1508,40 +1705,43 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener */ public void removeGappedColumnMenuItem_actionPerformed(ActionEvent e) { - int start = 0, end = viewport.alignment.getWidth()-1; + int start = 0, end = viewport.alignment.getWidth() - 1; SequenceI[] seqs; if (viewport.getSelectionGroup() != null) { - seqs = viewport.getSelectionGroup().getSequencesAsArray(true); + seqs = viewport.getSelectionGroup().getSequencesAsArray(viewport. + hiddenRepSequences); start = viewport.getSelectionGroup().getStartRes(); end = viewport.getSelectionGroup().getEndRes(); } else + { seqs = viewport.alignment.getSequencesArray(); - + } RemoveGapColCommand removeGapCols = new RemoveGapColCommand("Remove Gapped Columns", seqs, start, end, - viewport.getGapCharacter()); + viewport.alignment); addHistoryItem(removeGapCols); - statusBar.setText("Removed "+removeGapCols.getSize()+" empty columns."); + statusBar.setText("Removed " + removeGapCols.getSize() + " empty columns."); //This is to maintain viewport position on first residue //of first sequence SequenceI seq = viewport.alignment.getSequenceAt(0); int startRes = seq.findPosition(viewport.startRes); - // ShiftList shifts; - // viewport.getAlignment().removeGaps(shifts=new ShiftList()); - // edit.alColumnChanges=shifts.getInverse(); - // if (viewport.hasHiddenColumns) - // viewport.getColumnSelection().compensateForEdits(shifts); - viewport.setStartRes(seq.findIndex(startRes)-1); - viewport.firePropertyChange("alignment", null, viewport.getAlignment().getSequences()); + // ShiftList shifts; + // viewport.getAlignment().removeGaps(shifts=new ShiftList()); + // edit.alColumnChanges=shifts.getInverse(); + // if (viewport.hasHiddenColumns) + // viewport.getColumnSelection().compensateForEdits(shifts); + viewport.setStartRes(seq.findIndex(startRes) - 1); + viewport.firePropertyChange("alignment", null, + viewport.getAlignment().getSequences()); } @@ -1552,103 +1752,36 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener */ public void removeAllGapsMenuItem_actionPerformed(ActionEvent e) { - int start = 0, end = viewport.alignment.getWidth()-1; + int start = 0, end = viewport.alignment.getWidth() - 1; SequenceI[] seqs; if (viewport.getSelectionGroup() != null) { - seqs = viewport.getSelectionGroup().getSequencesAsArray(true); + seqs = viewport.getSelectionGroup().getSequencesAsArray(viewport. + hiddenRepSequences); start = viewport.getSelectionGroup().getStartRes(); - end = viewport.getSelectionGroup().getEndRes(); - } - else - seqs = viewport.alignment.getSequencesArray(); - - //This is to maintain viewport position on first residue - //of first sequence - SequenceI seq = viewport.alignment.getSequenceAt(0); - int startRes = seq.findPosition(viewport.startRes); - - addHistoryItem(new RemoveGapsCommand("Remove Gaps", - seqs, - start, end, - viewport.getGapCharacter())); - - viewport.setStartRes(seq.findIndex(startRes)-1); - - viewport.firePropertyChange("alignment", null, viewport.getAlignment().getSequences()); - - } - - public void alignmentChanged() - { - AlignViewport av; - AlignmentPanel ap; - - for(int i=0; i 0)) || + (viewport.getSelectionGroup().getSize() < 4) && + (viewport.getSelectionGroup().getSize() > 0)) || (viewport.getAlignment().getHeight() < 4)) { JOptionPane.showInternalMessageDialog(this, @@ -2414,14 +2607,13 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener return; } - new PCAPanel(viewport); + new PCAPanel(alignPanel); } - public void autoCalculate_actionPerformed(ActionEvent e) { viewport.autoCalculateConsensus = autoCalculate.isSelected(); - if(viewport.autoCalculateConsensus) + if (viewport.autoCalculateConsensus) { viewport.firePropertyChange("alignment", null, @@ -2429,7 +2621,6 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener } } - /** * DOCUMENT ME! * @@ -2481,8 +2672,10 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener { TreePanel tp; - if (viewport.getSelectionGroup() != null) { - if (viewport.getSelectionGroup().getSize(false) < 3) { + if (viewport.getSelectionGroup() != null) + { + if (viewport.getSelectionGroup().getSize() < 3) + { JOptionPane.showMessageDialog(Desktop.desktop, "You need to have more than two sequences selected to build a tree!", "Not enough sequences", @@ -2494,9 +2687,9 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener SequenceGroup sg = viewport.getSelectionGroup(); /* Decide if the selection is a column region */ - while (s < sg.getSize(false)) + while (s < sg.getSize()) { - if ( ( (SequenceI) sg.getSequences(false).elementAt(s++)).getLength() < + if ( ( (SequenceI) sg.getSequences(null).elementAt(s++)).getLength() < sg.getEndRes()) { JOptionPane.showMessageDialog(Desktop.desktop, @@ -2528,15 +2721,24 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener return; } - if(viewport.alignment.getHeight()<2) + if (viewport.alignment.getHeight() < 2) + { return; + } tp = new TreePanel(alignPanel, type, pwType); } - addTreeMenuItem(tp, title); + title += " from "; + + if (viewport.viewName != null) + { + title += viewport.viewName + " of "; + } + + title += this.title; - Desktop.addInternalFrame(tp, title + " from " + this.title, 600, 500); + Desktop.addInternalFrame(tp, title, 600, 500); } /** @@ -2553,12 +2755,13 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener { public void actionPerformed(ActionEvent e) { - SequenceI [] oldOrder = viewport.getAlignment().getSequencesArray(); + SequenceI[] oldOrder = viewport.getAlignment().getSequencesArray(); // TODO: JBPNote - have to map order entries to curent SequenceI pointers AlignmentSorter.sortBy(viewport.getAlignment(), order); - addHistoryItem(new OrderCommand(order.getName(), oldOrder, viewport.alignment)); + addHistoryItem(new OrderCommand(order.getName(), oldOrder, + viewport.alignment)); alignPanel.repaint(); } @@ -2574,51 +2777,54 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener * @param treePanel Displayed tree window. * @param title SortBy menu item title. */ - void addTreeMenuItem(final TreePanel treePanel, String title) + public void buildTreeMenu() { - final JMenuItem item = new JMenuItem(title); - - treeCount++; - - if (treeCount == 1) - { - sort.add(sortByTreeMenu); - } + sortByTreeMenu.removeAll(); - sortByTreeMenu.add(item); - item.addActionListener(new java.awt.event.ActionListener() + Vector comps = (Vector) PaintRefresher.components.get(viewport. + getSequenceSetId()); + Vector treePanels = new Vector(); + int i, iSize = comps.size(); + for (i = 0; i < iSize; i++) { - public void actionPerformed(ActionEvent e) + if (comps.elementAt(i) instanceof TreePanel) { - SequenceI[] oldOrder = viewport.getAlignment().getSequencesArray(); - AlignmentSorter.sortByTree(viewport.getAlignment(), - treePanel.getTree()); + treePanels.add(comps.elementAt(i)); + } + } - addHistoryItem(new OrderCommand("Tree Sort", - oldOrder, - viewport.alignment)); + iSize = treePanels.size(); + if (iSize < 1) + { + sortByTreeMenu.setVisible(false); + return; + } - alignPanel.repaint(); - } - }); + sortByTreeMenu.setVisible(true); - treePanel.addInternalFrameListener(new javax.swing.event. - InternalFrameAdapter() + for (i = 0; i < treePanels.size(); i++) { - public void internalFrameClosed( - javax.swing.event.InternalFrameEvent evt) + TreePanel tp = (TreePanel) treePanels.elementAt(i); + final JMenuItem item = new JMenuItem(tp.getTitle()); + final NJTree tree = ( (TreePanel) treePanels.elementAt(i)).getTree(); + item.addActionListener(new java.awt.event.ActionListener() { - treeCount--; - sortByTreeMenu.remove(item); - - if (treeCount == 0) + public void actionPerformed(ActionEvent e) { - sort.remove(sortByTreeMenu); + SequenceI[] oldOrder = viewport.getAlignment().getSequencesArray(); + AlignmentSorter.sortByTree(viewport.getAlignment(), tree); + + addHistoryItem(new OrderCommand("Tree Sort", + oldOrder, + viewport.alignment)); + + alignPanel.repaint(); } - } - ; - }); + }); + + sortByTreeMenu.add(item); + } } /** @@ -2632,32 +2838,31 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener AlignmentView msa = null; if ( (viewport.getSelectionGroup() != null) && - (viewport.getSelectionGroup().getSize(false) > 1)) + (viewport.getSelectionGroup().getSize() > 1)) { // JBPNote UGLY! To prettify, make SequenceGroup and Alignment conform to some common interface! /*SequenceGroup seqs = viewport.getSelectionGroup(); - int sz; - msa = new SequenceI[sz = seqs.getSize(false)]; + int sz; + msa = new SequenceI[sz = seqs.getSize(false)]; - for (int i = 0; i < sz; i++) - { + for (int i = 0; i < sz; i++) + { msa[i] = (SequenceI) seqs.getSequenceAt(i); - } */ + } */ msa = viewport.getAlignmentView(true); } else { /*Vector seqs = viewport.getAlignment().getSequences(); - - if (seqs.size() > 1) - { + if (seqs.size() > 1) + { msa = new SequenceI[seqs.size()]; for (int i = 0; i < seqs.size(); i++) { msa[i] = (SequenceI) seqs.elementAt(i); } - }*/ + }*/ msa = viewport.getAlignmentView(false); } return msa; @@ -2671,10 +2876,10 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener */ AlignmentView gatherSeqOrMsaForSecStrPrediction() { - AlignmentView seqs = null; + AlignmentView seqs = null; if ( (viewport.getSelectionGroup() != null) && - (viewport.getSelectionGroup().getSize(false) > 0)) + (viewport.getSelectionGroup().getSize() > 0)) { seqs = viewport.getAlignmentView(true); } @@ -2686,10 +2891,12 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener // TODO: viewport.alignment.isAligned is a global state - the local selection may well be aligned - we preserve 2.0.8 behaviour for moment. if (!viewport.alignment.isAligned()) { - seqs.setSequences(new SeqCigar[] { seqs.getSequences()[0] } ); + seqs.setSequences(new SeqCigar[] + {seqs.getSequences()[0]}); } return seqs; } + /** * DOCUMENT ME! * @@ -2729,18 +2936,23 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener } } - public TreePanel ShowNewickTree(NewickFile nf, String title) { - return ShowNewickTree(nf,title,600,500,4,5); + return ShowNewickTree(nf, title, 600, 500, 4, 5); } - public TreePanel ShowNewickTree(NewickFile nf, String title, AlignmentView input) + + public TreePanel ShowNewickTree(NewickFile nf, String title, + AlignmentView input) { - return ShowNewickTree(nf,title, input, 600,500,4,5); + return ShowNewickTree(nf, title, input, 600, 500, 4, 5); } - public TreePanel ShowNewickTree(NewickFile nf, String title, int w,int h,int x, int y) { + + public TreePanel ShowNewickTree(NewickFile nf, String title, int w, int h, + int x, int y) + { return ShowNewickTree(nf, title, null, w, h, x, y); } + /** * Add a treeviewer for the tree extracted from a newick file object to the current alignment view * @@ -2753,7 +2965,10 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener * @param y position * @return TreePanel handle */ - public TreePanel ShowNewickTree(NewickFile nf, String title, AlignmentView input, int w,int h,int x, int y) { + public TreePanel ShowNewickTree(NewickFile nf, String title, + AlignmentView input, int w, int h, int x, + int y) + { TreePanel tp = null; try @@ -2767,14 +2982,14 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener title, nf, input); - tp.setSize(w,h); - - if(x>0 && y>0) - tp.setLocation(x,y); + tp.setSize(w, h); + if (x > 0 && y > 0) + { + tp.setLocation(x, y); + } Desktop.addInternalFrame(tp, title, w, h); - addTreeMenuItem(tp, title); } } catch (Exception ex) @@ -2785,29 +3000,6 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener return tp; } - class PrintThread - extends Thread - { - public void run() - { - PrinterJob printJob = PrinterJob.getPrinterJob(); - PageFormat pf = printJob.pageDialog(printJob.defaultPage()); - printJob.setPrintable(alignPanel, pf); - - if (printJob.printDialog()) - { - try - { - printJob.print(); - } - catch (Exception PrintException) - { - PrintException.printStackTrace(); - } - } - } - } - /** * Generates menu items and listener event actions for web service clients * @@ -2836,7 +3028,9 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener { AlignmentView msa = gatherSequencesForAlignment(); new jalview.ws.MsaWSClient(sh, title, msa, - false, true, viewport.getAlignment().getDataset(), af); + false, true, + viewport.getAlignment().getDataset(), + af); } @@ -2846,14 +3040,16 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener if (sh.getName().indexOf("lustal") > -1) { // We know that ClustalWS can accept partial alignments for refinement. - final JMenuItem methodR = new JMenuItem(sh.getName()+" Realign"); + final JMenuItem methodR = new JMenuItem(sh.getName() + " Realign"); methodR.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { AlignmentView msa = gatherSequencesForAlignment(); new jalview.ws.MsaWSClient(sh, title, msa, - true, true, viewport.getAlignment().getDataset(), af); + true, true, + viewport.getAlignment().getDataset(), + af); } @@ -2889,7 +3085,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener { // Sequence profile based prediction new jalview.ws.JPredClient(sh, - title, true, msa, af, true); + title, true, msa, af, true); } } } @@ -2914,138 +3110,144 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener // TODO: group services by location as well as function. } - /* public void vamsasStore_actionPerformed(ActionEvent e) - { - JalviewFileChooser chooser = new JalviewFileChooser(jalview.bin.Cache. - getProperty("LAST_DIRECTORY")); - - chooser.setFileView(new JalviewFileView()); - chooser.setDialogTitle("Export to Vamsas file"); - chooser.setToolTipText("Export"); - - int value = chooser.showSaveDialog(this); + /* public void vamsasStore_actionPerformed(ActionEvent e) + { + JalviewFileChooser chooser = new JalviewFileChooser(jalview.bin.Cache. + getProperty("LAST_DIRECTORY")); - if (value == JalviewFileChooser.APPROVE_OPTION) - { - jalview.io.VamsasDatastore vs = new jalview.io.VamsasDatastore(viewport); - //vs.store(chooser.getSelectedFile().getAbsolutePath() ); - vs.storeJalview( chooser.getSelectedFile().getAbsolutePath(), this); - } - }*/ + chooser.setFileView(new JalviewFileView()); + chooser.setDialogTitle("Export to Vamsas file"); + chooser.setToolTipText("Export"); + int value = chooser.showSaveDialog(this); + if (value == JalviewFileChooser.APPROVE_OPTION) + { + jalview.io.VamsasDatastore vs = new jalview.io.VamsasDatastore(viewport); + //vs.store(chooser.getSelectedFile().getAbsolutePath() ); + vs.storeJalview( chooser.getSelectedFile().getAbsolutePath(), this); + } + }*/ -public void showTranslation_actionPerformed(ActionEvent e) -{ - SequenceI [] selection = viewport.getSelectionAsNewSequence(); - String [] seqstring = viewport.getViewAsString(true); - - int s, sSize = selection.length; - SequenceI [] newSeq = new SequenceI[sSize]; - - int res, resSize; - StringBuffer protein; - String seq; - for(s=0; s -1 || file.indexOf("file:") > -1) @@ -3141,16 +3346,16 @@ public void drop(DropTargetDropEvent evt) } boolean isAnnotation = new AnnotationFile().readAnnotationFile(viewport. - alignment, file); + alignment, file, protocol); if (!isAnnotation) { - boolean isGroupsFile = parseFeaturesFile(file,protocol); + boolean isGroupsFile = parseFeaturesFile(file, protocol); if (!isGroupsFile) { String format = new IdentifyFile().Identify(file, protocol); - if(format.equalsIgnoreCase("JnetFile")) + if (format.equalsIgnoreCase("JnetFile")) { jalview.io.JPredFile predictions = new jalview.io.JPredFile( file, protocol); @@ -3161,7 +3366,9 @@ public void drop(DropTargetDropEvent evt) alignPanel.repaint(); } else + { new FileLoader().LoadFile(viewport, file, protocol, format); + } } } else @@ -3170,7 +3377,8 @@ public void drop(DropTargetDropEvent evt) alignPanel.adjustAnnotationHeight(); } - }catch(Exception ex) + } + catch (Exception ex) { ex.printStackTrace(); } @@ -3182,12 +3390,13 @@ public void drop(DropTargetDropEvent evt) { alignPanel = (AlignmentPanel) alignPanels.elementAt(index); viewport = alignPanel.av; + setMenusFromViewport(viewport); } } public void tabbedPane_mousePressed(MouseEvent e) { - if(SwingUtilities.isRightMouseButton(e)) + if (SwingUtilities.isRightMouseButton(e)) { String reply = JOptionPane.showInternalInputDialog(this, "Enter View Name", @@ -3197,14 +3406,50 @@ public void drop(DropTargetDropEvent evt) if (reply != null) { viewport.viewName = reply; - tabbedPane.setTitleAt( tabbedPane.getSelectedIndex() ,reply); + tabbedPane.setTitleAt(tabbedPane.getSelectedIndex(), reply); } } } - public AlignViewport getCurrentView() { return viewport; } } + +class PrintThread + extends Thread +{ + AlignmentPanel ap; + public PrintThread(AlignmentPanel ap) + { + this.ap = ap; + } + + static PageFormat pf; + public void run() + { + PrinterJob printJob = PrinterJob.getPrinterJob(); + + if (pf != null) + { + printJob.setPrintable(ap, pf); + } + else + { + printJob.setPrintable(ap); + } + + if (printJob.printDialog()) + { + try + { + printJob.print(); + } + catch (Exception PrintException) + { + PrintException.printStackTrace(); + } + } + } +}