X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FAlignFrame.java;h=42e61859b98cbc3e282937fea39846a0361ad285;hb=153dd62dc91da13ae732600e6ea55ddbe15eab39;hp=7adbd0787667b38edf547f0345db510213cd4018;hpb=506d60f0e188723ddc91c26824b41ac7034df3fe;p=jalview.git diff --git a/src/jalview/gui/AlignFrame.java b/src/jalview/gui/AlignFrame.java index 7adbd07..42e6185 100755 --- a/src/jalview/gui/AlignFrame.java +++ b/src/jalview/gui/AlignFrame.java @@ -1,20 +1,19 @@ /* - * Jalview - A Sequence Alignment Editor and Viewer (Version 2.4) - * Copyright (C) 2008 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle + * Jalview - A Sequence Alignment Editor and Viewer (Version 2.6) + * Copyright (C) 2010 J Procter, AM Waterhouse, 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 - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. + * This file is part of Jalview. * - * 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. + * Jalview 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 3 of the License, or (at your option) any later version. * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + * Jalview 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 Jalview. If not, see . */ package jalview.gui; @@ -31,12 +30,15 @@ import javax.swing.*; import javax.swing.event.MenuEvent; import jalview.analysis.*; +import jalview.bin.Cache; import jalview.commands.*; import jalview.datamodel.*; import jalview.io.*; import jalview.jbgui.*; import jalview.schemes.*; import jalview.ws.*; +import jalview.ws.jws1.Discoverer; +import jalview.ws.jws2.Jws2Discoverer; /** * DOCUMENT ME! @@ -47,6 +49,7 @@ import jalview.ws.*; public class AlignFrame extends GAlignFrame implements DropTargetListener, IProgressIndicator { + /** DOCUMENT ME!! */ public static final int DEFAULT_WIDTH = 700; @@ -70,10 +73,11 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, String fileName = null; /** - * Creates a new AlignFrame object. + * Creates a new AlignFrame object with specific width and height. * * @param al - * DOCUMENT ME! + * @param width + * @param height */ public AlignFrame(AlignmentI al, int width, int height) { @@ -81,18 +85,89 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, } /** + * Creates a new AlignFrame object with specific width, height and + * sequenceSetId + * + * @param al + * @param width + * @param height + * @param sequenceSetId + */ + public AlignFrame(AlignmentI al, int width, int height, + String sequenceSetId) + { + this(al, null, width, height, sequenceSetId); + } + + /** + * Creates a new AlignFrame object with specific width, height and + * sequenceSetId + * + * @param al + * @param width + * @param height + * @param sequenceSetId + * @param viewId + */ + public AlignFrame(AlignmentI al, int width, int height, + String sequenceSetId, String viewId) + { + this(al, null, width, height, sequenceSetId, viewId); + } + + /** * new alignment window with hidden columns * * @param al - * AlignmentI + * AlignmentI * @param hiddenColumns - * ColumnSelection or null + * ColumnSelection or null + * @param width + * Width of alignment frame + * @param height + * height of frame. */ public AlignFrame(AlignmentI al, ColumnSelection hiddenColumns, int width, int height) { - this.setSize(width, height); - viewport = new AlignViewport(al, hiddenColumns); + this(al, hiddenColumns, width, height, null); + } + + /** + * Create alignment frame for al with hiddenColumns, a specific width and + * height, and specific sequenceId + * + * @param al + * @param hiddenColumns + * @param width + * @param height + * @param sequenceSetId + * (may be null) + */ + public AlignFrame(AlignmentI al, ColumnSelection hiddenColumns, + int width, int height, String sequenceSetId) + { + this(al, hiddenColumns, width, height, sequenceSetId, null); + } + + /** + * Create alignment frame for al with hiddenColumns, a specific width and + * height, and specific sequenceId + * + * @param al + * @param hiddenColumns + * @param width + * @param height + * @param sequenceSetId + * (may be null) + * @param viewId + * (may be null) + */ + public AlignFrame(AlignmentI al, ColumnSelection hiddenColumns, + int width, int height, String sequenceSetId, String viewId) + { + setSize(width, height); + viewport = new AlignViewport(al, hiddenColumns, sequenceSetId, viewId); alignPanel = new AlignmentPanel(this, viewport); @@ -109,9 +184,9 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * Make a new AlignFrame from exisiting alignmentPanels * * @param ap - * AlignmentPanel + * AlignmentPanel * @param av - * AlignViewport + * AlignViewport */ public AlignFrame(AlignmentPanel ap) { @@ -121,6 +196,10 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, init(); } + /** + * initalise the alignframe from the underlying viewport data and the + * configurations + */ void init() { if (viewport.conservation == null) @@ -173,9 +252,9 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * button functionality. * * @param file - * valid filename + * valid filename * @param format - * format of file + * format of file */ public void setFileName(String file, String format) { @@ -329,39 +408,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, { 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); - } - } + toggleHiddenRegions(toggleSeqs, toggleCols); break; } case KeyEvent.VK_PAGE_UP: @@ -469,32 +516,47 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, private void addServiceListeners() { final java.beans.PropertyChangeListener thisListener; - // Do this once to get current state - BuildWebServiceMenu(); - Desktop.discoverer - .addPropertyChangeListener(thisListener = new java.beans.PropertyChangeListener() + Desktop.instance.addJalviewPropertyChangeListener("services", + thisListener = new java.beans.PropertyChangeListener() { public void propertyChange(PropertyChangeEvent evt) { - // System.out.println("Discoverer property change."); - if (evt.getPropertyName().equals("services")) + // // System.out.println("Discoverer property change."); + // if (evt.getPropertyName().equals("services")) { - // System.out.println("Rebuilding web service menu"); - BuildWebServiceMenu(); + SwingUtilities.invokeLater(new Runnable() + { + + public void run() + { + System.err + .println("Rebuild WS Menu for service change"); + BuildWebServiceMenu(); + } + + }); } } }); - addInternalFrameListener(new javax.swing.event.InternalFrameAdapter() { public void internalFrameClosed( javax.swing.event.InternalFrameEvent evt) { - // System.out.println("deregistering discoverer listener"); - Desktop.discoverer.removePropertyChangeListener(thisListener); + System.out.println("deregistering discoverer listener"); + Desktop.instance.removeJalviewPropertyChangeListener("services", + thisListener); closeMenuItem_actionPerformed(true); }; }); + // Finally, build the menu once to get current service state + new Thread(new Runnable() + { + public void run() + { + BuildWebServiceMenu(); + } + }).start(); } public void setGUINucleotide(boolean nucleotide) @@ -502,7 +564,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, showTranslation.setVisible(nucleotide); conservationMenuItem.setEnabled(!nucleotide); modifyConservation.setEnabled(!nucleotide); - + showGroupConservation.setEnabled(!nucleotide); // Remember AlignFrame always starts as protein if (!nucleotide) { @@ -525,7 +587,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * loading from Jalview2XML.java * * @param av - * AlignViewport + * AlignViewport */ void setMenusFromViewport(AlignViewport av) { @@ -544,20 +606,26 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, annotationPanelMenuItem.setState(av.showAnnotation); viewBoxesMenuItem.setSelected(av.showBoxes); viewTextMenuItem.setSelected(av.showText); - + showNonconservedMenuItem.setSelected(av.showUnconserved); + showGroupConsensus.setSelected(av.showGroupConsensus); + showGroupConservation.setSelected(av.showGroupConservation); + showConsensusHistogram.setSelected(av.showConsensusHistogram); + showSequenceLogo.setSelected(av.showSequenceLogo); setColourSelected(ColourSchemeProperty.getColourName(av .getGlobalColourScheme())); showSeqFeatures.setSelected(av.showSequenceFeatures); hiddenMarkers.setState(av.showHiddenMarkers); applyToAllGroups.setState(av.colourAppliesToAllGroups); + showNpFeatsMenuitem.setSelected(av.isShowNpFeats()); + showDbRefsMenuitem.setSelected(av.isShowDbRefs()); setShowProductsEnabled(); updateEditMenuBar(); } - Hashtable progressBars; + Hashtable progressBars, progressBarHandlers; /* * (non-Javadoc) @@ -569,21 +637,26 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, if (progressBars == null) { progressBars = new Hashtable(); + progressBarHandlers = new Hashtable(); } JPanel progressPanel; + Long lId = new Long(id); GridLayout layout = (GridLayout) statusPanel.getLayout(); - if (progressBars.get(new Long(id)) != null) + if (progressBars.get(lId) != null) { progressPanel = (JPanel) progressBars.get(new Long(id)); statusPanel.remove(progressPanel); - progressBars.remove(progressPanel); + progressBars.remove(lId); progressPanel = null; if (message != null) { statusBar.setText(message); } - + if (progressBarHandlers.contains(lId)) + { + progressBarHandlers.remove(lId); + } layout.setRows(layout.getRows() - 1); } else @@ -599,13 +672,43 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, layout.setRows(layout.getRows() + 1); statusPanel.add(progressPanel); - progressBars.put(new Long(id), progressPanel); + progressBars.put(lId, progressPanel); } // update GUI setMenusForViewport(); validate(); } + public void registerHandler(final long id, + final IProgressIndicatorHandler handler) + { + if (progressBarHandlers == null || !progressBars.contains(new Long(id))) + { + throw new Error( + "call setProgressBar before registering the progress bar's handler."); + } + progressBarHandlers.put(new Long(id), handler); + final JPanel progressPanel = (JPanel) progressBars.get(new Long(id)); + if (handler.canCancel()) + { + JButton cancel = new JButton("Cancel"); + final IProgressIndicator us = this; + cancel.addActionListener(new ActionListener() + { + + public void actionPerformed(ActionEvent e) + { + handler.cancelActivity(id); + us.setProgressBar( + "Cancelled " + + ((JLabel) progressPanel.getComponent(0)) + .getText(), id); + } + }); + progressPanel.add(cancel, BorderLayout.EAST); + } + } + /** * * @return true if any progress bars are still active @@ -646,6 +749,8 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, { if (fileName != null) { + // TODO: work out how to recover feature settings for correct view(s) when + // file is reloaded. if (currentFileFormat.equals("Jalview")) { JInternalFrame[] frames = Desktop.desktop.getAllFrames(); @@ -680,7 +785,23 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, protocol, currentFileFormat); newframe.setBounds(bounds); - + if (featureSettings != null && featureSettings.isShowing()) + { + final Rectangle fspos = featureSettings.frame.getBounds(); + // TODO: need a 'show feature settings' function that takes bounds - + // need to refactor Desktop.addFrame + newframe.featureSettings_actionPerformed(null); + final FeatureSettings nfs = newframe.featureSettings; + SwingUtilities.invokeLater(new Runnable() + { + public void run() + { + nfs.frame.setBounds(fspos); + } + }); + this.featureSettings.close(); + this.featureSettings = null; + } this.closeMenuItem_actionPerformed(true); } } @@ -699,8 +820,8 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, public void save_actionPerformed(ActionEvent e) { if (fileName == null - || (currentFileFormat == null || jalview.io.AppletFormatAdapter - .isValidFormat(currentFileFormat, true)) + || (currentFileFormat == null || !jalview.io.FormatAdapter + .isValidIOFormat(currentFileFormat, true)) || fileName.startsWith("http")) { saveAs_actionPerformed(null); @@ -715,12 +836,12 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * DOCUMENT ME! * * @param e - * DOCUMENT ME! + * DOCUMENT ME! */ public void saveAs_actionPerformed(ActionEvent e) { - JalviewFileChooser chooser = new JalviewFileChooser(jalview.bin.Cache - .getProperty("LAST_DIRECTORY"), + JalviewFileChooser chooser = new JalviewFileChooser( + jalview.bin.Cache.getProperty("LAST_DIRECTORY"), jalview.io.AppletFormatAdapter.WRITABLE_EXTENSIONS, jalview.io.AppletFormatAdapter.WRITABLE_FNAMES, currentFileFormat, false); @@ -782,12 +903,10 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, { if (!jalview.io.AppletFormatAdapter.isValidFormat(format, true)) { - // JBPNote need to have a raise_gui flag here - JOptionPane.showInternalMessageDialog(this, "Cannot save file " - + fileName + " using format " + format, - "Alignment output format not supported", - JOptionPane.WARNING_MESSAGE); + warningMessage("Cannot save file " + fileName + " using format " + + format, "Alignment output format not supported"); saveAs_actionPerformed(null); + // JBPNote need to have a raise_gui flag here return false; } @@ -848,11 +967,26 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, return success; } + private void warningMessage(String warning, String title) + { + if (new jalview.util.Platform().isHeadless()) + { + System.err.println("Warning: " + title + "\nWarning: " + warning); + + } + else + { + JOptionPane.showInternalMessageDialog(this, warning, title, + JOptionPane.WARNING_MESSAGE); + } + return; + } + /** * DOCUMENT ME! * * @param e - * DOCUMENT ME! + * DOCUMENT ME! */ protected void outputText_actionPerformed(ActionEvent e) { @@ -877,24 +1011,32 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, 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, omitHidden, viewport.colSel)); + try + { + cap.setText(new FormatAdapter().formatSequences(e.getActionCommand(), + viewport.alignment, omitHidden, viewport.colSel)); + Desktop.addInternalFrame(cap, + "Alignment output - " + e.getActionCommand(), 600, 500); + } catch (OutOfMemoryError oom) + { + new OOMWarning("Outputting alignment as " + e.getActionCommand(), oom); + cap.dispose(); + } + } /** * DOCUMENT ME! * * @param e - * DOCUMENT ME! + * DOCUMENT ME! */ protected void htmlMenuItem_actionPerformed(ActionEvent e) { - new HTMLOutput(alignPanel, alignPanel.seqPanel.seqCanvas - .getSequenceRenderer(), alignPanel.seqPanel.seqCanvas - .getFeatureRenderer()); + new HTMLOutput(alignPanel, + alignPanel.seqPanel.seqCanvas.getSequenceRenderer(), + alignPanel.seqPanel.seqCanvas.getFeatureRenderer()); } public void createImageMap(File file, String image) @@ -906,7 +1048,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * DOCUMENT ME! * * @param e - * DOCUMENT ME! + * DOCUMENT ME! */ public void createPNG(File f) { @@ -917,7 +1059,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * DOCUMENT ME! * * @param e - * DOCUMENT ME! + * DOCUMENT ME! */ public void createEPS(File f) { @@ -934,7 +1076,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * DOCUMENT ME! * * @param e - * DOCUMENT ME! + * DOCUMENT ME! */ public void printMenuItem_actionPerformed(ActionEvent e) { @@ -950,7 +1092,8 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, public void exportAnnotations_actionPerformed(ActionEvent e) { - new AnnotationExporter().exportAnnotations(alignPanel, + new AnnotationExporter().exportAnnotations( + alignPanel, viewport.showAnnotation ? viewport.alignment .getAlignmentAnnotation() : null, viewport.alignment .getGroups(), @@ -960,8 +1103,8 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, public void associatedData_actionPerformed(ActionEvent e) { // Pick the tree file - JalviewFileChooser chooser = new JalviewFileChooser(jalview.bin.Cache - .getProperty("LAST_DIRECTORY")); + JalviewFileChooser chooser = new JalviewFileChooser( + jalview.bin.Cache.getProperty("LAST_DIRECTORY")); chooser.setFileView(new JalviewFileView()); chooser.setDialogTitle("Load Jalview Annotations or Features File"); chooser.setToolTipText("Load Jalview Annotations / Features file"); @@ -978,10 +1121,10 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, } /** - * DOCUMENT ME! + * Close the current view or all views in the alignment frame. If the frame + * only contains one view then the alignment will be removed from memory. * - * @param e - * DOCUMENT ME! + * @param closeAllTabs */ public void closeMenuItem_actionPerformed(boolean closeAllTabs) { @@ -996,39 +1139,20 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, { if (closeAllTabs) { - for (int i = 0; i < alignPanels.size(); i++) + if (this.isClosed()) { - AlignmentPanel ap = (AlignmentPanel) alignPanels.elementAt(i); - jalview.structure.StructureSelectionManager - .getStructureSelectionManager() - .removeStructureViewerListener(ap.seqPanel, null); - PaintRefresher.RemoveComponent(ap.seqPanel.seqCanvas); - PaintRefresher.RemoveComponent(ap.idPanel.idCanvas); - PaintRefresher.RemoveComponent(ap); - ap.av.alignment = null; + // really close all the windows - otherwise wait till + // setClosed(true) is called + for (int i = 0; i < alignPanels.size(); i++) + { + AlignmentPanel ap = (AlignmentPanel) alignPanels.elementAt(i); + ap.closePanel(); + } } } else { - int index = tabbedPane.getSelectedIndex(); - - alignPanels.removeElement(alignPanel); - PaintRefresher.RemoveComponent(alignPanel.seqPanel.seqCanvas); - PaintRefresher.RemoveComponent(alignPanel.idPanel.idCanvas); - PaintRefresher.RemoveComponent(alignPanel); - viewport.alignment = null; - alignPanel = null; - viewport = null; - - tabbedPane.removeTabAt(index); - tabbedPane.validate(); - - if (index == tabbedPane.getTabCount()) - { - index--; - } - - this.tabSelectionChanged(index); + closeView(alignPanel); } } @@ -1043,6 +1167,36 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, } /** + * close alignPanel2 and shuffle tabs appropriately. + * + * @param alignPanel2 + */ + public void closeView(AlignmentPanel alignPanel2) + { + int index = tabbedPane.getSelectedIndex(); + int closedindex = tabbedPane.indexOfComponent(alignPanel2); + alignPanels.removeElement(alignPanel2); + // Unnecessary + // if (viewport == alignPanel2.av) + // { + // viewport = null; + // } + alignPanel2.closePanel(); + alignPanel2 = null; + + tabbedPane.removeTabAt(closedindex); + tabbedPane.validate(); + + if (index > closedindex || index == tabbedPane.getTabCount()) + { + // modify currently selected tab index if necessary. + index--; + } + + this.tabSelectionChanged(index); + } + + /** * DOCUMENT ME! */ void updateEditMenuBar() @@ -1081,7 +1235,9 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, viewport.historyList.push(command); viewport.redoList.clear(); updateEditMenuBar(); - viewport.hasHiddenColumns = viewport.colSel.getHiddenColumns() != null; + viewport.hasHiddenColumns = (viewport.colSel != null + && viewport.colSel.getHiddenColumns() != null && viewport.colSel + .getHiddenColumns().size() > 0); } } @@ -1113,7 +1269,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * DOCUMENT ME! * * @param e - * DOCUMENT ME! + * DOCUMENT ME! */ protected void undoMenuItem_actionPerformed(ActionEvent e) { @@ -1128,7 +1284,9 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, if (originalSource != null) { - originalSource.hasHiddenColumns = viewport.colSel.getHiddenColumns() != null; + originalSource.hasHiddenColumns = (viewport.colSel != null + && viewport.colSel.getHiddenColumns() != null && viewport.colSel + .getHiddenColumns().size() > 0); originalSource.firePropertyChange("alignment", null, originalSource.alignment.getSequences()); } @@ -1138,7 +1296,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * DOCUMENT ME! * * @param e - * DOCUMENT ME! + * DOCUMENT ME! */ protected void redoMenuItem_actionPerformed(ActionEvent e) { @@ -1156,7 +1314,9 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, if (originalSource != null) { - originalSource.hasHiddenColumns = viewport.colSel.getHiddenColumns() != null; + originalSource.hasHiddenColumns = (viewport.colSel != null + && viewport.colSel.getHiddenColumns() != null && viewport.colSel + .getHiddenColumns().size() > 0); originalSource.firePropertyChange("alignment", null, originalSource.alignment.getSequences()); } @@ -1208,7 +1368,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * DOCUMENT ME! * * @param up - * DOCUMENT ME! + * DOCUMENT ME! */ public void moveSelectedSequences(boolean up) { @@ -1355,7 +1515,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * DOCUMENT ME! * * @param e - * DOCUMENT ME! + * DOCUMENT ME! */ protected void copy_actionPerformed(ActionEvent e) { @@ -1384,11 +1544,11 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, jalview.gui.Desktop.internalCopy = true; // Its really worth setting the clipboard contents // to empty before setting the large StringSelection!! - Toolkit.getDefaultToolkit().getSystemClipboard().setContents( - new StringSelection(""), null); + Toolkit.getDefaultToolkit().getSystemClipboard() + .setContents(new StringSelection(""), null); - Toolkit.getDefaultToolkit().getSystemClipboard().setContents(ss, - Desktop.instance); + Toolkit.getDefaultToolkit().getSystemClipboard() + .setContents(ss, Desktop.instance); } catch (OutOfMemoryError er) { new OOMWarning("copying region", er); @@ -1399,15 +1559,18 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, if (viewport.hasHiddenColumns) { hiddenColumns = new Vector(); - int hiddenOffset = viewport.getSelectionGroup().getStartRes(); + int hiddenOffset = viewport.getSelectionGroup().getStartRes(), hiddenCutoff = viewport + .getSelectionGroup().getEndRes(); for (int i = 0; i < viewport.getColumnSelection().getHiddenColumns() .size(); i++) { int[] region = (int[]) viewport.getColumnSelection() .getHiddenColumns().elementAt(i); - - hiddenColumns.addElement(new int[] - { region[0] - hiddenOffset, region[1] - hiddenOffset }); + if (region[0] >= hiddenOffset && region[1] <= hiddenCutoff) + { + hiddenColumns.addElement(new int[] + { region[0] - hiddenOffset, region[1] - hiddenOffset }); + } } } @@ -1420,7 +1583,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * DOCUMENT ME! * * @param e - * DOCUMENT ME! + * DOCUMENT ME! */ protected void pasteNew_actionPerformed(ActionEvent e) { @@ -1431,7 +1594,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * DOCUMENT ME! * * @param e - * DOCUMENT ME! + * DOCUMENT ME! */ protected void pasteThis_actionPerformed(ActionEvent e) { @@ -1442,7 +1605,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * Paste contents of Jalview clipboard * * @param newAlignment - * true to paste to a new alignment, otherwise add to this. + * true to paste to a new alignment, otherwise add to this. */ void paste(boolean newAlignment) { @@ -1648,8 +1811,8 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, } buildSortByAnnotationScoresMenu(); } - viewport.firePropertyChange("alignment", null, alignment - .getSequences()); + viewport.firePropertyChange("alignment", null, + alignment.getSequences()); } else @@ -1711,7 +1874,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * DOCUMENT ME! * * @param e - * DOCUMENT ME! + * DOCUMENT ME! */ protected void cut_actionPerformed(ActionEvent e) { @@ -1723,7 +1886,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * DOCUMENT ME! * * @param e - * DOCUMENT ME! + * DOCUMENT ME! */ protected void delete_actionPerformed(ActionEvent evt) { @@ -1763,11 +1926,11 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, viewport.alignment)); viewport.setSelectionGroup(null); + viewport.sendSelection(); viewport.alignment.deleteGroup(sg); viewport.firePropertyChange("alignment", null, viewport.getAlignment() .getSequences()); - if (viewport.getAlignment().getHeight() < 1) { try @@ -1783,7 +1946,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * DOCUMENT ME! * * @param e - * DOCUMENT ME! + * DOCUMENT ME! */ protected void deleteGroups_actionPerformed(ActionEvent e) { @@ -1791,6 +1954,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, viewport.sequenceColours = null; viewport.setSelectionGroup(null); PaintRefresher.Refresh(this, viewport.getSequenceSetId()); + alignPanel.updateAnnotation(); alignPanel.paintAlignment(true); } @@ -1798,7 +1962,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * DOCUMENT ME! * * @param e - * DOCUMENT ME! + * DOCUMENT ME! */ public void selectAllSequenceMenuItem_actionPerformed(ActionEvent e) { @@ -1811,6 +1975,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, sg.setEndRes(viewport.alignment.getWidth() - 1); viewport.setSelectionGroup(sg); + viewport.sendSelection(); alignPanel.paintAlignment(true); PaintRefresher.Refresh(alignPanel, viewport.getSequenceSetId()); } @@ -1819,7 +1984,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * DOCUMENT ME! * * @param e - * DOCUMENT ME! + * DOCUMENT ME! */ public void deselectAllSequenceMenuItem_actionPerformed(ActionEvent e) { @@ -1841,7 +2006,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * DOCUMENT ME! * * @param e - * DOCUMENT ME! + * DOCUMENT ME! */ public void invertSequenceMenuItem_actionPerformed(ActionEvent e) { @@ -1860,7 +2025,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, } alignPanel.paintAlignment(true); - + viewport.sendSelection(); PaintRefresher.Refresh(alignPanel, viewport.getSequenceSetId()); } @@ -1874,7 +2039,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * DOCUMENT ME! * * @param e - * DOCUMENT ME! + * DOCUMENT ME! */ public void remove2LeftMenuItem_actionPerformed(ActionEvent e) { @@ -1885,7 +2050,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * DOCUMENT ME! * * @param e - * DOCUMENT ME! + * DOCUMENT ME! */ public void remove2RightMenuItem_actionPerformed(ActionEvent e) { @@ -1962,7 +2127,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * DOCUMENT ME! * * @param e - * DOCUMENT ME! + * DOCUMENT ME! */ public void removeGappedColumnMenuItem_actionPerformed(ActionEvent e) { @@ -2008,7 +2173,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * DOCUMENT ME! * * @param e - * DOCUMENT ME! + * DOCUMENT ME! */ public void removeAllGapsMenuItem_actionPerformed(ActionEvent e) { @@ -2046,21 +2211,30 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * DOCUMENT ME! * * @param e - * DOCUMENT ME! + * DOCUMENT ME! */ public void padGapsMenuitem_actionPerformed(ActionEvent e) { viewport.padGaps = padGapsMenuitem.isSelected(); - viewport.firePropertyChange("alignment", null, viewport.getAlignment() .getSequences()); } + // else + { + // if (justifySeqs>0) + { + // alignment.justify(justifySeqs!=RIGHT_JUSTIFY); + } + } + + // } + /** * DOCUMENT ME! * * @param e - * DOCUMENT ME! + * DOCUMENT ME! */ public void findMenuItem_actionPerformed(ActionEvent e) { @@ -2107,7 +2281,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, newap.av.viewName = newViewName; - addAlignmentPanel(newap, false); + addAlignmentPanel(newap, true); if (alignPanels.size() == 2) { @@ -2130,7 +2304,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * DOCUMENT ME! * * @param e - * DOCUMENT ME! + * DOCUMENT ME! */ public void font_actionPerformed(ActionEvent e) { @@ -2141,7 +2315,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * DOCUMENT ME! * * @param e - * DOCUMENT ME! + * DOCUMENT ME! */ protected void seqLimit_actionPerformed(ActionEvent e) { @@ -2164,11 +2338,25 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, alignPanel.paintAlignment(true); } + /* + * (non-Javadoc) + * + * @see jalview.jbgui.GAlignFrame#followHighlight_actionPerformed() + */ + protected void followHighlight_actionPerformed() + { + if (viewport.followHighlight = this.followHighlightMenuItem.getState()) + { + alignPanel.scrollToPosition( + alignPanel.seqPanel.seqCanvas.searchResults, false); + } + } + /** * DOCUMENT ME! * * @param e - * DOCUMENT ME! + * DOCUMENT ME! */ protected void colourTextMenuItem_actionPerformed(ActionEvent e) { @@ -2180,7 +2368,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * DOCUMENT ME! * * @param e - * DOCUMENT ME! + * DOCUMENT ME! */ public void wrapMenuItem_actionPerformed(ActionEvent e) { @@ -2208,6 +2396,116 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, alignPanel.paintAlignment(true); } + /** + * called by key handler and the hide all/show all menu items + * + * @param toggleSeqs + * @param toggleCols + */ + private void toggleHiddenRegions(boolean toggleSeqs, boolean toggleCols) + { + + boolean hide = false; + SequenceGroup sg = viewport.getSelectionGroup(); + if (!toggleSeqs && !toggleCols) + { + // Hide everything by the current selection - this is a hack - we do the + // invert and then hide + // first check that there will be visible columns after the invert. + if ((viewport.colSel != null && viewport.colSel.getSelected() != null && viewport.colSel + .getSelected().size() > 0) + || (sg != null && sg.getSize() > 0 && sg.getStartRes() <= sg + .getEndRes())) + { + // now invert the sequence set, if required - empty selection implies + // that no hiding is required. + if (sg != null) + { + invertSequenceMenuItem_actionPerformed(null); + sg = viewport.getSelectionGroup(); + toggleSeqs = true; + + } + viewport.expandColSelection(sg, true); + // finally invert the column selection and get the new sequence + // selection. + invertColSel_actionPerformed(null); + toggleCols = true; + } + } + + 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); + } + } + } + + /* + * (non-Javadoc) + * + * @see + * jalview.jbgui.GAlignFrame#hideAllButSelection_actionPerformed(java.awt. + * event.ActionEvent) + */ + public void hideAllButSelection_actionPerformed(ActionEvent e) + { + toggleHiddenRegions(false, false); + } + + /* + * (non-Javadoc) + * + * @see + * jalview.jbgui.GAlignFrame#hideAllSelection_actionPerformed(java.awt.event + * .ActionEvent) + */ + public void hideAllSelection_actionPerformed(ActionEvent e) + { + SequenceGroup sg = viewport.getSelectionGroup(); + viewport.expandColSelection(sg, false); + viewport.hideAllSelectedSeqs(); + viewport.hideSelectedColumns(); + alignPanel.paintAlignment(true); + } + + /* + * (non-Javadoc) + * + * @see + * jalview.jbgui.GAlignFrame#showAllhidden_actionPerformed(java.awt.event. + * ActionEvent) + */ + public void showAllhidden_actionPerformed(ActionEvent e) + { + viewport.showAllHiddenColumns(); + viewport.showAllHiddenSeqs(); + alignPanel.paintAlignment(true); + } + public void hideSelColumns_actionPerformed(ActionEvent e) { viewport.hideSelectedColumns(); @@ -2224,7 +2522,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * DOCUMENT ME! * * @param e - * DOCUMENT ME! + * DOCUMENT ME! */ protected void scaleAbove_actionPerformed(ActionEvent e) { @@ -2236,7 +2534,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * DOCUMENT ME! * * @param e - * DOCUMENT ME! + * DOCUMENT ME! */ protected void scaleLeft_actionPerformed(ActionEvent e) { @@ -2248,7 +2546,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * DOCUMENT ME! * * @param e - * DOCUMENT ME! + * DOCUMENT ME! */ protected void scaleRight_actionPerformed(ActionEvent e) { @@ -2260,7 +2558,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * DOCUMENT ME! * * @param e - * DOCUMENT ME! + * DOCUMENT ME! */ public void viewBoxesMenuItem_actionPerformed(ActionEvent e) { @@ -2272,7 +2570,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * DOCUMENT ME! * * @param e - * DOCUMENT ME! + * DOCUMENT ME! */ public void viewTextMenuItem_actionPerformed(ActionEvent e) { @@ -2284,7 +2582,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * DOCUMENT ME! * * @param e - * DOCUMENT ME! + * DOCUMENT ME! */ protected void renderGapsMenuItem_actionPerformed(ActionEvent e) { @@ -2301,14 +2599,20 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, featureSettings.close(); featureSettings = null; } + if (!showSeqFeatures.isSelected()) + { + // make sure features are actually displayed + showSeqFeatures.setSelected(true); + showSeqFeatures_actionPerformed(null); + } featureSettings = new FeatureSettings(this); } /** - * DOCUMENT ME! + * Set or clear 'Show Sequence Features' * * @param evt - * DOCUMENT ME! + * DOCUMENT ME! */ public void showSeqFeatures_actionPerformed(ActionEvent evt) { @@ -2321,10 +2625,33 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, } /** + * Set or clear 'Show Sequence Features' + * + * @param evt + * DOCUMENT ME! + */ + public void showSeqFeaturesHeight_actionPerformed(ActionEvent evt) + { + viewport.setShowSequenceFeaturesHeight(showSeqFeaturesHeight + .isSelected()); + if (viewport.getShowSequenceFeaturesHeight()) + { + // ensure we're actually displaying features + viewport.setShowSequenceFeatures(true); + showSeqFeatures.setSelected(true); + } + alignPanel.paintAlignment(true); + if (alignPanel.getOverviewPanel() != null) + { + alignPanel.getOverviewPanel().updateOverviewImage(); + } + } + + /** * DOCUMENT ME! * * @param e - * DOCUMENT ME! + * DOCUMENT ME! */ public void annotationPanelMenuItem_actionPerformed(ActionEvent e) { @@ -2382,8 +2709,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, } pos = npos + 1; } while (npos != -1); - contents - .append("" + key + "" + val + ""); + contents.append("" + key + "" + val + ""); } contents.append(""); } @@ -2399,7 +2725,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * DOCUMENT ME! * * @param e - * DOCUMENT ME! + * DOCUMENT ME! */ public void overviewMenuItem_actionPerformed(ActionEvent e) { @@ -2411,19 +2737,18 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, JInternalFrame frame = new JInternalFrame(); OverviewPanel overview = new OverviewPanel(alignPanel); frame.setContentPane(overview); - Desktop.addInternalFrame(frame, "Overview " + this.getTitle(), frame - .getWidth(), frame.getHeight()); + Desktop.addInternalFrame(frame, "Overview " + this.getTitle(), + frame.getWidth(), frame.getHeight()); frame.pack(); frame.setLayer(JLayeredPane.PALETTE_LAYER); - frame - .addInternalFrameListener(new javax.swing.event.InternalFrameAdapter() - { - public void internalFrameClosed( - javax.swing.event.InternalFrameEvent evt) - { - alignPanel.setOverviewPanel(null); - }; - }); + frame.addInternalFrameListener(new javax.swing.event.InternalFrameAdapter() + { + public void internalFrameClosed( + javax.swing.event.InternalFrameEvent evt) + { + alignPanel.setOverviewPanel(null); + }; + }); alignPanel.setOverviewPanel(overview); } @@ -2437,7 +2762,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * DOCUMENT ME! * * @param e - * DOCUMENT ME! + * DOCUMENT ME! */ protected void noColourmenuItem_actionPerformed(ActionEvent e) { @@ -2448,20 +2773,20 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * DOCUMENT ME! * * @param e - * DOCUMENT ME! + * DOCUMENT ME! */ public void clustalColour_actionPerformed(ActionEvent e) { changeColour(new ClustalxColourScheme( - viewport.alignment.getSequences(), viewport.alignment - .getWidth())); + viewport.alignment.getSequences(), + viewport.alignment.getWidth())); } /** * DOCUMENT ME! * * @param e - * DOCUMENT ME! + * DOCUMENT ME! */ public void zappoColour_actionPerformed(ActionEvent e) { @@ -2472,7 +2797,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * DOCUMENT ME! * * @param e - * DOCUMENT ME! + * DOCUMENT ME! */ public void taylorColour_actionPerformed(ActionEvent e) { @@ -2483,7 +2808,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * DOCUMENT ME! * * @param e - * DOCUMENT ME! + * DOCUMENT ME! */ public void hydrophobicityColour_actionPerformed(ActionEvent e) { @@ -2494,7 +2819,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * DOCUMENT ME! * * @param e - * DOCUMENT ME! + * DOCUMENT ME! */ public void helixColour_actionPerformed(ActionEvent e) { @@ -2505,7 +2830,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * DOCUMENT ME! * * @param e - * DOCUMENT ME! + * DOCUMENT ME! */ public void strandColour_actionPerformed(ActionEvent e) { @@ -2516,7 +2841,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * DOCUMENT ME! * * @param e - * DOCUMENT ME! + * DOCUMENT ME! */ public void turnColour_actionPerformed(ActionEvent e) { @@ -2527,7 +2852,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * DOCUMENT ME! * * @param e - * DOCUMENT ME! + * DOCUMENT ME! */ public void buriedColour_actionPerformed(ActionEvent e) { @@ -2538,7 +2863,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * DOCUMENT ME! * * @param e - * DOCUMENT ME! + * DOCUMENT ME! */ public void nucleotideColour_actionPerformed(ActionEvent e) { @@ -2554,7 +2879,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * DOCUMENT ME! * * @param e - * DOCUMENT ME! + * DOCUMENT ME! */ protected void applyToAllGroups_actionPerformed(ActionEvent e) { @@ -2565,7 +2890,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * DOCUMENT ME! * * @param cs - * DOCUMENT ME! + * DOCUMENT ME! */ public void changeColour(ColourSchemeI cs) { @@ -2592,8 +2917,8 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, Alignment al = (Alignment) viewport.alignment; Conservation c = new Conservation("All", - ResidueProperties.propHash, 3, al.getSequences(), 0, al - .getWidth() - 1); + ResidueProperties.propHash, 3, al.getSequences(), 0, + al.getWidth() - 1); c.calculate(); c.verdict(false, viewport.ConsPercGaps); @@ -2629,8 +2954,9 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, if (cs instanceof ClustalxColourScheme) { - sg.cs = new ClustalxColourScheme(sg - .getSequences(viewport.hiddenRepSequences), sg.getWidth()); + sg.cs = new ClustalxColourScheme( + sg.getSequences(viewport.hiddenRepSequences), + sg.getWidth()); } else if (cs instanceof UserColourScheme) { @@ -2652,9 +2978,9 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, { sg.cs.setThreshold(threshold, viewport.getIgnoreGapsConsensus()); - sg.cs.setConsensus(AAFrequency.calculate(sg - .getSequences(viewport.hiddenRepSequences), sg - .getStartRes(), sg.getEndRes() + 1)); + sg.cs.setConsensus(AAFrequency.calculate( + sg.getSequences(viewport.hiddenRepSequences), + sg.getStartRes(), sg.getEndRes() + 1)); } else { @@ -2664,9 +2990,9 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, if (viewport.getConservationSelected()) { Conservation c = new Conservation("Group", - ResidueProperties.propHash, 3, sg - .getSequences(viewport.hiddenRepSequences), sg - .getStartRes(), sg.getEndRes() + 1); + ResidueProperties.propHash, 3, + sg.getSequences(viewport.hiddenRepSequences), + sg.getStartRes(), sg.getEndRes() + 1); c.calculate(); c.verdict(false, viewport.ConsPercGaps); sg.cs.setConservation(c); @@ -2690,15 +3016,15 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * DOCUMENT ME! * * @param e - * DOCUMENT ME! + * DOCUMENT ME! */ protected void modifyPID_actionPerformed(ActionEvent e) { if (viewport.getAbovePIDThreshold() && viewport.globalColourScheme != null) { - SliderPanel.setPIDSliderSource(alignPanel, viewport - .getGlobalColourScheme(), "Background"); + SliderPanel.setPIDSliderSource(alignPanel, + viewport.getGlobalColourScheme(), "Background"); SliderPanel.showPIDSlider(); } } @@ -2707,7 +3033,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * DOCUMENT ME! * * @param e - * DOCUMENT ME! + * DOCUMENT ME! */ protected void modifyConservation_actionPerformed(ActionEvent e) { @@ -2724,7 +3050,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * DOCUMENT ME! * * @param e - * DOCUMENT ME! + * DOCUMENT ME! */ protected void conservationMenuItem_actionPerformed(ActionEvent e) { @@ -2742,7 +3068,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * DOCUMENT ME! * * @param e - * DOCUMENT ME! + * DOCUMENT ME! */ public void abovePIDThreshold_actionPerformed(ActionEvent e) { @@ -2760,7 +3086,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * DOCUMENT ME! * * @param e - * DOCUMENT ME! + * DOCUMENT ME! */ public void userDefinedColour_actionPerformed(ActionEvent e) { @@ -2808,8 +3134,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, if (evt.isControlDown() || SwingUtilities.isRightMouseButton(evt)) { - radioItem - .removeActionListener(radioItem.getActionListeners()[0]); + radioItem.removeActionListener(radioItem.getActionListeners()[0]); int option = JOptionPane.showInternalConfirmDialog( jalview.gui.Desktop.desktop, @@ -2853,7 +3178,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * DOCUMENT ME! * * @param e - * DOCUMENT ME! + * DOCUMENT ME! */ public void PIDColour_actionPerformed(ActionEvent e) { @@ -2864,7 +3189,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * DOCUMENT ME! * * @param e - * DOCUMENT ME! + * DOCUMENT ME! */ public void BLOSUM62Colour_actionPerformed(ActionEvent e) { @@ -2875,7 +3200,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * DOCUMENT ME! * * @param e - * DOCUMENT ME! + * DOCUMENT ME! */ public void sortPairwiseMenuItem_actionPerformed(ActionEvent e) { @@ -2891,7 +3216,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * DOCUMENT ME! * * @param e - * DOCUMENT ME! + * DOCUMENT ME! */ public void sortIDMenuItem_actionPerformed(ActionEvent e) { @@ -2905,7 +3230,22 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * DOCUMENT ME! * * @param e - * DOCUMENT ME! + * DOCUMENT ME! + */ + public void sortLengthMenuItem_actionPerformed(ActionEvent e) + { + SequenceI[] oldOrder = viewport.getAlignment().getSequencesArray(); + AlignmentSorter.sortByLength(viewport.getAlignment()); + addHistoryItem(new OrderCommand("Length Sort", oldOrder, + viewport.alignment)); + alignPanel.paintAlignment(true); + } + + /** + * DOCUMENT ME! + * + * @param e + * DOCUMENT ME! */ public void sortGroupMenuItem_actionPerformed(ActionEvent e) { @@ -2921,7 +3261,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * DOCUMENT ME! * * @param e - * DOCUMENT ME! + * DOCUMENT ME! */ public void removeRedundancyMenuItem_actionPerformed(ActionEvent e) { @@ -2932,7 +3272,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * DOCUMENT ME! * * @param e - * DOCUMENT ME! + * DOCUMENT ME! */ public void pairwiseAlignmentMenuItem_actionPerformed(ActionEvent e) { @@ -2955,7 +3295,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * DOCUMENT ME! * * @param e - * DOCUMENT ME! + * DOCUMENT ME! */ public void PCAMenuItem_actionPerformed(ActionEvent e) { @@ -2990,7 +3330,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * DOCUMENT ME! * * @param e - * DOCUMENT ME! + * DOCUMENT ME! */ public void averageDistanceTreeMenuItem_actionPerformed(ActionEvent e) { @@ -3001,7 +3341,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * DOCUMENT ME! * * @param e - * DOCUMENT ME! + * DOCUMENT ME! */ public void neighbourTreeMenuItem_actionPerformed(ActionEvent e) { @@ -3012,7 +3352,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * DOCUMENT ME! * * @param e - * DOCUMENT ME! + * DOCUMENT ME! */ protected void njTreeBlosumMenuItem_actionPerformed(ActionEvent e) { @@ -3023,7 +3363,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * DOCUMENT ME! * * @param e - * DOCUMENT ME! + * DOCUMENT ME! */ protected void avTreeBlosumMenuItem_actionPerformed(ActionEvent e) { @@ -3034,11 +3374,11 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * DOCUMENT ME! * * @param type - * DOCUMENT ME! + * DOCUMENT ME! * @param pwType - * DOCUMENT ME! + * DOCUMENT ME! * @param title - * DOCUMENT ME! + * DOCUMENT ME! */ void NewTreePanel(String type, String pwType, String title) { @@ -3083,8 +3423,8 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, } else { - // are the sequences aligned? - if (!viewport.alignment.isAligned()) + // are the visible sequences aligned? + if (!viewport.alignment.isAligned(false)) { JOptionPane .showMessageDialog( @@ -3122,9 +3462,9 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * DOCUMENT ME! * * @param title - * DOCUMENT ME! + * DOCUMENT ME! * @param order - * DOCUMENT ME! + * DOCUMENT ME! */ public void addSortByOrderMenuItem(String title, final AlignmentOrder order) @@ -3153,10 +3493,10 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * Add a new sort by annotation score menu item * * @param sort - * the menu to add the option to + * the menu to add the option to * @param scoreLabel - * the label used to retrieve scores for each sequence on the - * alignment + * the label used to retrieve scores for each sequence on the + * alignment */ public void addSortByAnnotScoreMenuItem(JMenu sort, final String scoreLabel) @@ -3168,8 +3508,8 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, public void actionPerformed(ActionEvent e) { SequenceI[] oldOrder = viewport.getAlignment().getSequencesArray(); - AlignmentSorter.sortByAnnotationScore(scoreLabel, viewport - .getAlignment());// ,viewport.getSelectionGroup()); + AlignmentSorter.sortByAnnotationScore(scoreLabel, + viewport.getAlignment());// ,viewport.getSelectionGroup()); addHistoryItem(new OrderCommand("Sort by " + scoreLabel, oldOrder, viewport.alignment)); alignPanel.paintAlignment(true); @@ -3217,8 +3557,8 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, Enumeration labels = scoreSorts.keys(); while (labels.hasMoreElements()) { - addSortByAnnotScoreMenuItem(sortByAnnotScore, (String) labels - .nextElement()); + addSortByAnnotScoreMenuItem(sortByAnnotScore, + (String) labels.nextElement()); } sortByAnnotScore.setVisible(scoreSorts.size() > 0); scoreSorts.clear(); @@ -3236,9 +3576,9 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * modified. * * @param treePanel - * Displayed tree window. + * Displayed tree window. * @param title - * SortBy menu item title. + * SortBy menu item title. */ public void buildTreeMenu() { @@ -3353,10 +3693,13 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, // jobs // 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()) + if (!viewport.alignment.isAligned(false)) { seqs.setSequences(new SeqCigar[] { seqs.getSequences()[0] }); + // TODO: if seqs.getSequences().length>1 then should really have warned + // user! + } return seqs; } @@ -3365,13 +3708,13 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * DOCUMENT ME! * * @param e - * DOCUMENT ME! + * DOCUMENT ME! */ protected void LoadtreeMenuItem_actionPerformed(ActionEvent e) { // Pick the tree file - JalviewFileChooser chooser = new JalviewFileChooser(jalview.bin.Cache - .getProperty("LAST_DIRECTORY")); + JalviewFileChooser chooser = new JalviewFileChooser( + jalview.bin.Cache.getProperty("LAST_DIRECTORY")); chooser.setFileView(new JalviewFileView()); chooser.setDialogTitle("Select a newick-like tree file"); chooser.setToolTipText("Load a tree file"); @@ -3395,8 +3738,8 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, } if (fin != null && fin.hasWarningMessage()) { - JOptionPane.showMessageDialog(Desktop.desktop, fin - .getWarningMessage(), "Possible problem with tree file", + JOptionPane.showMessageDialog(Desktop.desktop, + fin.getWarningMessage(), "Possible problem with tree file", JOptionPane.WARNING_MESSAGE); } } @@ -3424,19 +3767,19 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * current alignment view * * @param nf - * the tree + * the tree * @param title - * tree viewer title + * tree viewer title * @param input - * Associated alignment input data (or null) + * Associated alignment input data (or null) * @param w - * width + * width * @param h - * height + * height * @param x - * position + * position * @param y - * position + * position * @return TreePanel handle */ public TreePanel ShowNewickTree(NewickFile nf, String title, @@ -3469,87 +3812,162 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, return tp; } + private boolean buildingMenu = false; + /** * Generates menu items and listener event actions for web service clients * */ public void BuildWebServiceMenu() { - // TODO: add support for context dependent disabling of services based on - // alignment and current selection - // TODO: add additional serviceHandle parameter to specify abstract handler - // class independently of AbstractName - // TODO: add in rediscovery GUI function to restart discoverer - // TODO: group services by location as well as function and/or introduce - // object broker mechanism. - if ((Discoverer.services != null) && (Discoverer.services.size() > 0)) - { - // TODO: refactor to allow list of AbstractName/Handler bindings to be - // stored or retrieved from elsewhere - Vector msaws = (Vector) Discoverer.services.get("MsaWS"); - Vector secstrpr = (Vector) Discoverer.services.get("SecStrPred"); - Vector seqsrch = (Vector) Discoverer.services.get("SeqSearch"); - // TODO: move GUI generation code onto service implementation - so a - // client instance attaches itself to the GUI with method call like - // jalview.ws.MsaWSClient.bind(servicehandle, Desktop.instance, - // alignframe) - Vector wsmenu = new Vector(); - final IProgressIndicator af = this; - if (msaws != null) + while (buildingMenu) + { + try { - // Add any Multiple Sequence Alignment Services - final JMenu msawsmenu = new JMenu("Alignment"); - for (int i = 0, j = msaws.size(); i < j; i++) - { - final ext.vamsas.ServiceHandle sh = (ext.vamsas.ServiceHandle) msaws - .get(i); - jalview.ws.WSClient impl = jalview.ws.Discoverer - .getServiceClient(sh); - impl.attachWSMenuEntry(msawsmenu, this); - - } - wsmenu.add(msawsmenu); - } - if (secstrpr != null) + System.err.println("Waiting for building menu to finish."); + Thread.sleep(10); + } catch (Exception e) { - // Add any secondary structure prediction services - final JMenu secstrmenu = new JMenu("Secondary Structure Prediction"); - for (int i = 0, j = secstrpr.size(); i < j; i++) - { - final ext.vamsas.ServiceHandle sh = (ext.vamsas.ServiceHandle) secstrpr - .get(i); - jalview.ws.WSClient impl = jalview.ws.Discoverer - .getServiceClient(sh); - impl.attachWSMenuEntry(secstrmenu, this); - } - wsmenu.add(secstrmenu); } - if (seqsrch != null) + ; + } + final AlignFrame me = this; + buildingMenu = true; + new Thread(new Runnable() + { + public void run() { - // Add any sequence search services - final JMenu seqsrchmenu = new JMenu("Sequence Database Search"); - for (int i = 0, j = seqsrch.size(); i < j; i++) + try + { + System.err.println("Building ws menu again " + + Thread.currentThread()); + // TODO: add support for context dependent disabling of services based + // on + // alignment and current selection + // TODO: add additional serviceHandle parameter to specify abstract + // handler + // class independently of AbstractName + // TODO: add in rediscovery GUI function to restart discoverer + // TODO: group services by location as well as function and/or + // introduce + // object broker mechanism. + final Vector wsmenu = new Vector(); + final IProgressIndicator af = me; + if (Cache.getDefault("SHOW_JWS1_SERVICES", true) + && Discoverer.services != null + && (Discoverer.services.size() > 0)) + { + // TODO: refactor to allow list of AbstractName/Handler bindings to + // be + // stored or retrieved from elsewhere + Vector msaws = (Vector) Discoverer.services.get("MsaWS"); + Vector secstrpr = (Vector) Discoverer.services + .get("SecStrPred"); + Vector seqsrch = (Vector) Discoverer.services.get("SeqSearch"); + // TODO: move GUI generation code onto service implementation - so a + // client instance attaches itself to the GUI with method call like + // jalview.ws.MsaWSClient.bind(servicehandle, Desktop.instance, + // alignframe) + if (msaws != null) + { + // Add any Multiple Sequence Alignment Services + final JMenu msawsmenu = new JMenu("Alignment"); + for (int i = 0, j = msaws.size(); i < j; i++) + { + final ext.vamsas.ServiceHandle sh = (ext.vamsas.ServiceHandle) msaws + .get(i); + jalview.ws.WSMenuEntryProviderI impl = jalview.ws.jws1.Discoverer + .getServiceClient(sh); + impl.attachWSMenuEntry(msawsmenu, me); + + } + wsmenu.add(msawsmenu); + } + if (secstrpr != null) + { + // Add any secondary structure prediction services + final JMenu secstrmenu = new JMenu( + "Secondary Structure Prediction"); + for (int i = 0, j = secstrpr.size(); i < j; i++) + { + final ext.vamsas.ServiceHandle sh = (ext.vamsas.ServiceHandle) secstrpr + .get(i); + jalview.ws.WSMenuEntryProviderI impl = jalview.ws.jws1.Discoverer + .getServiceClient(sh); + impl.attachWSMenuEntry(secstrmenu, me); + } + wsmenu.add(secstrmenu); + } + if (seqsrch != null) + { + // Add any sequence search services + final JMenu seqsrchmenu = new JMenu( + "Sequence Database Search"); + for (int i = 0, j = seqsrch.size(); i < j; i++) + { + final ext.vamsas.ServiceHandle sh = (ext.vamsas.ServiceHandle) seqsrch + .elementAt(i); + jalview.ws.WSMenuEntryProviderI impl = jalview.ws.jws1.Discoverer + .getServiceClient(sh); + impl.attachWSMenuEntry(seqsrchmenu, me); + } + wsmenu.add(seqsrchmenu); + } + } + + // TODO: move into separate menu builder class. + if (Cache.getDefault("SHOW_JWS2_SERVICES", true)) + { + Jws2Discoverer jws2servs = Jws2Discoverer.getDiscoverer(); + if (jws2servs != null) + { + if (jws2servs.hasServices()) + { + JMenu jws2men = new JMenu("Jaba Web Services"); + jws2servs.attachWSMenuEntry(jws2men, me); + for (int i = 0, iSize = jws2men.getMenuComponentCount(); i < iSize; i++) + { + wsmenu.add(jws2men.getMenuComponent(i)); + } + } + } + } + + javax.swing.SwingUtilities.invokeLater(new Runnable() + { + public void run() + { + try + { + + resetWebServiceMenu(); + // finally, add the whole shebang onto the webservices menu + if (wsmenu.size() > 0) + { + for (int i = 0, j = wsmenu.size(); i < j; i++) + { + webService.add((JMenu) wsmenu.get(i)); + } + } + else + { + me.webService.add(me.webServiceNoServices); + } + } catch (Exception e) + { + } + ; + } + }); + } catch (Exception e) { - final ext.vamsas.ServiceHandle sh = (ext.vamsas.ServiceHandle) seqsrch - .elementAt(i); - jalview.ws.WSClient impl = jalview.ws.Discoverer - .getServiceClient(sh); - impl.attachWSMenuEntry(seqsrchmenu, this); } - // finally, add the whole shebang onto the webservices menu - wsmenu.add(seqsrchmenu); - } - resetWebServiceMenu(); - for (int i = 0, j = wsmenu.size(); i < j; i++) - { - webService.add((JMenu) wsmenu.get(i)); + ; + + buildingMenu = false; } - } - else - { - resetWebServiceMenu(); - this.webService.add(this.webServiceNoServices); - } + }).start(); + } /** @@ -3560,30 +3978,22 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, private void resetWebServiceMenu() { webService.removeAll(); - // Temporary hack - DBRef Fetcher always top level ws entry. - JMenuItem rfetch = new JMenuItem("Fetch DB References"); - rfetch - .setToolTipText("Retrieve and parse sequence database records for the alignment or the currently selected sequences"); - webService.add(rfetch); - rfetch.addActionListener(new ActionListener() - { - - public void actionPerformed(ActionEvent e) - { - new Thread(new Runnable() - { - - public void run() - { - new jalview.ws.DBRefFetcher(alignPanel.av - .getSequenceSelection(), alignPanel.alignFrame) - .fetchDBRefs(false); - } - }).start(); - - } + build_fetchdbmenu(webService); + build_urlServiceMenu(webService); + } - }); + /** + * construct any groupURL type service menu entries. + * + * @param webService + */ + private void build_urlServiceMenu(JMenu webService) + { + if (Cache.getDefault("SHOW_ENFIN_SERVICES", true)) + { + jalview.ws.EnfinEnvision2OneWay.getInstance().attachWSMenuEntry( + webService, this); + } } /* @@ -3637,8 +4047,8 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, showProducts.removeAll(); final boolean dna = viewport.getAlignment().isNucleotide(); final Alignment ds = dataset; - String[] ptypes = CrossRef.findSequenceXrefTypes(dna, selection, - dataset); + String[] ptypes = (selection == null || selection.length == 0) ? null + : CrossRef.findSequenceXrefTypes(dna, selection, dataset); // Object[] prods = // CrossRef.buildXProductsList(viewport.getAlignment().isNucleotide(), // selection, dataset, true); @@ -3668,8 +4078,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, } catch (Exception e) { jalview.bin.Cache.log - .warn( - "canTranslate threw an exception - please report to help@jalview.org", + .warn("canTranslate threw an exception - please report to help@jalview.org", e); return false; } @@ -3713,12 +4122,12 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, } Alignment al = new Alignment(sprods); AlignedCodonFrame[] cf = prods.getCodonFrames(); + al.setDataset(ds); for (int s = 0; cf != null && s < cf.length; s++) { al.addCodonFrame(cf[s]); cf[s] = null; } - al.setDataset(ds); AlignFrame naf = new AlignFrame(al, DEFAULT_WIDTH, DEFAULT_HEIGHT); String newtitle = "" + ((fdna) ? "Proteins " : "Nucleotides ") @@ -3759,13 +4168,12 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, // old way try { - return (jalview.analysis.Dna.canTranslate(selection, viewport - .getViewAsVisibleContigs(true))); + return (jalview.analysis.Dna.canTranslate(selection, + viewport.getViewAsVisibleContigs(true))); } catch (Exception e) { jalview.bin.Cache.log - .warn( - "canTranslate threw an exception - please report to help@jalview.org", + .warn("canTranslate threw an exception - please report to help@jalview.org", e); return false; } @@ -3844,9 +4252,9 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * Try to load a features file onto the alignment. * * @param file - * contents or path to retrieve file + * contents or path to retrieve file * @param type - * access mode of file (see jalview.io.AlignFile) + * access mode of file (see jalview.io.AlignFile) * @return true if features file was parsed corectly. */ public boolean parseFeaturesFile(String file, String type) @@ -3854,9 +4262,10 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, boolean featuresFile = false; try { - featuresFile = new FeaturesFile(file, type).parse(viewport.alignment - .getDataset(), alignPanel.seqPanel.seqCanvas - .getFeatureRenderer().featureColours, false); + featuresFile = new FeaturesFile(file, type) + .parse(viewport.alignment.getDataset(), + alignPanel.seqPanel.seqCanvas.getFeatureRenderer().featureColours, + false); } catch (Exception ex) { ex.printStackTrace(); @@ -3866,6 +4275,15 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, { viewport.showSequenceFeatures = true; showSeqFeatures.setSelected(true); + if (alignPanel.seqPanel.seqCanvas.fr != null) + { + // update the min/max ranges where necessary + alignPanel.seqPanel.seqCanvas.fr.findAllFeatures(true); + } + if (featureSettings != null) + { + featureSettings.setTableData(); + } alignPanel.paintAlignment(true); } @@ -3921,8 +4339,17 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, } java.net.URI uri = new java.net.URI(s); - java.io.File file = new java.io.File(uri); - files.add(file); + // check to see if we can handle this kind of URI + if (uri.getScheme().toLowerCase().startsWith("http")) + { + files.add(uri.toString()); + } + else + { + // otherwise preserve old behaviour: catch all for file objects + java.io.File file = new java.io.File(uri); + files.add(file.toString()); + } } } } catch (Exception e) @@ -3946,23 +4373,24 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, } /** - * Attempt to load a "dropped" file: First by testing whether it's and - * Annotation file, then a JNet file, and finally a features file. If all are - * false then the user may have dropped an alignment file onto this + * Attempt to load a "dropped" file or URL string: First by testing whether + * it's and Annotation file, then a JNet file, and finally a features file. If + * all are false then the user may have dropped an alignment file onto this * AlignFrame. * * @param file - * either a filename or a URL string. + * either a filename or a URL string. */ public void loadJalviewDataFile(String file) { try { - String protocol = "File"; - - if (file.indexOf("http:") > -1 || file.indexOf("file:") > -1) + String protocol = jalview.io.FormatAdapter.FILE; + String f = file.toLowerCase(); + if (f.indexOf("http:") == 0 || f.indexOf("https:") == 0 + || f.indexOf("file:") == 0) { - protocol = "URL"; + protocol = jalview.io.FormatAdapter.URL; } boolean isAnnotation = new AnnotationFile().readAnnotationFile( @@ -3977,8 +4405,8 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, { jalview.io.JPredFile predictions = new jalview.io.JPredFile(file, protocol); - new JnetAnnotationMaker().add_annotation(predictions, viewport - .getAlignment(), 0, false); + new JnetAnnotationMaker().add_annotation(predictions, + viewport.getAlignment(), 0, false); isAnnotation = true; } else @@ -4059,6 +4487,296 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, buildSortByAnnotationScoresMenu(); } } + + /* + * (non-Javadoc) + * + * @see + * jalview.jbgui.GAlignFrame#showDbRefs_actionPerformed(java.awt.event.ActionEvent + * ) + */ + protected void showDbRefs_actionPerformed(ActionEvent e) + { + viewport.setShowDbRefs(showDbRefsMenuitem.isSelected()); + } + + /* + * (non-Javadoc) + * + * @seejalview.jbgui.GAlignFrame#showNpFeats_actionPerformed(java.awt.event. + * ActionEvent) + */ + protected void showNpFeats_actionPerformed(ActionEvent e) + { + viewport.setShowNpFeats(showNpFeatsMenuitem.isSelected()); + } + + /** + * find the viewport amongst the tabs in this alignment frame and close that + * tab + * + * @param av + */ + public boolean closeView(AlignViewport av) + { + if (viewport == av) + { + this.closeMenuItem_actionPerformed(false); + return true; + } + Component[] comp = tabbedPane.getComponents(); + for (int i = 0; comp != null && i < comp.length; i++) + { + if (comp[i] instanceof AlignmentPanel) + { + if (((AlignmentPanel) comp[i]).av == av) + { + // close the view. + closeView((AlignmentPanel) comp[i]); + return true; + } + } + } + return false; + } + + protected void build_fetchdbmenu(JMenu webService) + { + // Temporary hack - DBRef Fetcher always top level ws entry. + // TODO We probably want to store a sequence database checklist in + // preferences and have checkboxes.. rather than individual sources selected + // here + final JMenu rfetch = new JMenu("Fetch DB References"); + rfetch.setToolTipText("Retrieve and parse sequence database records for the alignment or the currently selected sequences"); + webService.add(rfetch); + + JMenuItem fetchr = new JMenuItem("Standard Databases"); + fetchr.setToolTipText("Fetch from EMBL/EMBLCDS or Uniprot/PDB and any selected DAS sources"); + fetchr.addActionListener(new ActionListener() + { + + public void actionPerformed(ActionEvent e) + { + new Thread(new Runnable() + { + + public void run() + { + new jalview.ws.DBRefFetcher(alignPanel.av + .getSequenceSelection(), alignPanel.alignFrame) + .fetchDBRefs(false); + } + }).start(); + + } + + }); + rfetch.add(fetchr); + final AlignFrame me=this; + new Thread(new Runnable() + { + public void run() + { + final jalview.ws.SequenceFetcher sf = SequenceFetcher + .getSequenceFetcherSingleton(me); + final String[] otherdb = sf.getOrderedSupportedSources(); + // sf.getDbInstances(jalview.ws.dbsources.DasSequenceSource.class); + // jalview.util.QuickSort.sort(otherdb, otherdb); + javax.swing.SwingUtilities.invokeLater(new Runnable() + { + public void run() + { + + JMenu dfetch = new JMenu(); + JMenuItem fetchr; + rfetch.add(dfetch); + int comp = 0, mcomp = 15; + String mname = null; + if (otherdb != null && otherdb.length > 0) + { + for (int i = 0; i < otherdb.length; i++) + { + String dbname = sf.getSourceProxy(otherdb[i]).getDbName(); + if (mname == null) + { + mname = "from '" + dbname + "'"; + } + fetchr = new JMenuItem(otherdb[i]); + final String[] dassource = new String[] + { otherdb[i] }; + fetchr.addActionListener(new ActionListener() + { + + public void actionPerformed(ActionEvent e) + { + new Thread(new Runnable() + { + + public void run() + { + new jalview.ws.DBRefFetcher(alignPanel.av + .getSequenceSelection(), + alignPanel.alignFrame, dassource) + .fetchDBRefs(false); + } + }).start(); + } + + }); + fetchr.setToolTipText("Retrieve from " + dbname); + dfetch.add(fetchr); + if (comp++ == mcomp || i == (otherdb.length - 1)) + { + dfetch.setText(mname + " to '" + dbname + "'"); + rfetch.add(dfetch); + dfetch = new JMenu(); + mname = null; + comp = 0; + } + } + } + } + }); + } + }).start(); + + } + + /** + * Left justify the whole alignment. + */ + protected void justifyLeftMenuItem_actionPerformed(ActionEvent e) + { + AlignmentI al = viewport.getAlignment(); + al.justify(false); + viewport.firePropertyChange("alignment", null, al); + } + + /** + * Right justify the whole alignment. + */ + protected void justifyRightMenuItem_actionPerformed(ActionEvent e) + { + AlignmentI al = viewport.getAlignment(); + al.justify(true); + viewport.firePropertyChange("alignment", null, al); + } + + public void setShowSeqFeatures(boolean b) + { + showSeqFeatures.setSelected(true); + viewport.setShowSequenceFeatures(true); + } + + /* + * (non-Javadoc) + * + * @see + * jalview.jbgui.GAlignFrame#showUnconservedMenuItem_actionPerformed(java. + * awt.event.ActionEvent) + */ + protected void showUnconservedMenuItem_actionPerformed(ActionEvent e) + { + viewport.setShowUnconserved(showNonconservedMenuItem.getState()); + alignPanel.paintAlignment(true); + } + + /* + * (non-Javadoc) + * + * @see + * jalview.jbgui.GAlignFrame#showGroupConsensus_actionPerformed(java.awt.event + * .ActionEvent) + */ + protected void showGroupConsensus_actionPerformed(ActionEvent e) + { + viewport.setShowGroupConsensus(showGroupConsensus.getState()); + alignPanel.updateAnnotation(applyAutoAnnotationSettings.getState()); + + } + + /* + * (non-Javadoc) + * + * @see + * jalview.jbgui.GAlignFrame#showGroupConservation_actionPerformed(java.awt + * .event.ActionEvent) + */ + protected void showGroupConservation_actionPerformed(ActionEvent e) + { + viewport.setShowGroupConservation(showGroupConservation.getState()); + alignPanel.updateAnnotation(applyAutoAnnotationSettings.getState()); + } + + /* + * (non-Javadoc) + * + * @see + * jalview.jbgui.GAlignFrame#showConsensusHistogram_actionPerformed(java.awt + * .event.ActionEvent) + */ + protected void showConsensusHistogram_actionPerformed(ActionEvent e) + { + viewport.setShowConsensusHistogram(showConsensusHistogram.getState()); + alignPanel.updateAnnotation(applyAutoAnnotationSettings.getState()); + } + + /* + * (non-Javadoc) + * + * @see + * jalview.jbgui.GAlignFrame#showConsensusProfile_actionPerformed(java.awt + * .event.ActionEvent) + */ + protected void showSequenceLogo_actionPerformed(ActionEvent e) + { + viewport.setShowSequenceLogo(showSequenceLogo.getState()); + alignPanel.updateAnnotation(applyAutoAnnotationSettings.getState()); + } + + protected void applyAutoAnnotationSettings_actionPerformed(ActionEvent e) + { + alignPanel.updateAnnotation(applyAutoAnnotationSettings.getState()); + } + + /* + * (non-Javadoc) + * + * @see + * jalview.jbgui.GAlignFrame#makeGrpsFromSelection_actionPerformed(java.awt + * .event.ActionEvent) + */ + protected void makeGrpsFromSelection_actionPerformed(ActionEvent e) + { + if (viewport.getSelectionGroup() != null) + { + SequenceGroup[] gps = jalview.analysis.Grouping.makeGroupsFrom( + viewport.getSequenceSelection(), + viewport.getAlignmentView(true).getSequenceStrings( + viewport.getGapCharacter()), + viewport.alignment.getGroups()); + viewport.alignment.deleteAllGroups(); + viewport.sequenceColours = null; + viewport.setSelectionGroup(null); + // set view properties for each group + for (int g = 0; g < gps.length; g++) + { + gps[g].setShowNonconserved(viewport.getShowUnconserved()); + gps[g].setshowSequenceLogo(viewport.isShowSequenceLogo()); + viewport.alignment.addGroup(gps[g]); + Color col = new Color((int) (Math.random() * 255), + (int) (Math.random() * 255), (int) (Math.random() * 255)); + col = col.brighter(); + for (Enumeration sq = gps[g].getSequences(null).elements(); sq + .hasMoreElements(); viewport.setSequenceColour( + (SequenceI) sq.nextElement(), col)) + ; + } + PaintRefresher.Refresh(this, viewport.getSequenceSetId()); + alignPanel.updateAnnotation(); + alignPanel.paintAlignment(true); + } + } } class PrintThread extends Thread