X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FAlignFrame.java;h=7db8f01805fec6f67eb2650b1b925eb7e018c4ef;hb=1146ae7f678127be7796772b228d5fc6823435d4;hp=1f04fa3b25bd352e6f3fd9e5a70cdbfc3d4bec55;hpb=7d0ee5869e28d0cdde911336e9bbe290b143f0bc;p=jalview.git diff --git a/src/jalview/gui/AlignFrame.java b/src/jalview/gui/AlignFrame.java index 1f04fa3..7db8f01 100755 --- a/src/jalview/gui/AlignFrame.java +++ b/src/jalview/gui/AlignFrame.java @@ -1,940 +1,2559 @@ -/******************** - * 2004 Jalview Reengineered - * Barton Group - * Dundee University +/* + * Jalview - A Sequence Alignment Editor and Viewer + * Copyright (C) 2007 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle * - * AM Waterhouse - *******************/ - - - - + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Softwarechang + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ package jalview.gui; +import java.beans.*; +import java.io.*; 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 javax.swing.event.*; import jalview.analysis.*; +import jalview.commands.*; import jalview.datamodel.*; import jalview.io.*; import jalview.jbgui.*; import jalview.schemes.*; import jalview.ws.*; -import java.beans.PropertyChangeEvent; -public class AlignFrame extends GAlignFrame +/** + * DOCUMENT ME! + * + * @author $author$ + * @version $Revision$ + */ +public class AlignFrame + extends GAlignFrame implements DropTargetListener { - final AlignmentPanel alignPanel; - final AlignViewport viewport; - public static final int NEW_WINDOW_WIDTH = 700; - public static final int NEW_WINDOW_HEIGHT = 500; - public String currentFileFormat = "Jalview"; + /** DOCUMENT ME!! */ + public static final int DEFAULT_WIDTH = 700; - public AlignFrame(AlignmentI al) - { - viewport = new AlignViewport(al); + /** DOCUMENT ME!! */ + public static final int DEFAULT_HEIGHT = 500; + public AlignmentPanel alignPanel; - alignPanel = new AlignmentPanel(this, viewport); - alignPanel.annotationPanel.adjustPanelHeight(); - alignPanel.annotationSpaceFillerHolder.setPreferredSize(alignPanel.annotationPanel.getPreferredSize()); - alignPanel.annotationScroller.setPreferredSize(alignPanel.annotationPanel.getPreferredSize()); - alignPanel.setAnnotationVisible( viewport.getShowAnnotation() ); + AlignViewport viewport; - getContentPane().add(alignPanel, java.awt.BorderLayout.CENTER); + Vector alignPanels = new Vector(); - addInternalFrameListener(new InternalFrameAdapter() - { - public void internalFrameActivated(InternalFrameEvent evt) - { - javax.swing.SwingUtilities.invokeLater(new Runnable() - { - public void run() - { alignPanel.requestFocus(); } - }); - } - }); + /** DOCUMENT ME!! */ + String currentFileFormat = null; - } + String fileName = null; - public void saveAlignmentMenu_actionPerformed(ActionEvent e) + + /** + * Creates a new AlignFrame object. + * + * @param al DOCUMENT ME! + */ + public AlignFrame(AlignmentI al, int width, int height) { - JalviewFileChooser chooser = new JalviewFileChooser(jalview.bin.Cache.getProperty("LAST_DIRECTORY") - , new String[]{"fa, fasta, fastq", "aln", "pfam", "msf", "pir","blc","jar"}, - new String[]{"Fasta", "Clustal", "PFAM", "MSF", "PIR", "BLC", "Jalview"}, - currentFileFormat); + this(al, null, width, height); + } - chooser.setAcceptAllFileFilterUsed(false); - chooser.setFileView(new JalviewFileView()); - chooser.setDialogTitle("Save Alignment to file"); - chooser.setToolTipText("Save"); - int value = chooser.showSaveDialog(this); - if(value == JalviewFileChooser.APPROVE_OPTION) - { - currentFileFormat = chooser.getSelectedFormat(); - jalview.bin.Cache.setProperty("DEFAULT_FILE_FORMAT", currentFileFormat); - if (currentFileFormat.equals("Jalview")) - { - String shortName = title.replace('/', '_'); - title = title.replace('\\', '_'); - String choice = chooser.getSelectedFile().getPath(); - Jalview2XML.SaveState(this, choice, shortName); - // USE Jalview2XML to save this file - return; - } + /** + * new alignment window with hidden columns + * @param al AlignmentI + * @param hiddenColumns ColumnSelection or null + */ + public AlignFrame(AlignmentI al, ColumnSelection hiddenColumns, + int width, int height) + { + this.setSize(width, height); + viewport = new AlignViewport(al, hiddenColumns); - String choice = chooser.getSelectedFile().getPath(); - jalview.bin.Cache.setProperty("LAST_DIRECTORY", choice); - String output = FormatAdapter.formatSequences(currentFileFormat, viewport.getAlignment().getSequences()); - try{ - java.io.PrintWriter out = new java.io.PrintWriter( new java.io.FileWriter( choice ) ); - out.println(output); - out.close(); - } - catch(Exception ex){} + alignPanel = new AlignmentPanel(this, viewport); + + if(al.getDataset()==null) + { + al.setDataset(null); } + addAlignmentPanel(alignPanel, true); + init(); } - protected void outputText_actionPerformed(ActionEvent e) + /** + * Make a new AlignFrame from exisiting alignmentPanels + * @param ap AlignmentPanel + * @param av AlignViewport + */ + public AlignFrame(AlignmentPanel ap) { - CutAndPasteTransfer cap = new CutAndPasteTransfer(); - JInternalFrame frame = new JInternalFrame(); - frame.setContentPane(cap); - Desktop.addInternalFrame(frame, "Alignment output - "+e.getActionCommand(), 600, 500); - cap.setText( FormatAdapter.formatSequences(e.getActionCommand(), viewport.getAlignment().getSequences())); + viewport = ap.av; + alignPanel = ap; + addAlignmentPanel(ap, false); + init(); } - protected void htmlMenuItem_actionPerformed(ActionEvent e) + void init() { - new HTMLOutput(viewport); - } + this.setDropTarget(new java.awt.dnd.DropTarget(this, this)); - protected void createPNG_actionPerformed(ActionEvent e) - { - alignPanel.makePNG(); - } + if (viewport.conservation == null) + { + BLOSUM62Colour.setEnabled(false); + conservationMenuItem.setEnabled(false); + modifyConservation.setEnabled(false); + // PIDColour.setEnabled(false); + // abovePIDThreshold.setEnabled(false); + // modifyPID.setEnabled(false); + } - protected void epsFile_actionPerformed(ActionEvent e) - { - alignPanel.makeEPS(); - } + 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); + } - public void printMenuItem_actionPerformed(ActionEvent e) + if (Desktop.desktop != null) + { + addServiceListeners(); + setGUINucleotide(viewport.alignment.isNucleotide()); + } + + setMenusFromViewport(viewport); + + 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) { - //Putting in a thread avoids Swing painting problems - PrintThread thread = new PrintThread(); - thread.start(); + fileName = file; + currentFileFormat = format; + reload.setEnabled(true); } - class PrintThread extends Thread + void addKeyListener() { - public void run() - { - PrinterJob printJob = PrinterJob.getPrinterJob(); - PageFormat pf = printJob.pageDialog(printJob.defaultPage()); - printJob.setPrintable(alignPanel, pf); - if (printJob.printDialog()) + addKeyListener(new KeyAdapter() { - try + public void keyPressed(KeyEvent evt) { - printJob.print(); + if (viewport.cursorMode + && evt.getKeyCode() >= KeyEvent.VK_0 + && evt.getKeyCode() <= KeyEvent.VK_9) + { + alignPanel.seqPanel.numberPressed(evt.getKeyChar()); + } + + switch (evt.getKeyCode()) + { + + case 27: // escape key + deselectAllSequenceMenuItem_actionPerformed(null); + + break; + + case KeyEvent.VK_DOWN: + if (evt.isAltDown() || !viewport.cursorMode) + moveSelectedSequences(false); + if (viewport.cursorMode) + alignPanel.seqPanel.moveCursor(0, 1); + break; + + case KeyEvent.VK_UP: + if (evt.isAltDown() || !viewport.cursorMode) + moveSelectedSequences(true); + if (viewport.cursorMode) + alignPanel.seqPanel.moveCursor(0, -1); + + break; + + case KeyEvent.VK_LEFT: + if (evt.isAltDown() || !viewport.cursorMode) + slideSequences(false, + alignPanel.seqPanel.getKeyboardNo1()); + else + alignPanel.seqPanel.moveCursor( -1, 0); + + + break; + + case KeyEvent.VK_RIGHT: + if (evt.isAltDown() || !viewport.cursorMode) + slideSequences(true, + alignPanel.seqPanel.getKeyboardNo1()); + else + alignPanel.seqPanel.moveCursor(1, 0); + break; + + case KeyEvent.VK_SPACE: + if (viewport.cursorMode) + { + alignPanel.seqPanel.insertGapAtCursor(evt.isControlDown() + || evt.isShiftDown() + || evt.isAltDown()); + } + 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()); + } + + 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_ENTER: + case KeyEvent.VK_COMMA: + if (viewport.cursorMode) + { + alignPanel.seqPanel.setCursorRowAndColumn(); + } + 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_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; + + 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: + { + boolean toggleSeqs = !evt.isControlDown(); + boolean toggleCols = !evt.isShiftDown(); + + boolean hide = false; + + SequenceGroup sg = viewport.getSelectionGroup(); + if (toggleSeqs) + { + if (sg != null && sg.getSize() != viewport.alignment.getHeight()) + { + hideSelSequences_actionPerformed(null); + hide = true; + } + else if (! (toggleCols && + viewport.colSel.getSelected().size() > 0)) + { + showAllSeqs_actionPerformed(null); + } + } + + if (toggleCols) + { + if (viewport.colSel.getSelected().size() > 0) + { + hideSelColumns_actionPerformed(null); + if (!toggleSeqs) + { + viewport.selectionGroup = sg; + } + } + else if (!hide) + { + 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; + } } - catch (Exception PrintException) + + public void keyReleased(KeyEvent evt) + { + switch(evt.getKeyCode()) { - PrintException.printStackTrace(); + case KeyEvent.VK_LEFT: + if (evt.isAltDown() || !viewport.cursorMode) + viewport.firePropertyChange("alignment", null, + viewport.getAlignment().getSequences()); + break; + + case KeyEvent.VK_RIGHT: + if (evt.isAltDown() || !viewport.cursorMode) + viewport.firePropertyChange("alignment", null, + viewport.getAlignment().getSequences()); + break; } } - } - + }); } + public void addAlignmentPanel(final AlignmentPanel ap, + boolean newPanel) + { + ap.alignFrame = this; + alignPanels.addElement(ap); - public void closeMenuItem_actionPerformed(ActionEvent e) - { - try{ - this.setClosed(true); - }catch(Exception ex){} - } + PaintRefresher.Register(ap, ap.av.getSequenceSetId()); - Stack historyList = new Stack(); - Stack redoList = new Stack(); - private int treeCount = 0; + int aSize = alignPanels.size(); - void updateEditMenuBar() - { - if(historyList.size()>0) - { - undoMenuItem.setEnabled(true); - HistoryItem hi = (HistoryItem)historyList.peek(); - undoMenuItem.setText("Undo "+hi.getDescription()); - } - else - { - undoMenuItem.setEnabled(false); - undoMenuItem.setText("Undo"); - } + tabbedPane.setVisible(aSize>1 || ap.av.viewName!=null); - if(redoList.size()>0) + if (aSize == 1 && ap.av.viewName==null) + { + this.getContentPane().add(ap, BorderLayout.CENTER); + } + else + { + if (aSize == 2) { - redoMenuItem.setEnabled(true); - HistoryItem hi = (HistoryItem)redoList.peek(); - redoMenuItem.setText("Redo "+hi.getDescription()); + setInitialTabVisible(); } - else - { - redoMenuItem.setEnabled(false); - redoMenuItem.setText("Redo"); - } - } - - public void addHistoryItem(HistoryItem hi) - { - historyList.push(hi); - updateEditMenuBar(); - } - - protected void undoMenuItem_actionPerformed(ActionEvent e) - { - HistoryItem hi = (HistoryItem)historyList.pop(); - redoList.push(new HistoryItem(hi.getDescription(), viewport.alignment, HistoryItem.HIDE)); - restoreHistoryItem(hi); - } - - protected void redoMenuItem_actionPerformed(ActionEvent e) - { - HistoryItem hi = (HistoryItem)redoList.pop(); - restoreHistoryItem(hi); - updateEditMenuBar(); - viewport.updateConsensus(); - alignPanel.repaint(); - alignPanel.repaint(); - } + expandViews.setEnabled(true); + gatherViews.setEnabled(true); + tabbedPane.addTab(ap.av.viewName, ap); + ap.setVisible(false); + } - // used by undo and redo - void restoreHistoryItem(HistoryItem hi) - { - if(hi.getType()== HistoryItem.SORT) - { - for(int i=0; ihi.getSequences().size()-1; i--) - viewport.alignment.deleteSequence(i); - } + ap.av.alignment.padGaps(); } - viewport.firePropertyChange("alignment", null, viewport.getAlignment().getSequences()); - updateEditMenuBar(); + ap.av.updateConservation(ap); + ap.av.updateConsensus(ap); + } + } - viewport.updateConsensus(); - viewport.updateConservation(); - alignPanel.repaint(); + 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 void moveSelectedSequences(boolean up) + + public AlignViewport getViewport() { - SequenceGroup sg = viewport.getSelectionGroup(); - if (sg == null) - return; + return viewport; + } - if (up) + /* Set up intrinsic listeners for dynamically generated GUI bits. */ + private void addServiceListeners() + { + final java.beans.PropertyChangeListener thisListener; + // Do this once to get current state + BuildWebServiceMenu(); + Desktop.discoverer.addPropertyChangeListener( + thisListener = new java.beans.PropertyChangeListener() { - for (int i = 1; i < viewport.alignment.getHeight(); i++) + public void propertyChange(PropertyChangeEvent evt) { - SequenceI seq = viewport.alignment.getSequenceAt(i); - if (!sg.sequences.contains(seq)) - continue; - - SequenceI temp = viewport.alignment.getSequenceAt(i - 1); - if (sg.sequences.contains(temp)) - continue; - - viewport.alignment.getSequences().setElementAt(temp, i); - viewport.alignment.getSequences().setElementAt(seq, i - 1); + // System.out.println("Discoverer property change."); + if (evt.getPropertyName().equals("services")) + { + // System.out.println("Rebuilding web service menu"); + BuildWebServiceMenu(); + } } - } - else + }); + + addInternalFrameListener(new javax.swing.event. + InternalFrameAdapter() { - for (int i = viewport.alignment.getHeight() - 2; i > -1; i--) + public void internalFrameClosed( + javax.swing.event.InternalFrameEvent evt) { - SequenceI seq = viewport.alignment.getSequenceAt(i); - if (!sg.sequences.contains(seq)) - continue; + // System.out.println("deregistering discoverer listener"); + Desktop.discoverer.removePropertyChangeListener(thisListener); + closeMenuItem_actionPerformed(true); + } + ; + }); + } - SequenceI temp = viewport.alignment.getSequenceAt(i + 1); - if (sg.sequences.contains(temp)) - continue; + public void setGUINucleotide(boolean nucleotide) + { + showTranslation.setVisible( nucleotide ); + conservationMenuItem.setEnabled( !nucleotide ); + modifyConservation.setEnabled( !nucleotide ); - viewport.alignment.getSequences().setElementAt(temp, i); - viewport.alignment.getSequences().setElementAt(seq, i + 1); - } + //Remember AlignFrame always starts as protein + if(!nucleotide) + { + calculateMenu.remove(calculateMenu.getItemCount()-2); } - - alignPanel.repaint(); } + /** + * 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())); - protected void copy_actionPerformed(ActionEvent e) - { - if(viewport.getSelectionGroup()==null) - return; + showSeqFeatures.setSelected(av.showSequenceFeatures); + hiddenMarkers.setState(av.showHiddenMarkers); + applyToAllGroups.setState(av.colourAppliesToAllGroups); + + updateEditMenuBar(); + } - SequenceGroup sg = viewport.getSelectionGroup(); - Clipboard c = Toolkit.getDefaultToolkit().getSystemClipboard(); - StringBuffer buffer= new StringBuffer(); + Hashtable progressBars; + public void setProgressBar(String message, long id) + { + if(progressBars == null) + { + progressBars = new Hashtable(); + } - Hashtable orderedSeqs = new Hashtable(); - for(int i=0; i 0) + int value = chooser.showSaveDialog(this); + + if (value == JalviewFileChooser.APPROVE_OPTION) { - addHistoryItem(new HistoryItem("Remove Left",viewport.alignment, - HistoryItem.HIDE)); - int min = colSel.getMin(); - viewport.getAlignment().trimLeft(min); - colSel.compensateForEdit(0,min); + 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(viewport.getSelectionGroup()!=null) - viewport.getSelectionGroup().adjustForRemoveLeft(min); + fileName = chooser.getSelectedFile().getPath(); - Vector groups = viewport.alignment.getGroups(); - for(int i=0; i 0) - { - addHistoryItem(new HistoryItem("Remove Right",viewport.alignment, - HistoryItem.HIDE)); + boolean success = true; - int max = colSel.getMax(); - viewport.getAlignment().trimRight(max); - if(viewport.getSelectionGroup()!=null) - viewport.getSelectionGroup().adjustForRemoveRight(max); + if (format.equalsIgnoreCase("Jalview")) + { + String shortName = title; - Vector groups = viewport.alignment.getGroups(); - for(int i=0; i -1) { - SequenceGroup sg = (SequenceGroup) groups.get(i); - if(!sg.adjustForRemoveRight(max)) - viewport.alignment.deleteGroup(sg); + shortName = shortName.substring(shortName.lastIndexOf( + java.io.File.separatorChar) + 1); } + success = new Jalview2XML().SaveAlignment(this, file, shortName); + statusBar.setText("Successfully saved to file: " + +fileName+" in " + +format +" format."); - alignPanel.repaint(); } + else + { - } + String[] omitHidden = null; - public void removeGappedColumnMenuItem_actionPerformed(ActionEvent e) - { - addHistoryItem(new HistoryItem("Remove Gapped Columns", - viewport.alignment, - HistoryItem.HIDE)); + 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); - viewport.getAlignment().removeGaps(); - viewport.updateConservation(); - viewport.updateConsensus(); - alignPanel.repaint(); - } + if (reply == JOptionPane.YES_OPTION) + { + omitHidden = viewport.getViewAsString(false); + } + } - public void removeAllGapsMenuItem_actionPerformed(ActionEvent e) - { - addHistoryItem(new HistoryItem("Remove Gaps", - viewport.alignment, - HistoryItem.HIDE)); - SequenceI current; - int jSize; - for (int i=0; i < viewport.getAlignment().getSequences().size();i++) - { - current = viewport.getAlignment().getSequenceAt(i); - jSize = current.getLength(); - for (int j=0; j < jSize; j++) - if(jalview.util.Comparison.isGap(current.getCharAt(j))) + String output = new FormatAdapter().formatSequences( + format, + viewport.alignment.getSequencesArray(), + omitHidden); + + if (output == null) + { + success = false; + } + else + { + 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) { - current.deleteCharAt(j); - j--; - jSize--; + success = false; + ex.printStackTrace(); } + } } - viewport.updateConservation(); - viewport.updateConsensus(); - alignPanel.repaint(); - } - - public void padGapsMenuitem_actionPerformed(ActionEvent e) + if (!success) { - addHistoryItem(new HistoryItem("Pad Gaps", - viewport.alignment, - HistoryItem.HIDE)); - SequenceI current; - int Width = viewport.getAlignment().getWidth()-1; - for (int i=0; i < viewport.getAlignment().getSequences().size();i++) - { - current = viewport.getAlignment().getSequenceAt(i); + JOptionPane.showInternalMessageDialog( + this, "Couldn't save file: " + fileName, + "Error Saving File", + JOptionPane.WARNING_MESSAGE); + } - if (current.getLength()