X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FAlignFrame.java;h=d188d613bab846f4cbb8059489216a8bd24bf140;hb=21c29b20790ac555b2e2a124a034f6c6b4486270;hp=b658ffb7c7b424b6ef2c2fb84523a91ca226b523;hpb=1b3b9ada9b959de9d66b1d477bb155a0c6668c8e;p=jalview.git diff --git a/src/jalview/gui/AlignFrame.java b/src/jalview/gui/AlignFrame.java old mode 100755 new mode 100644 index b658ffb..d188d61 --- a/src/jalview/gui/AlignFrame.java +++ b/src/jalview/gui/AlignFrame.java @@ -1,13 +1,13 @@ /* - * Jalview - A Sequence Alignment Editor and Viewer (Version 2.6) - * Copyright (C) 2010 J Procter, AM Waterhouse, G Barton, M Clamp, S Searle + * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8) + * Copyright (C) 2012 J Procter, AM Waterhouse, LM Lui, J Engelhardt, G Barton, M Clamp, S Searle * * This file is part of Jalview. * * 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. - * + * * 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 @@ -55,6 +55,7 @@ import jalview.io.JalviewFileChooser; import jalview.io.JalviewFileView; import jalview.io.JnetAnnotationMaker; import jalview.io.NewickFile; +import jalview.io.TCoffeeScoreFile; import jalview.jbgui.GAlignFrame; import jalview.schemes.Blosum62ColourScheme; import jalview.schemes.BuriedColourScheme; @@ -65,14 +66,19 @@ import jalview.schemes.HelixColourScheme; import jalview.schemes.HydrophobicColourScheme; import jalview.schemes.NucleotideColourScheme; import jalview.schemes.PIDColourScheme; +import jalview.schemes.PurinePyrimidineColourScheme; +import jalview.schemes.RNAHelicesColourChooser; import jalview.schemes.ResidueProperties; import jalview.schemes.StrandColourScheme; +import jalview.schemes.TCoffeeColourScheme; import jalview.schemes.TaylorColourScheme; import jalview.schemes.TurnColourScheme; import jalview.schemes.UserColourScheme; import jalview.schemes.ZappoColourScheme; +import jalview.util.MessageManager; import jalview.ws.jws1.Discoverer; import jalview.ws.jws2.Jws2Discoverer; +import jalview.ws.seqfetcher.DbSourceProxy; import java.awt.BorderLayout; import java.awt.Color; @@ -103,6 +109,7 @@ import java.net.URL; import java.util.ArrayList; import java.util.Enumeration; import java.util.Hashtable; +import java.util.List; import java.util.Vector; import javax.swing.JButton; @@ -281,7 +288,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, */ void init() { - if (viewport.conservation == null) + if (viewport.getAlignmentConservationAnnotation() == null) { BLOSUM62Colour.setEnabled(false); conservationMenuItem.setEnabled(false); @@ -307,7 +314,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, { this.setDropTarget(new java.awt.dnd.DropTarget(this, this)); addServiceListeners(); - setGUINucleotide(viewport.alignment.isNucleotide()); + setGUINucleotide(viewport.getAlignment().isNucleotide()); } setMenusFromViewport(viewport); @@ -346,6 +353,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, { addKeyListener(new KeyAdapter() { + @Override public void keyPressed(KeyEvent evt) { if (viewport.cursorMode @@ -401,6 +409,17 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, } break; + // case KeyEvent.VK_A: + // if (viewport.cursorMode) + // { + // alignPanel.seqPanel.insertNucAtCursor(false,"A"); + // //System.out.println("A"); + // } + // break; + /* + * case KeyEvent.VK_CLOSE_BRACKET: if (viewport.cursorMode) { + * System.out.println("closing bracket"); } break; + */ case KeyEvent.VK_DELETE: case KeyEvent.VK_BACK_SPACE: if (!viewport.cursorMode) @@ -457,8 +476,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, case KeyEvent.VK_F2: viewport.cursorMode = !viewport.cursorMode; - statusBar.setText("Keyboard editing mode is " - + (viewport.cursorMode ? "on" : "off")); + statusBar.setText(MessageManager.formatMessage("label.keyboard_editing_mode", new String[]{(viewport.cursorMode ? "on" : "off")})); if (viewport.cursorMode) { alignPanel.seqPanel.seqCanvas.cursorX = viewport.startRes; @@ -515,6 +533,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, } } + @Override public void keyReleased(KeyEvent evt) { switch (evt.getKeyCode()) @@ -567,12 +586,13 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, if (newPanel) { - if (ap.av.padGaps) + if (ap.av.isPadGaps()) { - ap.av.alignment.padGaps(); + ap.av.getAlignment().padGaps(); } ap.av.updateConservation(ap); ap.av.updateConsensus(ap); + ap.av.updateStrucConsensus(ap); } } @@ -598,6 +618,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, Desktop.instance.addJalviewPropertyChangeListener("services", thisListener = new java.beans.PropertyChangeListener() { + @Override public void propertyChange(PropertyChangeEvent evt) { // // System.out.println("Discoverer property change."); @@ -606,6 +627,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, SwingUtilities.invokeLater(new Runnable() { + @Override public void run() { System.err @@ -619,6 +641,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, }); addInternalFrameListener(new javax.swing.event.InternalFrameAdapter() { + @Override public void internalFrameClosed( javax.swing.event.InternalFrameEvent evt) { @@ -631,6 +654,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, // Finally, build the menu once to get current service state new Thread(new Runnable() { + @Override public void run() { BuildWebServiceMenu(); @@ -644,11 +668,14 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, conservationMenuItem.setEnabled(!nucleotide); modifyConservation.setEnabled(!nucleotide); showGroupConservation.setEnabled(!nucleotide); + rnahelicesColour.setEnabled(nucleotide); + purinePyrimidineColour.setEnabled(nucleotide); // Remember AlignFrame always starts as protein - if (!nucleotide) - { - calculateMenu.remove(calculateMenu.getItemCount() - 2); - } + // if (!nucleotide) + // { + // showTr + // calculateMenu.remove(calculateMenu.getItemCount() - 2); + // } } /** @@ -670,7 +697,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, */ void setMenusFromViewport(AlignViewport av) { - padGapsMenuitem.setSelected(av.padGaps); + padGapsMenuitem.setSelected(av.isPadGaps()); colourTextMenuItem.setSelected(av.showColourText); abovePIDThreshold.setSelected(av.getAbovePIDThreshold()); conservationMenuItem.setSelected(av.getConservationSelected()); @@ -685,25 +712,34 @@ 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); + showNonconservedMenuItem.setSelected(av.getShowUnconserved()); + showGroupConsensus.setSelected(av.isShowGroupConsensus()); + showGroupConservation.setSelected(av.isShowGroupConservation()); + showConsensusHistogram.setSelected(av.isShowConsensusHistogram()); + showSequenceLogo.setSelected(av.isShowSequenceLogo()); + normaliseSequenceLogo.setSelected(av.isNormaliseSequenceLogo()); + setColourSelected(ColourSchemeProperty.getColourName(av .getGlobalColourScheme())); showSeqFeatures.setSelected(av.showSequenceFeatures); hiddenMarkers.setState(av.showHiddenMarkers); - applyToAllGroups.setState(av.colourAppliesToAllGroups); + applyToAllGroups.setState(av.getColourAppliesToAllGroups()); showNpFeatsMenuitem.setSelected(av.isShowNpFeats()); showDbRefsMenuitem.setSelected(av.isShowDbRefs()); - + autoCalculate.setSelected(av.autoCalculateConsensus); + sortByTree.setSelected(av.sortByTree); + listenToViewSelections.setSelected(av.followSelection); + rnahelicesColour.setEnabled(av.getAlignment().hasRNAStructure()); + rnahelicesColour + .setSelected(av.getGlobalColourScheme() instanceof jalview.schemes.RNAHelicesColour); setShowProductsEnabled(); updateEditMenuBar(); } + // methods for implementing IProgressIndicator + // need to refactor to a reusable stub class Hashtable progressBars, progressBarHandlers; /* @@ -711,6 +747,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * * @see jalview.gui.IProgressIndicator#setProgressBar(java.lang.String, long) */ + @Override public void setProgressBar(String message, long id) { if (progressBars == null) @@ -758,6 +795,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, validate(); } + @Override public void registerHandler(final long id, final IProgressIndicatorHandler handler) { @@ -770,11 +808,12 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, final JPanel progressPanel = (JPanel) progressBars.get(new Long(id)); if (handler.canCancel()) { - JButton cancel = new JButton("Cancel"); + JButton cancel = new JButton(MessageManager.getString("action.cancel")); final IProgressIndicator us = this; cancel.addActionListener(new ActionListener() { + @Override public void actionPerformed(ActionEvent e) { handler.cancelActivity(id); @@ -792,6 +831,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * * @return true if any progress bars are still active */ + @Override public boolean operationInProgress() { if (progressBars != null && progressBars.size() > 0) @@ -814,20 +854,25 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, return alignPanel.seqPanel.seqCanvas.getFeatureRenderer(); } + @Override public void fetchSequence_actionPerformed(ActionEvent e) { new SequenceFetcher(this); } + @Override public void addFromFile_actionPerformed(ActionEvent e) { Desktop.instance.inputLocalFileMenuItem_actionPerformed(viewport); } + @Override public void reload_actionPerformed(ActionEvent e) { if (fileName != null) { + // TODO: JAL-1108 - ensure all associated frames are closed regardless of + // originating file's format // TODO: work out how to recover feature settings for correct view(s) when // file is reloaded. if (currentFileFormat.equals("Jalview")) @@ -836,6 +881,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, for (int i = 0; i < frames.length; i++) { if (frames[i] instanceof AlignFrame && frames[i] != this + && ((AlignFrame) frames[i]).fileName != null && ((AlignFrame) frames[i]).fileName.equals(fileName)) { try @@ -873,6 +919,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, final FeatureSettings nfs = newframe.featureSettings; SwingUtilities.invokeLater(new Runnable() { + @Override public void run() { nfs.frame.setBounds(fspos); @@ -886,16 +933,19 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, } } + @Override public void addFromText_actionPerformed(ActionEvent e) { Desktop.instance.inputTextboxMenuItem_actionPerformed(viewport); } + @Override public void addFromURL_actionPerformed(ActionEvent e) { Desktop.instance.inputURLMenuItem_actionPerformed(viewport); } + @Override public void save_actionPerformed(ActionEvent e) { if (fileName == null @@ -917,6 +967,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * @param e * DOCUMENT ME! */ + @Override public void saveAs_actionPerformed(ActionEvent e) { JalviewFileChooser chooser = new JalviewFileChooser( @@ -937,8 +988,8 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, if (currentFileFormat == null) { JOptionPane.showInternalMessageDialog(Desktop.desktop, - "You must select a file format before saving!", - "File format not specified", JOptionPane.WARNING_MESSAGE); + MessageManager.getString("label.select_file_format_before_saving"), + MessageManager.getString("label.file_format_not_specified"), JOptionPane.WARNING_MESSAGE); value = chooser.showSaveDialog(this); return; } @@ -974,8 +1025,8 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, success = new Jalview2XML().SaveAlignment(this, file, shortName); - statusBar.setText("Successfully saved to file: " + fileName + " in " - + format + " format."); + statusBar.setText(MessageManager.formatMessage("label.successfully_saved_to_file_in_format",new String[]{fileName, format})); + } else @@ -991,14 +1042,13 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, String[] omitHidden = null; - if (viewport.hasHiddenColumns) + 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", + MessageManager.getString("label.alignment_contains_hidden_columns"), + MessageManager.getString("action.save_omit_hidden_columns"), JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE); @@ -1009,9 +1059,10 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, } FormatAdapter f = new FormatAdapter(); String output = f.formatSequences(format, - (Alignment) viewport.alignment, // class cast exceptions will + viewport.getAlignment(), // class cast exceptions will // occur in the distant future - omitHidden, f.getCacheSuffixDefault(format), viewport.colSel); + omitHidden, f.getCacheSuffixDefault(format), + viewport.getColumnSelection()); if (output == null) { @@ -1027,8 +1078,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, out.print(output); out.close(); this.setTitle(file); - statusBar.setText("Successfully saved to file: " + fileName - + " in " + format + " format."); + statusBar.setText(MessageManager.formatMessage("label.successfully_saved_to_file_in_format",new String[]{fileName, format})); } catch (Exception ex) { success = false; @@ -1039,8 +1089,8 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, if (!success) { - JOptionPane.showInternalMessageDialog(this, "Couldn't save file: " - + fileName, "Error Saving File", JOptionPane.WARNING_MESSAGE); + JOptionPane.showInternalMessageDialog(this, MessageManager.formatMessage("label.couldnt_save_file", new String[]{fileName}), + MessageManager.getString("label.error_saving_file"), JOptionPane.WARNING_MESSAGE); } return success; @@ -1067,18 +1117,18 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * @param e * DOCUMENT ME! */ + @Override protected void outputText_actionPerformed(ActionEvent e) { String[] omitHidden = null; - if (viewport.hasHiddenColumns) + if (viewport.hasHiddenColumns()) { int reply = JOptionPane .showInternalConfirmDialog( Desktop.desktop, - "The Alignment contains hidden columns." - + "\nDo you want to output only the visible alignment?", - "Save / Omit Hidden Columns", + MessageManager.getString("label.alignment_contains_hidden_columns"), + MessageManager.getString("action.save_omit_hidden_columns"), JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE); @@ -1094,7 +1144,8 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, try { cap.setText(new FormatAdapter().formatSequences(e.getActionCommand(), - viewport.alignment, omitHidden, viewport.colSel)); + viewport.getAlignment(), omitHidden, + viewport.getColumnSelection())); Desktop.addInternalFrame(cap, "Alignment output - " + e.getActionCommand(), 600, 500); } catch (OutOfMemoryError oom) @@ -1111,6 +1162,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * @param e * DOCUMENT ME! */ + @Override protected void htmlMenuItem_actionPerformed(ActionEvent e) { new HTMLOutput(alignPanel, @@ -1129,6 +1181,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * @param e * DOCUMENT ME! */ + @Override public void createPNG(File f) { alignPanel.makePNG(f); @@ -1140,11 +1193,13 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * @param e * DOCUMENT ME! */ + @Override public void createEPS(File f) { alignPanel.makeEPS(f); } + @Override public void pageSetup_actionPerformed(ActionEvent e) { PrinterJob printJob = PrinterJob.getPrinterJob(); @@ -1157,6 +1212,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * @param e * DOCUMENT ME! */ + @Override public void printMenuItem_actionPerformed(ActionEvent e) { // Putting in a thread avoids Swing painting problems @@ -1164,21 +1220,23 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, thread.start(); } + @Override public void exportFeatures_actionPerformed(ActionEvent e) { new AnnotationExporter().exportFeatures(alignPanel); } + @Override public void exportAnnotations_actionPerformed(ActionEvent e) { - new AnnotationExporter().exportAnnotations( - alignPanel, - viewport.showAnnotation ? viewport.alignment - .getAlignmentAnnotation() : null, viewport.alignment - .getGroups(), - ((Alignment) viewport.alignment).alignmentProperties); + new AnnotationExporter().exportAnnotations(alignPanel, + viewport.showAnnotation ? viewport.getAlignment() + .getAlignmentAnnotation() : null, viewport + .getAlignment().getGroups(), ((Alignment) viewport + .getAlignment()).alignmentProperties); } + @Override public void associatedData_actionPerformed(ActionEvent e) { // Pick the tree file @@ -1205,6 +1263,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * * @param closeAllTabs */ + @Override public void closeMenuItem_actionPerformed(boolean closeAllTabs) { if (alignPanels != null && alignPanels.size() < 2) @@ -1285,12 +1344,12 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, { undoMenuItem.setEnabled(true); CommandI command = (CommandI) viewport.historyList.peek(); - undoMenuItem.setText("Undo " + command.getDescription()); + undoMenuItem.setText(MessageManager.formatMessage("label.undo_command", new String[]{command.getDescription()})); } else { undoMenuItem.setEnabled(false); - undoMenuItem.setText("Undo"); + undoMenuItem.setText(MessageManager.getString("action.undo")); } if (viewport.redoList.size() > 0) @@ -1298,12 +1357,12 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, redoMenuItem.setEnabled(true); CommandI command = (CommandI) viewport.redoList.peek(); - redoMenuItem.setText("Redo " + command.getDescription()); + redoMenuItem.setText(MessageManager.formatMessage("label.redo_command", new String[]{command.getDescription()})); } else { redoMenuItem.setEnabled(false); - redoMenuItem.setText("Redo"); + redoMenuItem.setText(MessageManager.getString("action.redo")); } } @@ -1314,9 +1373,11 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, viewport.historyList.push(command); viewport.redoList.clear(); updateEditMenuBar(); - viewport.hasHiddenColumns = (viewport.colSel != null - && viewport.colSel.getHiddenColumns() != null && viewport.colSel - .getHiddenColumns().size() > 0); + viewport.updateHiddenColumns(); + // viewport.hasHiddenColumns = (viewport.getColumnSelection() != null + // && viewport.getColumnSelection().getHiddenColumns() != null && + // viewport.getColumnSelection() + // .getHiddenColumns().size() > 0); } } @@ -1339,7 +1400,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, if (viewport != null) { return new AlignmentI[] - { viewport.alignment }; + { viewport.getAlignment() }; } return null; } @@ -1350,6 +1411,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * @param e * DOCUMENT ME! */ + @Override protected void undoMenuItem_actionPerformed(ActionEvent e) { if (viewport.historyList.empty()) @@ -1363,11 +1425,19 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, if (originalSource != null) { - originalSource.hasHiddenColumns = (viewport.colSel != null - && viewport.colSel.getHiddenColumns() != null && viewport.colSel - .getHiddenColumns().size() > 0); - originalSource.firePropertyChange("alignment", null, - originalSource.alignment.getSequences()); + if (originalSource != viewport) + { + Cache.log + .warn("Implementation worry: mismatch of viewport origin for undo"); + } + originalSource.updateHiddenColumns(); + // originalSource.hasHiddenColumns = (viewport.getColumnSelection() != + // null + // && viewport.getColumnSelection().getHiddenColumns() != null && + // viewport.getColumnSelection() + // .getHiddenColumns().size() > 0); + originalSource.firePropertyChange("alignment", null, originalSource + .getAlignment().getSequences()); } } @@ -1377,6 +1447,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * @param e * DOCUMENT ME! */ + @Override protected void redoMenuItem_actionPerformed(ActionEvent e) { if (viewport.redoList.size() < 1) @@ -1393,11 +1464,20 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, if (originalSource != null) { - originalSource.hasHiddenColumns = (viewport.colSel != null - && viewport.colSel.getHiddenColumns() != null && viewport.colSel - .getHiddenColumns().size() > 0); - originalSource.firePropertyChange("alignment", null, - originalSource.alignment.getSequences()); + + if (originalSource != viewport) + { + Cache.log + .warn("Implementation worry: mismatch of viewport origin for redo"); + } + originalSource.updateHiddenColumns(); + // originalSource.hasHiddenColumns = (viewport.getColumnSelection() != + // null + // && viewport.getColumnSelection().getHiddenColumns() != null && + // viewport.getColumnSelection() + // .getHiddenColumns().size() > 0); + originalSource.firePropertyChange("alignment", null, originalSource + .getAlignment().getSequences()); } } @@ -1419,7 +1499,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, { if (comps.elementAt(i) instanceof AlignmentPanel) { - if (al == ((AlignmentPanel) comps.elementAt(i)).av.alignment) + if (al == ((AlignmentPanel) comps.elementAt(i)).av.getAlignment()) { originalSource = ((AlignmentPanel) comps.elementAt(i)).av; break; @@ -1434,7 +1514,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, // the current view against the closed view first if (al != null) { - PaintRefresher.validateSequences(al, viewport.alignment); + PaintRefresher.validateSequences(al, viewport.getAlignment()); } originalSource = viewport; @@ -1457,69 +1537,25 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, { return; } - - if (up) - { - for (int i = 1; i < viewport.alignment.getHeight(); i++) - { - SequenceI seq = viewport.alignment.getSequenceAt(i); - - if (!sg.getSequences(null).contains(seq)) - { - continue; - } - - SequenceI temp = viewport.alignment.getSequenceAt(i - 1); - - if (sg.getSequences(null).contains(temp)) - { - continue; - } - - viewport.alignment.getSequences().setElementAt(temp, i); - viewport.alignment.getSequences().setElementAt(seq, i - 1); - } - } - else - { - for (int i = viewport.alignment.getHeight() - 2; i > -1; i--) - { - SequenceI seq = viewport.alignment.getSequenceAt(i); - - if (!sg.getSequences(null).contains(seq)) - { - continue; - } - - SequenceI temp = viewport.alignment.getSequenceAt(i + 1); - - if (sg.getSequences(null).contains(temp)) - { - continue; - } - - viewport.alignment.getSequences().setElementAt(temp, i); - viewport.alignment.getSequences().setElementAt(seq, i + 1); - } - } - + viewport.getAlignment().moveSelectedSequencesByOne(sg, + viewport.getHiddenRepSequences(), up); alignPanel.paintAlignment(true); } synchronized void slideSequences(boolean right, int size) { - Vector sg = new Vector(); + List sg = new Vector(); if (viewport.cursorMode) { - sg.addElement(viewport.alignment - .getSequenceAt(alignPanel.seqPanel.seqCanvas.cursorY)); + sg.add(viewport.getAlignment().getSequenceAt( + alignPanel.seqPanel.seqCanvas.cursorY)); } else if (viewport.getSelectionGroup() != null - && viewport.getSelectionGroup().getSize() != viewport.alignment - .getHeight()) + && viewport.getSelectionGroup().getSize() != viewport + .getAlignment().getHeight()) { sg = viewport.getSelectionGroup().getSequences( - viewport.hiddenRepSequences); + viewport.getHiddenRepSequences()); } if (sg.size() < 1) @@ -1529,15 +1565,13 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, Vector invertGroup = new Vector(); - for (int i = 0; i < viewport.alignment.getHeight(); i++) + for (int i = 0; i < viewport.getAlignment().getHeight(); i++) { - if (!sg.contains(viewport.alignment.getSequenceAt(i))) - invertGroup.add(viewport.alignment.getSequenceAt(i)); + if (!sg.contains(viewport.getAlignment().getSequenceAt(i))) + invertGroup.add(viewport.getAlignment().getSequenceAt(i)); } - SequenceI[] seqs1 = new SequenceI[sg.size()]; - for (int i = 0; i < sg.size(); i++) - seqs1[i] = (SequenceI) sg.elementAt(i); + SequenceI[] seqs1 = sg.toArray(new SequenceI[0]); SequenceI[] seqs2 = new SequenceI[invertGroup.size()]; for (int i = 0; i < invertGroup.size(); i++) @@ -1596,6 +1630,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * @param e * DOCUMENT ME! */ + @Override protected void copy_actionPerformed(ActionEvent e) { System.gc(); @@ -1608,7 +1643,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, SequenceI[] seqs = viewport.getSelectionAsNewSequence(); String[] omitHidden = null; - if (viewport.hasHiddenColumns) + if (viewport.hasHiddenColumns()) { omitHidden = viewport.getViewAsString(true); } @@ -1635,7 +1670,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, } Vector hiddenColumns = null; - if (viewport.hasHiddenColumns) + if (viewport.hasHiddenColumns()) { hiddenColumns = new Vector(); int hiddenOffset = viewport.getSelectionGroup().getStartRes(), hiddenCutoff = viewport @@ -1654,8 +1689,8 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, } Desktop.jalviewClipboard = new Object[] - { seqs, viewport.alignment.getDataset(), hiddenColumns }; - statusBar.setText("Copied " + seqs.length + " sequences to clipboard."); + { seqs, viewport.getAlignment().getDataset(), hiddenColumns }; + statusBar.setText(MessageManager.formatMessage("label.copied_sequences_to_clipboard", new String[]{Integer.valueOf(seqs.length).toString()})); } /** @@ -1664,6 +1699,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * @param e * DOCUMENT ME! */ + @Override protected void pasteNew_actionPerformed(ActionEvent e) { paste(true); @@ -1675,6 +1711,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * @param e * DOCUMENT ME! */ + @Override protected void pasteThis_actionPerformed(ActionEvent e) { paste(false); @@ -1743,6 +1780,8 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, } int alwidth = 0; + ArrayList newGraphGroups = new ArrayList(); + int fgroup = -1; if (newAlignment) { @@ -1810,6 +1849,17 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, { newDs.clear(); // tidy up } + if (alignment.getAlignmentAnnotation() != null) + { + for (AlignmentAnnotation alan : alignment + .getAlignmentAnnotation()) + { + if (alan.graphGroup > fgroup) + { + fgroup = alan.graphGroup; + } + } + } if (pastedal.getAlignmentAnnotation() != null) { // Add any annotation attached to alignment. @@ -1820,6 +1870,22 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, if (alann[i].sequenceRef == null && !alann[i].autoCalculated) { AlignmentAnnotation newann = new AlignmentAnnotation(alann[i]); + if (newann.graphGroup > -1) + { + if (newGraphGroups.size() <= newann.graphGroup + || newGraphGroups.get(newann.graphGroup) == null) + { + for (int q = newGraphGroups.size(); q <= newann.graphGroup; q++) + { + newGraphGroups.add(q, null); + } + newGraphGroups.set(newann.graphGroup, new Integer( + ++fgroup)); + } + newann.graphGroup = newGraphGroups.get(newann.graphGroup) + .intValue(); + } + newann.padAnnotation(alwidth); alignment.addAnnotation(newann); } @@ -1839,11 +1905,31 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, { if (sequences[i].getAnnotation() != null) { + AlignmentAnnotation newann; for (int a = 0; a < sequences[i].getAnnotation().length; a++) { annotationAdded = true; - sequences[i].getAnnotation()[a].adjustForAlignment(); - sequences[i].getAnnotation()[a].padAnnotation(alwidth); + newann = sequences[i].getAnnotation()[a]; + newann.adjustForAlignment(); + newann.padAnnotation(alwidth); + if (newann.graphGroup > -1) + { + if (newann.graphGroup > -1) + { + if (newGraphGroups.size() <= newann.graphGroup + || newGraphGroups.get(newann.graphGroup) == null) + { + for (int q = newGraphGroups.size(); q <= newann.graphGroup; q++) + { + newGraphGroups.add(q, null); + } + newGraphGroups.set(newann.graphGroup, new Integer( + ++fgroup)); + } + newann.graphGroup = newGraphGroups.get(newann.graphGroup) + .intValue(); + } + } alignment.addAnnotation(sequences[i].getAnnotation()[a]); // annotation // was // duplicated @@ -1883,6 +1969,9 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, newann.padAnnotation(avwidth); alview[avnum].addAnnotation(newann); // annotation was // duplicated earlier + // TODO JAL-1145 graphGroups are not updated for sequence + // annotation added to several views. This may cause + // strangeness alview[avnum].setAnnotationIndex(newann, a); } } @@ -1892,6 +1981,17 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, } viewport.firePropertyChange("alignment", null, alignment.getSequences()); + if (alignPanels != null) + { + for (AlignmentPanel ap : ((Vector) alignPanels)) + { + ap.validateAnnotationDimensions(false); + } + } + else + { + alignPanel.validateAnnotationDimensions(false); + } } else @@ -1955,6 +2055,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * @param e * DOCUMENT ME! */ + @Override protected void cut_actionPerformed(ActionEvent e) { copy_actionPerformed(null); @@ -1967,6 +2068,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * @param e * DOCUMENT ME! */ + @Override protected void delete_actionPerformed(ActionEvent evt) { @@ -1985,7 +2087,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, } // If the cut affects all sequences, remove highlighted columns - if (sg.getSize() == viewport.alignment.getHeight()) + if (sg.getSize() == viewport.getAlignment().getHeight()) { viewport.getColumnSelection().removeElements(sg.getStartRes(), sg.getEndRes() + 1); @@ -2002,11 +2104,11 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, */ addHistoryItem(new EditCommand("Cut Sequences", EditCommand.CUT, cut, sg.getStartRes(), sg.getEndRes() - sg.getStartRes() + 1, - viewport.alignment)); + viewport.getAlignment())); viewport.setSelectionGroup(null); viewport.sendSelection(); - viewport.alignment.deleteGroup(sg); + viewport.getAlignment().deleteGroup(sg); viewport.firePropertyChange("alignment", null, viewport.getAlignment() .getSequences()); @@ -2027,9 +2129,10 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * @param e * DOCUMENT ME! */ + @Override protected void deleteGroups_actionPerformed(ActionEvent e) { - viewport.alignment.deleteAllGroups(); + viewport.getAlignment().deleteAllGroups(); viewport.sequenceColours = null; viewport.setSelectionGroup(null); PaintRefresher.Refresh(this, viewport.getSequenceSetId()); @@ -2043,6 +2146,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * @param e * DOCUMENT ME! */ + @Override public void selectAllSequenceMenuItem_actionPerformed(ActionEvent e) { SequenceGroup sg = new SequenceGroup(); @@ -2052,7 +2156,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, sg.addSequence(viewport.getAlignment().getSequenceAt(i), false); } - sg.setEndRes(viewport.alignment.getWidth() - 1); + sg.setEndRes(viewport.getAlignment().getWidth() - 1); viewport.setSelectionGroup(sg); viewport.sendSelection(); alignPanel.paintAlignment(true); @@ -2065,6 +2169,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * @param e * DOCUMENT ME! */ + @Override public void deselectAllSequenceMenuItem_actionPerformed(ActionEvent e) { if (viewport.cursorMode) @@ -2088,6 +2193,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * @param e * DOCUMENT ME! */ + @Override public void invertSequenceMenuItem_actionPerformed(ActionEvent e) { SequenceGroup sg = viewport.getSelectionGroup(); @@ -2109,6 +2215,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, viewport.sendSelection(); } + @Override public void invertColSel_actionPerformed(ActionEvent e) { viewport.invertColumnSelection(); @@ -2122,6 +2229,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * @param e * DOCUMENT ME! */ + @Override public void remove2LeftMenuItem_actionPerformed(ActionEvent e) { trimAlignment(true); @@ -2133,6 +2241,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * @param e * DOCUMENT ME! */ + @Override public void remove2RightMenuItem_actionPerformed(ActionEvent e) { trimAlignment(false); @@ -2158,11 +2267,11 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, if (viewport.getSelectionGroup() != null) { seqs = viewport.getSelectionGroup().getSequencesAsArray( - viewport.hiddenRepSequences); + viewport.getHiddenRepSequences()); } else { - seqs = viewport.alignment.getSequencesArray(); + seqs = viewport.getAlignment().getSequencesArray(); } TrimRegionCommand trimRegion; @@ -2170,32 +2279,28 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, { trimRegion = new TrimRegionCommand("Remove Left", TrimRegionCommand.TRIM_LEFT, seqs, column, - viewport.alignment, viewport.colSel, - viewport.selectionGroup); + viewport.getAlignment(), viewport.getColumnSelection(), + viewport.getSelectionGroup()); viewport.setStartRes(0); } else { trimRegion = new TrimRegionCommand("Remove Right", TrimRegionCommand.TRIM_RIGHT, seqs, column, - viewport.alignment, viewport.colSel, - viewport.selectionGroup); + viewport.getAlignment(), viewport.getColumnSelection(), + viewport.getSelectionGroup()); } - statusBar.setText("Removed " + trimRegion.getSize() + " columns."); + statusBar.setText(MessageManager.formatMessage("label.removed_columns", new String[]{Integer.valueOf(trimRegion.getSize()).toString()})); addHistoryItem(trimRegion); - Vector groups = viewport.alignment.getGroups(); - - for (int i = 0; i < groups.size(); i++) + for (SequenceGroup sg : viewport.getAlignment().getGroups()) { - SequenceGroup sg = (SequenceGroup) groups.get(i); - if ((trimLeft && !sg.adjustForRemoveLeft(column)) || (!trimLeft && !sg.adjustForRemoveRight(column))) { - viewport.alignment.deleteGroup(sg); + viewport.getAlignment().deleteGroup(sg); } } @@ -2210,34 +2315,35 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * @param e * DOCUMENT ME! */ + @Override public void removeGappedColumnMenuItem_actionPerformed(ActionEvent e) { - int start = 0, end = viewport.alignment.getWidth() - 1; + int start = 0, end = viewport.getAlignment().getWidth() - 1; SequenceI[] seqs; if (viewport.getSelectionGroup() != null) { seqs = viewport.getSelectionGroup().getSequencesAsArray( - viewport.hiddenRepSequences); + viewport.getHiddenRepSequences()); start = viewport.getSelectionGroup().getStartRes(); end = viewport.getSelectionGroup().getEndRes(); } else { - seqs = viewport.alignment.getSequencesArray(); + seqs = viewport.getAlignment().getSequencesArray(); } RemoveGapColCommand removeGapCols = new RemoveGapColCommand( - "Remove Gapped Columns", seqs, start, end, viewport.alignment); + "Remove Gapped Columns", seqs, start, end, + viewport.getAlignment()); addHistoryItem(removeGapCols); - statusBar.setText("Removed " + removeGapCols.getSize() - + " empty columns."); + statusBar.setText(MessageManager.formatMessage("label.removed_empty_columns", new String[]{Integer.valueOf(removeGapCols.getSize()).toString()})); // This is to maintain viewport position on first residue // of first sequence - SequenceI seq = viewport.alignment.getSequenceAt(0); + SequenceI seq = viewport.getAlignment().getSequenceAt(0); int startRes = seq.findPosition(viewport.startRes); // ShiftList shifts; // viewport.getAlignment().removeGaps(shifts=new ShiftList()); @@ -2256,30 +2362,31 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * @param e * DOCUMENT ME! */ + @Override public void removeAllGapsMenuItem_actionPerformed(ActionEvent e) { - int start = 0, end = viewport.alignment.getWidth() - 1; + int start = 0, end = viewport.getAlignment().getWidth() - 1; SequenceI[] seqs; if (viewport.getSelectionGroup() != null) { seqs = viewport.getSelectionGroup().getSequencesAsArray( - viewport.hiddenRepSequences); + viewport.getHiddenRepSequences()); start = viewport.getSelectionGroup().getStartRes(); end = viewport.getSelectionGroup().getEndRes(); } else { - seqs = viewport.alignment.getSequencesArray(); + seqs = viewport.getAlignment().getSequencesArray(); } // This is to maintain viewport position on first residue // of first sequence - SequenceI seq = viewport.alignment.getSequenceAt(0); + SequenceI seq = viewport.getAlignment().getSequenceAt(0); int startRes = seq.findPosition(viewport.startRes); addHistoryItem(new RemoveGapsCommand("Remove Gaps", seqs, start, end, - viewport.alignment)); + viewport.getAlignment())); viewport.setStartRes(seq.findIndex(startRes) - 1); @@ -2294,9 +2401,10 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * @param e * DOCUMENT ME! */ + @Override public void padGapsMenuitem_actionPerformed(ActionEvent e) { - viewport.padGaps = padGapsMenuitem.isSelected(); + viewport.setPadGaps(padGapsMenuitem.isSelected()); viewport.firePropertyChange("alignment", null, viewport.getAlignment() .getSequences()); } @@ -2317,11 +2425,13 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * @param e * DOCUMENT ME! */ + @Override public void findMenuItem_actionPerformed(ActionEvent e) { new Finder(); } + @Override public void newView_actionPerformed(ActionEvent e) { newView(true); @@ -2364,13 +2474,13 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, if (!copyAnnotation) { // just remove all the current annotation except for the automatic stuff - newap.av.alignment.deleteAllGroups(); - for (AlignmentAnnotation alan : newap.av.alignment + newap.av.getAlignment().deleteAllGroups(); + for (AlignmentAnnotation alan : newap.av.getAlignment() .getAlignmentAnnotation()) { if (!alan.autoCalculated) { - newap.av.alignment.deleteAnnotation(alan); + newap.av.getAlignment().deleteAnnotation(alan); } ; } @@ -2432,11 +2542,13 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, return newap; } + @Override public void expandViews_actionPerformed(ActionEvent e) { Desktop.instance.explodeViews(this); } + @Override public void gatherViews_actionPerformed(ActionEvent e) { Desktop.instance.gatherViews(this); @@ -2448,6 +2560,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * @param e * DOCUMENT ME! */ + @Override public void font_actionPerformed(ActionEvent e) { new FontChooser(alignPanel); @@ -2459,6 +2572,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * @param e * DOCUMENT ME! */ + @Override protected void seqLimit_actionPerformed(ActionEvent e) { viewport.setShowJVSuffix(seqLimits.isSelected()); @@ -2468,12 +2582,14 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, alignPanel.paintAlignment(true); } + @Override public void idRightAlign_actionPerformed(ActionEvent e) { viewport.rightAlignIds = idRightAlign.isSelected(); alignPanel.paintAlignment(true); } + @Override public void centreColumnLabels_actionPerformed(ActionEvent e) { viewport.centreColumnLabels = centreColumnLabelsMenuItem.getState(); @@ -2485,6 +2601,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * * @see jalview.jbgui.GAlignFrame#followHighlight_actionPerformed() */ + @Override protected void followHighlight_actionPerformed() { if (viewport.followHighlight = this.followHighlightMenuItem.getState()) @@ -2500,6 +2617,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * @param e * DOCUMENT ME! */ + @Override protected void colourTextMenuItem_actionPerformed(ActionEvent e) { viewport.setColourText(colourTextMenuItem.isSelected()); @@ -2512,6 +2630,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * @param e * DOCUMENT ME! */ + @Override public void wrapMenuItem_actionPerformed(ActionEvent e) { scaleAbove.setVisible(wrapMenuItem.isSelected()); @@ -2521,17 +2640,20 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, alignPanel.setWrapAlignment(wrapMenuItem.isSelected()); } + @Override public void showAllSeqs_actionPerformed(ActionEvent e) { viewport.showAllHiddenSeqs(); } + @Override public void showAllColumns_actionPerformed(ActionEvent e) { viewport.showAllHiddenColumns(); repaint(); } + @Override public void hideSelSequences_actionPerformed(ActionEvent e) { viewport.hideAllSelectedSeqs(); @@ -2554,8 +2676,9 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, // 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) + if ((viewport.getColumnSelection() != null + && viewport.getColumnSelection().getSelected() != null && viewport + .getColumnSelection().getSelected().size() > 0) || (sg != null && sg.getSize() > 0 && sg.getStartRes() <= sg .getEndRes())) { @@ -2578,12 +2701,13 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, if (toggleSeqs) { - if (sg != null && sg.getSize() != viewport.alignment.getHeight()) + if (sg != null && sg.getSize() != viewport.getAlignment().getHeight()) { hideSelSequences_actionPerformed(null); hide = true; } - else if (!(toggleCols && viewport.colSel.getSelected().size() > 0)) + else if (!(toggleCols && viewport.getColumnSelection().getSelected() + .size() > 0)) { showAllSeqs_actionPerformed(null); } @@ -2591,12 +2715,12 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, if (toggleCols) { - if (viewport.colSel.getSelected().size() > 0) + if (viewport.getColumnSelection().getSelected().size() > 0) { hideSelColumns_actionPerformed(null); if (!toggleSeqs) { - viewport.selectionGroup = sg; + viewport.setSelectionGroup(sg); } } else if (!hide) @@ -2613,6 +2737,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * jalview.jbgui.GAlignFrame#hideAllButSelection_actionPerformed(java.awt. * event.ActionEvent) */ + @Override public void hideAllButSelection_actionPerformed(ActionEvent e) { toggleHiddenRegions(false, false); @@ -2625,6 +2750,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * jalview.jbgui.GAlignFrame#hideAllSelection_actionPerformed(java.awt.event * .ActionEvent) */ + @Override public void hideAllSelection_actionPerformed(ActionEvent e) { SequenceGroup sg = viewport.getSelectionGroup(); @@ -2641,6 +2767,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * jalview.jbgui.GAlignFrame#showAllhidden_actionPerformed(java.awt.event. * ActionEvent) */ + @Override public void showAllhidden_actionPerformed(ActionEvent e) { viewport.showAllHiddenColumns(); @@ -2648,12 +2775,14 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, alignPanel.paintAlignment(true); } + @Override public void hideSelColumns_actionPerformed(ActionEvent e) { viewport.hideSelectedColumns(); alignPanel.paintAlignment(true); } + @Override public void hiddenMarkers_actionPerformed(ActionEvent e) { viewport.setShowHiddenMarkers(hiddenMarkers.isSelected()); @@ -2666,6 +2795,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * @param e * DOCUMENT ME! */ + @Override protected void scaleAbove_actionPerformed(ActionEvent e) { viewport.setScaleAboveWrapped(scaleAbove.isSelected()); @@ -2678,6 +2808,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * @param e * DOCUMENT ME! */ + @Override protected void scaleLeft_actionPerformed(ActionEvent e) { viewport.setScaleLeftWrapped(scaleLeft.isSelected()); @@ -2690,6 +2821,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * @param e * DOCUMENT ME! */ + @Override protected void scaleRight_actionPerformed(ActionEvent e) { viewport.setScaleRightWrapped(scaleRight.isSelected()); @@ -2702,6 +2834,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * @param e * DOCUMENT ME! */ + @Override public void viewBoxesMenuItem_actionPerformed(ActionEvent e) { viewport.setShowBoxes(viewBoxesMenuItem.isSelected()); @@ -2714,6 +2847,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * @param e * DOCUMENT ME! */ + @Override public void viewTextMenuItem_actionPerformed(ActionEvent e) { viewport.setShowText(viewTextMenuItem.isSelected()); @@ -2726,6 +2860,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * @param e * DOCUMENT ME! */ + @Override protected void renderGapsMenuItem_actionPerformed(ActionEvent e) { viewport.setRenderGaps(renderGapsMenuItem.isSelected()); @@ -2734,6 +2869,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, public FeatureSettings featureSettings; + @Override public void featureSettings_actionPerformed(ActionEvent e) { if (featureSettings != null) @@ -2756,6 +2892,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * @param evt * DOCUMENT ME! */ + @Override public void showSeqFeatures_actionPerformed(ActionEvent evt) { viewport.setShowSequenceFeatures(showSeqFeatures.isSelected()); @@ -2772,6 +2909,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * @param evt * DOCUMENT ME! */ + @Override public void showSeqFeaturesHeight_actionPerformed(ActionEvent evt) { viewport.setShowSequenceFeaturesHeight(showSeqFeaturesHeight @@ -2795,19 +2933,21 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * @param e * DOCUMENT ME! */ + @Override public void annotationPanelMenuItem_actionPerformed(ActionEvent e) { viewport.setShowAnnotation(annotationPanelMenuItem.isSelected()); alignPanel.setAnnotationVisible(annotationPanelMenuItem.isSelected()); } + @Override public void alignmentProperties() { JEditorPane editPane = new JEditorPane("text/html", ""); editPane.setEditable(false); - StringBuffer contents = new AlignmentProperties(viewport.alignment) + StringBuffer contents = new AlignmentProperties(viewport.getAlignment()) .formatAsHtml(); - editPane.setText("" + contents.toString() + ""); + editPane.setText(MessageManager.formatMessage("label.html_content", new String[]{contents.toString()})); JInternalFrame frame = new JInternalFrame(); frame.getContentPane().add(new JScrollPane(editPane)); @@ -2821,6 +2961,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * @param e * DOCUMENT ME! */ + @Override public void overviewMenuItem_actionPerformed(ActionEvent e) { if (alignPanel.overviewPanel != null) @@ -2837,6 +2978,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, frame.setLayer(JLayeredPane.PALETTE_LAYER); frame.addInternalFrameListener(new javax.swing.event.InternalFrameAdapter() { + @Override public void internalFrameClosed( javax.swing.event.InternalFrameEvent evt) { @@ -2847,6 +2989,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, alignPanel.setOverviewPanel(overview); } + @Override public void textColour_actionPerformed(ActionEvent e) { new TextColourChooser().chooseColour(alignPanel, null); @@ -2858,6 +3001,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * @param e * DOCUMENT ME! */ + @Override protected void noColourmenuItem_actionPerformed(ActionEvent e) { changeColour(null); @@ -2869,11 +3013,11 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * @param e * DOCUMENT ME! */ + @Override public void clustalColour_actionPerformed(ActionEvent e) { - changeColour(new ClustalxColourScheme( - viewport.alignment.getSequences(), - viewport.alignment.getWidth())); + changeColour(new ClustalxColourScheme(viewport.getAlignment(), + viewport.getHiddenRepSequences())); } /** @@ -2882,6 +3026,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * @param e * DOCUMENT ME! */ + @Override public void zappoColour_actionPerformed(ActionEvent e) { changeColour(new ZappoColourScheme()); @@ -2893,6 +3038,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * @param e * DOCUMENT ME! */ + @Override public void taylorColour_actionPerformed(ActionEvent e) { changeColour(new TaylorColourScheme()); @@ -2904,6 +3050,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * @param e * DOCUMENT ME! */ + @Override public void hydrophobicityColour_actionPerformed(ActionEvent e) { changeColour(new HydrophobicColourScheme()); @@ -2915,6 +3062,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * @param e * DOCUMENT ME! */ + @Override public void helixColour_actionPerformed(ActionEvent e) { changeColour(new HelixColourScheme()); @@ -2926,6 +3074,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * @param e * DOCUMENT ME! */ + @Override public void strandColour_actionPerformed(ActionEvent e) { changeColour(new StrandColourScheme()); @@ -2937,6 +3086,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * @param e * DOCUMENT ME! */ + @Override public void turnColour_actionPerformed(ActionEvent e) { changeColour(new TurnColourScheme()); @@ -2948,6 +3098,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * @param e * DOCUMENT ME! */ + @Override public void buriedColour_actionPerformed(ActionEvent e) { changeColour(new BuriedColourScheme()); @@ -2959,22 +3110,43 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * @param e * DOCUMENT ME! */ + @Override public void nucleotideColour_actionPerformed(ActionEvent e) { changeColour(new NucleotideColourScheme()); } + @Override + public void purinePyrimidineColour_actionPerformed(ActionEvent e) + { + changeColour(new PurinePyrimidineColourScheme()); + } + + /* + * public void covariationColour_actionPerformed(ActionEvent e) { + * changeColour(new + * CovariationColourScheme(viewport.getAlignment().getAlignmentAnnotation + * ()[0])); } + */ + @Override public void annotationColour_actionPerformed(ActionEvent e) { new AnnotationColourChooser(viewport, alignPanel); } + @Override + public void rnahelicesColour_actionPerformed(ActionEvent e) + { + new RNAHelicesColourChooser(viewport, alignPanel); + } + /** * DOCUMENT ME! * * @param e * DOCUMENT ME! */ + @Override protected void applyToAllGroups_actionPerformed(ActionEvent e) { viewport.setColourAppliesToAllGroups(applyToAllGroups.isSelected()); @@ -2988,6 +3160,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, */ public void changeColour(ColourSchemeI cs) { + // TODO: compare with applet and pull up to model method int threshold = 0; if (cs != null) @@ -3009,13 +3182,13 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, if (viewport.getConservationSelected()) { - Alignment al = (Alignment) viewport.alignment; + Alignment al = (Alignment) viewport.getAlignment(); Conservation c = new Conservation("All", ResidueProperties.propHash, 3, al.getSequences(), 0, al.getWidth() - 1); c.calculate(); - c.verdict(false, viewport.ConsPercGaps); + c.verdict(false, viewport.getConsPercGaps()); cs.setConservation(c); @@ -3027,19 +3200,16 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, cs.setConservation(null); } - cs.setConsensus(viewport.hconsensus); + cs.setConsensus(viewport.getSequenceConsensusHash()); } viewport.setGlobalColourScheme(cs); if (viewport.getColourAppliesToAllGroups()) { - Vector groups = viewport.alignment.getGroups(); - for (int i = 0; i < groups.size(); i++) + for (SequenceGroup sg : viewport.getAlignment().getGroups()) { - SequenceGroup sg = (SequenceGroup) groups.elementAt(i); - if (cs == null) { sg.cs = null; @@ -3048,9 +3218,8 @@ 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, + viewport.getHiddenRepSequences()); } else if (cs instanceof UserColourScheme) { @@ -3060,7 +3229,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, { try { - sg.cs = (ColourSchemeI) cs.getClass().newInstance(); + sg.cs = cs.getClass().newInstance(); } catch (Exception ex) { } @@ -3073,7 +3242,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, sg.cs.setThreshold(threshold, viewport.getIgnoreGapsConsensus()); sg.cs.setConsensus(AAFrequency.calculate( - sg.getSequences(viewport.hiddenRepSequences), + sg.getSequences(viewport.getHiddenRepSequences()), sg.getStartRes(), sg.getEndRes() + 1)); } else @@ -3084,11 +3253,11 @@ 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 + .getHiddenRepSequences()), sg.getStartRes(), + sg.getEndRes() + 1); c.calculate(); - c.verdict(false, viewport.ConsPercGaps); + c.verdict(false, viewport.getConsPercGaps()); sg.cs.setConservation(c); } else @@ -3112,10 +3281,11 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * @param e * DOCUMENT ME! */ + @Override protected void modifyPID_actionPerformed(ActionEvent e) { if (viewport.getAbovePIDThreshold() - && viewport.globalColourScheme != null) + && viewport.getGlobalColourScheme() != null) { SliderPanel.setPIDSliderSource(alignPanel, viewport.getGlobalColourScheme(), "Background"); @@ -3129,13 +3299,14 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * @param e * DOCUMENT ME! */ + @Override protected void modifyConservation_actionPerformed(ActionEvent e) { if (viewport.getConservationSelected() - && viewport.globalColourScheme != null) + && viewport.getGlobalColourScheme() != null) { SliderPanel.setConservationSlider(alignPanel, - viewport.globalColourScheme, "Background"); + viewport.getGlobalColourScheme(), "Background"); SliderPanel.showConservationSlider(); } } @@ -3146,6 +3317,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * @param e * DOCUMENT ME! */ + @Override protected void conservationMenuItem_actionPerformed(ActionEvent e) { viewport.setConservationSelected(conservationMenuItem.isSelected()); @@ -3164,6 +3336,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * @param e * DOCUMENT ME! */ + @Override public void abovePIDThreshold_actionPerformed(ActionEvent e) { viewport.setAbovePIDThreshold(abovePIDThreshold.isSelected()); @@ -3182,6 +3355,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * @param e * DOCUMENT ME! */ + @Override public void userDefinedColour_actionPerformed(ActionEvent e) { if (e.getActionCommand().equals("User Defined...")) @@ -3223,6 +3397,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, radioItem.setName("USER_DEFINED"); radioItem.addMouseListener(new MouseAdapter() { + @Override public void mousePressed(MouseEvent evt) { if (evt.isControlDown() @@ -3232,8 +3407,8 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, int option = JOptionPane.showInternalConfirmDialog( jalview.gui.Desktop.desktop, - "Remove from default list?", - "Remove user defined colour", + MessageManager.getString("label.remove_from_default_list"), + MessageManager.getString("label.remove_user_defined_colour"), JOptionPane.YES_NO_OPTION); if (option == JOptionPane.YES_OPTION) { @@ -3245,6 +3420,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, { radioItem.addActionListener(new ActionListener() { + @Override public void actionPerformed(ActionEvent evt) { userDefinedColour_actionPerformed(evt); @@ -3256,6 +3432,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, }); radioItem.addActionListener(new ActionListener() { + @Override public void actionPerformed(ActionEvent evt) { userDefinedColour_actionPerformed(evt); @@ -3274,6 +3451,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * @param e * DOCUMENT ME! */ + @Override public void PIDColour_actionPerformed(ActionEvent e) { changeColour(new PIDColourScheme()); @@ -3285,6 +3463,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * @param e * DOCUMENT ME! */ + @Override public void BLOSUM62Colour_actionPerformed(ActionEvent e) { changeColour(new Blosum62ColourScheme()); @@ -3296,13 +3475,14 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * @param e * DOCUMENT ME! */ + @Override public void sortPairwiseMenuItem_actionPerformed(ActionEvent e) { SequenceI[] oldOrder = viewport.getAlignment().getSequencesArray(); AlignmentSorter.sortByPID(viewport.getAlignment(), viewport .getAlignment().getSequenceAt(0), null); addHistoryItem(new OrderCommand("Pairwise Sort", oldOrder, - viewport.alignment)); + viewport.getAlignment())); alignPanel.paintAlignment(true); } @@ -3312,11 +3492,13 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * @param e * DOCUMENT ME! */ + @Override public void sortIDMenuItem_actionPerformed(ActionEvent e) { SequenceI[] oldOrder = viewport.getAlignment().getSequencesArray(); AlignmentSorter.sortByID(viewport.getAlignment()); - addHistoryItem(new OrderCommand("ID Sort", oldOrder, viewport.alignment)); + addHistoryItem(new OrderCommand("ID Sort", oldOrder, + viewport.getAlignment())); alignPanel.paintAlignment(true); } @@ -3326,12 +3508,13 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * @param e * DOCUMENT ME! */ + @Override public void sortLengthMenuItem_actionPerformed(ActionEvent e) { SequenceI[] oldOrder = viewport.getAlignment().getSequencesArray(); AlignmentSorter.sortByLength(viewport.getAlignment()); addHistoryItem(new OrderCommand("Length Sort", oldOrder, - viewport.alignment)); + viewport.getAlignment())); alignPanel.paintAlignment(true); } @@ -3341,12 +3524,13 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * @param e * DOCUMENT ME! */ + @Override public void sortGroupMenuItem_actionPerformed(ActionEvent e) { SequenceI[] oldOrder = viewport.getAlignment().getSequencesArray(); AlignmentSorter.sortByGroup(viewport.getAlignment()); addHistoryItem(new OrderCommand("Group Sort", oldOrder, - viewport.alignment)); + viewport.getAlignment())); alignPanel.paintAlignment(true); } @@ -3357,6 +3541,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * @param e * DOCUMENT ME! */ + @Override public void removeRedundancyMenuItem_actionPerformed(ActionEvent e) { new RedundancyPanel(alignPanel, this); @@ -3368,13 +3553,14 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * @param e * DOCUMENT ME! */ + @Override public void pairwiseAlignmentMenuItem_actionPerformed(ActionEvent e) { if ((viewport.getSelectionGroup() == null) || (viewport.getSelectionGroup().getSize() < 2)) { JOptionPane.showInternalMessageDialog(this, - "You must select at least 2 sequences.", "Invalid Selection", + MessageManager.getString("label.you_must_select_least_two_sequences"), MessageManager.getString("label.invalid_selection"), JOptionPane.WARNING_MESSAGE); } else @@ -3391,6 +3577,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * @param e * DOCUMENT ME! */ + @Override public void PCAMenuItem_actionPerformed(ActionEvent e) { if (((viewport.getSelectionGroup() != null) @@ -3399,9 +3586,8 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, || (viewport.getAlignment().getHeight() < 4)) { JOptionPane.showInternalMessageDialog(this, - "Principal component analysis must take\n" - + "at least 4 input sequences.", - "Sequence selection insufficient", + MessageManager.getString("label.principal_component_analysis_must_take_least_four_input_sequences"), + MessageManager.getString("label.sequence_selection_insufficient"), JOptionPane.WARNING_MESSAGE); return; @@ -3410,6 +3596,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, new PCAPanel(alignPanel); } + @Override public void autoCalculate_actionPerformed(ActionEvent e) { viewport.autoCalculateConsensus = autoCalculate.isSelected(); @@ -3420,12 +3607,25 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, } } + @Override + public void sortByTreeOption_actionPerformed(ActionEvent e) + { + viewport.sortByTree = sortByTree.isSelected(); + } + + @Override + protected void listenToViewSelections_actionPerformed(ActionEvent e) + { + viewport.followSelection = listenToViewSelections.isSelected(); + } + /** * DOCUMENT ME! * * @param e * DOCUMENT ME! */ + @Override public void averageDistanceTreeMenuItem_actionPerformed(ActionEvent e) { NewTreePanel("AV", "PID", "Average distance tree using PID"); @@ -3437,6 +3637,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * @param e * DOCUMENT ME! */ + @Override public void neighbourTreeMenuItem_actionPerformed(ActionEvent e) { NewTreePanel("NJ", "PID", "Neighbour joining tree using PID"); @@ -3448,6 +3649,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * @param e * DOCUMENT ME! */ + @Override protected void njTreeBlosumMenuItem_actionPerformed(ActionEvent e) { NewTreePanel("NJ", "BL", "Neighbour joining tree using BLOSUM62"); @@ -3459,6 +3661,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * @param e * DOCUMENT ME! */ + @Override protected void avTreeBlosumMenuItem_actionPerformed(ActionEvent e) { NewTreePanel("AV", "BL", "Average distance tree using BLOSUM62"); @@ -3478,34 +3681,31 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, { TreePanel tp; - if (viewport.getSelectionGroup() != null) + if (viewport.getSelectionGroup() != null + && viewport.getSelectionGroup().getSize() > 0) { if (viewport.getSelectionGroup().getSize() < 3) { JOptionPane .showMessageDialog( Desktop.desktop, - "You need to have more than two sequences selected to build a tree!", - "Not enough sequences", JOptionPane.WARNING_MESSAGE); + MessageManager.getString("label.you_need_more_two_sequences_selected_build_tree"), + MessageManager.getString("label.not_enough_sequences"), JOptionPane.WARNING_MESSAGE); return; } - int s = 0; SequenceGroup sg = viewport.getSelectionGroup(); /* Decide if the selection is a column region */ - while (s < sg.getSize()) + for (SequenceI _s : sg.getSequences()) { - if (((SequenceI) sg.getSequences(null).elementAt(s++)).getLength() < sg - .getEndRes()) + if (_s.getLength() < sg.getEndRes()) { JOptionPane .showMessageDialog( Desktop.desktop, - "The selected region to create a tree may\nonly contain residues or gaps.\n" - + "Try using the Pad function in the edit menu,\n" - + "or one of the multiple sequence alignment web services.", - "Sequences in selection are not aligned", + MessageManager.getString("label.selected_region_to_tree_may_only_contain_residues_or_gaps"), + MessageManager.getString("label.sequences_selection_not_aligned"), JOptionPane.WARNING_MESSAGE); return; @@ -3518,21 +3718,19 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, else { // are the visible sequences aligned? - if (!viewport.alignment.isAligned(false)) + if (!viewport.getAlignment().isAligned(false)) { JOptionPane .showMessageDialog( Desktop.desktop, - "The sequences must be aligned before creating a tree.\n" - + "Try using the Pad function in the edit menu,\n" - + "or one of the multiple sequence alignment web services.", - "Sequences not aligned", + MessageManager.getString("label.sequences_must_be_aligned_before_creating_tree"), + MessageManager.getString("label.sequences_not_aligned"), JOptionPane.WARNING_MESSAGE); return; } - if (viewport.alignment.getHeight() < 2) + if (viewport.getAlignment().getHeight() < 2) { return; } @@ -3567,6 +3765,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, sort.add(item); item.addActionListener(new java.awt.event.ActionListener() { + @Override public void actionPerformed(ActionEvent e) { SequenceI[] oldOrder = viewport.getAlignment().getSequencesArray(); @@ -3575,8 +3774,8 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, // pointers AlignmentSorter.sortBy(viewport.getAlignment(), order); - addHistoryItem(new OrderCommand(order.getName(), oldOrder, - viewport.alignment)); + addHistoryItem(new OrderCommand(order.getName(), oldOrder, viewport + .getAlignment())); alignPanel.paintAlignment(true); } @@ -3599,13 +3798,14 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, sort.add(item); item.addActionListener(new java.awt.event.ActionListener() { + @Override public void actionPerformed(ActionEvent e) { SequenceI[] oldOrder = viewport.getAlignment().getSequencesArray(); AlignmentSorter.sortByAnnotationScore(scoreLabel, viewport.getAlignment());// ,viewport.getSelectionGroup()); addHistoryItem(new OrderCommand("Sort by " + scoreLabel, oldOrder, - viewport.alignment)); + viewport.getAlignment())); alignPanel.paintAlignment(true); } }); @@ -3623,23 +3823,23 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * rebuilding in subsequence calls. * */ + @Override public void buildSortByAnnotationScoresMenu() { - if (viewport.alignment.getAlignmentAnnotation() == null) + if (viewport.getAlignment().getAlignmentAnnotation() == null) { return; } - if (viewport.alignment.getAlignmentAnnotation().hashCode() != _annotationScoreVectorHash) + if (viewport.getAlignment().getAlignmentAnnotation().hashCode() != _annotationScoreVectorHash) { sortByAnnotScore.removeAll(); // almost certainly a quicker way to do this - but we keep it simple Hashtable scoreSorts = new Hashtable(); AlignmentAnnotation aann[]; - Enumeration sq = viewport.alignment.getSequences().elements(); - while (sq.hasMoreElements()) + for (SequenceI sqa : viewport.getAlignment().getSequences()) { - aann = ((SequenceI) sq.nextElement()).getAnnotation(); + aann = sqa.getAnnotation(); for (int i = 0; aann != null && i < aann.length; i++) { if (aann[i].hasScore() && aann[i].sequenceRef != null) @@ -3657,7 +3857,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, sortByAnnotScore.setVisible(scoreSorts.size() > 0); scoreSorts.clear(); - _annotationScoreVectorHash = viewport.alignment + _annotationScoreVectorHash = viewport.getAlignment() .getAlignmentAnnotation().hashCode(); } } @@ -3674,6 +3874,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * @param title * SortBy menu item title. */ + @Override public void buildTreeMenu() { sortByTreeMenu.removeAll(); @@ -3702,21 +3903,17 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, for (i = 0; i < treePanels.size(); i++) { - TreePanel tp = (TreePanel) treePanels.elementAt(i); + final TreePanel tp = (TreePanel) treePanels.elementAt(i); final JMenuItem item = new JMenuItem(tp.getTitle()); final NJTree tree = ((TreePanel) treePanels.elementAt(i)).getTree(); item.addActionListener(new java.awt.event.ActionListener() { + @Override public void actionPerformed(ActionEvent e) { - SequenceI[] oldOrder = viewport.getAlignment() - .getSequencesArray(); - AlignmentSorter.sortByTree(viewport.getAlignment(), tree); - - addHistoryItem(new OrderCommand("Tree Sort", oldOrder, - viewport.alignment)); + tp.sortByTree_actionPerformed(null); + addHistoryItem(tp.sortAlignmentIn(alignPanel)); - alignPanel.paintAlignment(true); } }); @@ -3731,7 +3928,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, if (undoname != null) { addHistoryItem(new OrderCommand(undoname, oldOrder, - viewport.alignment)); + viewport.getAlignment())); } alignPanel.paintAlignment(true); return true; @@ -3798,9 +3995,9 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, } // limit sequences - JBPNote in future - could spawn multiple prediction // jobs - // TODO: viewport.alignment.isAligned is a global state - the local + // TODO: viewport.getAlignment().isAligned is a global state - the local // selection may well be aligned - we preserve 2.0.8 behaviour for moment. - if (!viewport.alignment.isAligned(false)) + if (!viewport.getAlignment().isAligned(false)) { seqs.setSequences(new SeqCigar[] { seqs.getSequences()[0] }); @@ -3817,6 +4014,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * @param e * DOCUMENT ME! */ + @Override protected void LoadtreeMenuItem_actionPerformed(ActionEvent e) { // Pick the tree file @@ -3840,18 +4038,24 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, } catch (Exception ex) { JOptionPane.showMessageDialog(Desktop.desktop, ex.getMessage(), - "Problem reading tree file", JOptionPane.WARNING_MESSAGE); + MessageManager.getString("label.problem_reading_tree_file"), JOptionPane.WARNING_MESSAGE); ex.printStackTrace(); } if (fin != null && fin.hasWarningMessage()) { JOptionPane.showMessageDialog(Desktop.desktop, - fin.getWarningMessage(), "Possible problem with tree file", + fin.getWarningMessage(), MessageManager.getString("label.possible_problem_with_tree_file"), JOptionPane.WARNING_MESSAGE); } } } + @Override + protected void tcoffeeColorScheme_actionPerformed(ActionEvent e) + { + changeColour(new TCoffeeColourScheme(alignPanel.getAlignment())); + } + public TreePanel ShowNewickTree(NewickFile nf, String title) { return ShowNewickTree(nf, title, 600, 500, 4, 5); @@ -3942,6 +4146,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, buildingMenu = true; new Thread(new Runnable() { + @Override public void run() { try @@ -3958,19 +4163,28 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, // TODO: group services by location as well as function and/or // introduce // object broker mechanism. - final Vector wsmenu = new Vector(); + final Vector wsmenu = new Vector(); final IProgressIndicator af = me; - if (Cache.getDefault("SHOW_JWS1_SERVICES", true) - && Discoverer.services != null - && (Discoverer.services.size() > 0)) + final JMenu msawsmenu = new JMenu("Alignment"); + final JMenu secstrmenu = new JMenu( + "Secondary Structure Prediction"); + final JMenu seqsrchmenu = new JMenu("Sequence Database Search"); + final JMenu analymenu = new JMenu("Analysis"); + final JMenu dismenu = new JMenu("Protein Disorder"); + // JAL-940 - only show secondary structure prediction services from + // the legacy server + 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 msaws = null; // (Vector) Discoverer.services.get("MsaWS"); Vector secstrpr = (Vector) Discoverer.services .get("SecStrPred"); - Vector seqsrch = (Vector) Discoverer.services.get("SeqSearch"); + Vector seqsrch = null; // (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, @@ -3978,7 +4192,6 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, 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 @@ -3988,13 +4201,10 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, 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 @@ -4003,13 +4213,10 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, .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 @@ -4018,50 +4225,82 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, .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)); - } - } - } - } + // Add all submenus in the order they should appear on the web + // services menu + wsmenu.add(msawsmenu); + wsmenu.add(secstrmenu); + wsmenu.add(dismenu); + wsmenu.add(analymenu); + // final ArrayList submens=new ArrayList(); + // submens.add(msawsmenu); + // submens.add(secstrmenu); + // submens.add(dismenu); + // submens.add(analymenu); + + // No search services yet + // wsmenu.add(seqsrchmenu); javax.swing.SwingUtilities.invokeLater(new Runnable() { + @Override public void run() { try { - - resetWebServiceMenu(); - // finally, add the whole shebang onto the webservices menu + webService.removeAll(); + // first, add discovered services onto the webservices menu if (wsmenu.size() > 0) { for (int i = 0, j = wsmenu.size(); i < j; i++) { - webService.add((JMenu) wsmenu.get(i)); + webService.add(wsmenu.get(i)); } } else { - me.webService.add(me.webServiceNoServices); + webService.add(me.webServiceNoServices); + } + // TODO: move into separate menu builder class. + if (Cache.getDefault("SHOW_JWS2_SERVICES", true)) + { + Jws2Discoverer jws2servs = Jws2Discoverer.getDiscoverer(); + if (jws2servs != null) + { + if (jws2servs.hasServices()) + { + jws2servs.attachWSMenuEntry(webService, me); + } + if (jws2servs.isRunning()) + { + JMenuItem tm = new JMenuItem( + "Still discovering JABA Services"); + tm.setEnabled(false); + webService.add(tm); + } + } + } + + build_urlServiceMenu(me.webService); + build_fetchdbmenu(webService); + for (JMenu item : wsmenu) + { + if (item.getItemCount() == 0) + { + item.setEnabled(false); + } + else + { + item.setEnabled(true); + } } } catch (Exception e) { + Cache.log + .debug("Exception during web service menu building process.", + e); } ; } @@ -4078,29 +4317,12 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, } /** - * empty the web service menu and add any ad-hoc functions not dynamically - * discovered. - * - */ - private void resetWebServiceMenu() - { - webService.removeAll(); - 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); - } // TODO: remove this code when 2.7 is released // DEBUG - alignmentView /* @@ -4108,17 +4330,30 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * AlignFrame af = this; testAlView.addActionListener(new ActionListener() { * * @Override public void actionPerformed(ActionEvent e) { - * jalview.datamodel.AlignmentView.testSelectionViews(af.viewport.alignment, - * af.viewport.colSel, af.viewport.selectionGroup); } + * jalview.datamodel.AlignmentView + * .testSelectionViews(af.viewport.getAlignment(), + * af.viewport.getColumnSelection(), af.viewport.selectionGroup); } * * }); webService.add(testAlView); */ // TODO: refactor to RestClient discoverer and merge menu entries for // rest-style services with other types of analysis/calculation service // SHmmr test client - still being implemented. - jalview.ws.rest.RestClient.makeShmmrRestClient().attachWSMenuEntry( - webService, this); // DEBUG - alignmentView + + for (jalview.ws.rest.RestClient client : jalview.ws.rest.RestClient + .getRestClients()) + { + client.attachWSMenuEntry( + JvSwingUtils.findOrCreateMenu(webService, client.getAction()), + this); + } + + if (Cache.getDefault("SHOW_ENFIN_SERVICES", true)) + { + jalview.ws.EnfinEnvision2OneWay.getInstance().attachWSMenuEntry( + webService, this); + } } /* @@ -4188,6 +4423,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, xtype.addActionListener(new ActionListener() { + @Override public void actionPerformed(ActionEvent e) { // TODO: new thread for this call with vis-delay @@ -4221,13 +4457,14 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, Runnable foo = new Runnable() { + @Override public void run() { final long sttime = System.currentTimeMillis(); ths.setProgressBar("Searching for sequences from " + fsrc, sttime); try { - Alignment ds = ths.getViewport().alignment.getDataset(); // update + Alignment ds = ths.getViewport().getAlignment().getDataset(); // update // our local // dataset // reference @@ -4304,6 +4541,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, } } + @Override public void showProducts_actionPerformed(ActionEvent e) { // ///////////////////////////// @@ -4326,8 +4564,8 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, JOptionPane .showMessageDialog( Desktop.desktop, - "Please select at least three bases in at least one sequence in order to perform a cDNA translation.", - "Translation Failed", JOptionPane.WARNING_MESSAGE); + MessageManager.getString("label.select_at_least_three_bases_in_at_least_one_sequence_to_cDNA_translation"), + MessageManager.getString("label.translation_failed"), JOptionPane.WARNING_MESSAGE); } else { @@ -4337,6 +4575,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, } } + @Override public void showTranslation_actionPerformed(ActionEvent e) { // ///////////////////////////// @@ -4349,21 +4588,27 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, { al = jalview.analysis.Dna.CdnaTranslate(selection, seqstring, viewport.getViewAsVisibleContigs(true), viewport - .getGapCharacter(), viewport.alignment - .getAlignmentAnnotation(), viewport.alignment + .getGapCharacter(), viewport.getAlignment() + .getAlignmentAnnotation(), viewport.getAlignment() .getWidth(), viewport.getAlignment().getDataset()); } catch (Exception ex) { al = null; - jalview.bin.Cache.log.debug("Exception during translation.", ex); + jalview.bin.Cache.log.error("Exception during translation. Please report this !", ex); + JOptionPane + .showMessageDialog( + Desktop.desktop, + MessageManager.getString("label.error_when_translating_sequences_submit_bug_report"), + MessageManager.getString("label.implementation_error") + MessageManager.getString("translation_failed"), JOptionPane.ERROR_MESSAGE); + return; } if (al == null) { JOptionPane .showMessageDialog( Desktop.desktop, - "Please select at least three bases in at least one sequence in order to perform a cDNA translation.", - "Translation Failed", JOptionPane.WARNING_MESSAGE); + MessageManager.getString("label.select_at_least_three_bases_in_at_least_one_sequence_to_cDNA_translation"), + MessageManager.getString("label.translation_failed"), JOptionPane.WARNING_MESSAGE); } else { @@ -4387,11 +4632,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, jalview.bin.Cache.getDefault( - "RELAXEDSEQIDMATCHING", false)); + featuresFile = new FeaturesFile(file, type).parse(viewport + .getAlignment().getDataset(), alignPanel.seqPanel.seqCanvas + .getFeatureRenderer().featureColours, false, + jalview.bin.Cache.getDefault("RELAXEDSEQIDMATCHING", false)); } catch (Exception ex) { ex.printStackTrace(); @@ -4416,22 +4660,27 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, return featuresFile; } + @Override public void dragEnter(DropTargetDragEvent evt) { } + @Override public void dragExit(DropTargetEvent evt) { } + @Override public void dragOver(DropTargetDragEvent evt) { } + @Override public void dropActionChanged(DropTargetDragEvent evt) { } + @Override public void drop(DropTargetDropEvent evt) { Transferable t = evt.getTransferable(); @@ -4513,11 +4762,11 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, if (pdbfn.length() > 0) { // attempt to find a match in the alignment - SequenceI mtch = idm.findIdMatch(pdbfn); + SequenceI[] mtch = idm.findAllIdMatches(pdbfn); int l = 0, c = pdbfn.indexOf("."); while (mtch == null && c != -1) { - do + do { l = c; } while ((c = pdbfn.indexOf(".", l)) > l); @@ -4525,7 +4774,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, { pdbfn = pdbfn.substring(0, l); } - mtch = idm.findIdMatch(pdbfn); + mtch = idm.findAllIdMatches(pdbfn); } if (mtch != null) { @@ -4558,10 +4807,9 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, || JOptionPane .showConfirmDialog( this, - "Do you want to automatically associate the " - + filesmatched.size() - + " PDB files with sequences in the alignment that have the same name ?", - "Automatically Associate PDB files by name", + MessageManager.formatMessage("label.automatically_associate_pdb_files_with_sequences_same_name", + new String[]{Integer.valueOf(filesmatched.size()).toString()}), + MessageManager.getString("label.automatically_associate_pdb_files_by_name"), JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION) { @@ -4570,16 +4818,18 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, // try and associate // TODO: may want to set a standard ID naming formalism for // associating PDB files which have no IDs. - PDBEntry pe = new AssociatePdbFileWithSeq() - .associatePdbWithSeq((String) fm[0], (String) fm[1], - (SequenceI) fm[2], false); - if (pe != null) + for (SequenceI toassoc : (SequenceI[]) fm[2]) { - System.err - .println("Associated file : " + ((String) fm[0]) - + " with " - + ((SequenceI) fm[2]).getDisplayId(true)); - assocfiles++; + PDBEntry pe = new AssociatePdbFileWithSeq() + .associatePdbWithSeq((String) fm[0], + (String) fm[1], toassoc, false); + if (pe != null) + { + System.err.println("Associated file : " + + ((String) fm[0]) + " with " + + toassoc.getDisplayId(true)); + assocfiles++; + } } alignPanel.paintAlignment(true); } @@ -4592,10 +4842,8 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, "AUTOASSOCIATE_PDBANDSEQS_IGNOREOTHERS", false) || JOptionPane .showConfirmDialog( this, - "Do you want to ignore the " - + filesnotmatched.size() - + " files whose names did not match any sequence IDs ?", - "Ignore unmatched dropped files ?", + MessageManager.formatMessage("label.ignore_unmatched_dropped_files_info", new String[]{Integer.valueOf(filesnotmatched.size()).toString()}), + MessageManager.getString("label.ignore_unmatched_dropped_files"), JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION)) { return; @@ -4636,59 +4884,102 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, // try to parse as annotation. boolean isAnnotation = (format == null || format .equalsIgnoreCase("PFAM")) ? new AnnotationFile() - .readAnnotationFile(viewport.alignment, file, protocol) + .readAnnotationFile(viewport.getAlignment(), file, protocol) : false; if (!isAnnotation) { - // try to see if its a JNet 'concise' style annotation file *before* we - // try to parse it as a features file - if (format == null) + // first see if its a T-COFFEE score file + TCoffeeScoreFile tcf = null; + try { - format = new IdentifyFile().Identify(file, protocol); - } - if (format.equalsIgnoreCase("JnetFile")) + tcf = new TCoffeeScoreFile(file, protocol); + if (tcf.isValid()) + { + if (tcf.annotateAlignment(viewport.getAlignment(), true)) + { + tcoffeeColour.setEnabled(true); + tcoffeeColour.setSelected(true); + changeColour(new TCoffeeColourScheme(viewport.getAlignment())); + isAnnotation = true; + statusBar.setText(MessageManager.getString("label.successfully_pasted_tcoffee_scores_to_alignment")); + } + else + { + // some problem - if no warning its probable that the ID matching + // process didn't work + JOptionPane + .showMessageDialog( + Desktop.desktop, + tcf.getWarningMessage() == null ? MessageManager.getString("label.check_file_matches_sequence_ids_alignment") + : tcf.getWarningMessage(), + MessageManager.getString("label.problem_reading_tcoffee_score_file"), + JOptionPane.WARNING_MESSAGE); + } + } + else + { + tcf = null; + } + } catch (Exception x) { - jalview.io.JPredFile predictions = new jalview.io.JPredFile(file, - protocol); - new JnetAnnotationMaker().add_annotation(predictions, - viewport.getAlignment(), 0, false); - isAnnotation = true; + Cache.log + .debug("Exception when processing data source as T-COFFEE score file", + x); + tcf = null; } - else + if (tcf == null) { - /* - * if (format.equalsIgnoreCase("PDB")) { - * - * String pdbfn = ""; // try to match up filename with sequence id try - * { if (protocol == jalview.io.FormatAdapter.FILE) { File fl = new - * File(file); pdbfn = fl.getName(); } else if (protocol == - * jalview.io.FormatAdapter.URL) { URL url = new URL(file); pdbfn = - * url.getFile(); } } catch (Exception e) { } ; if (assocSeq == null) - * { SequenceIdMatcher idm = new SequenceIdMatcher(viewport - * .getAlignment().getSequencesArray()); if (pdbfn.length() > 0) { // - * attempt to find a match in the alignment SequenceI mtch = - * idm.findIdMatch(pdbfn); int l = 0, c = pdbfn.indexOf("."); while - * (mtch == null && c != -1) { while ((c = pdbfn.indexOf(".", l)) > l) - * { l = c; } if (l > -1) { pdbfn = pdbfn.substring(0, l); } mtch = - * idm.findIdMatch(pdbfn); } if (mtch != null) { // try and associate - * // prompt ? PDBEntry pe = new AssociatePdbFileWithSeq() - * .associatePdbWithSeq(file, protocol, mtch, true); if (pe != null) { - * System.err.println("Associated file : " + file + " with " + - * mtch.getDisplayId(true)); alignPanel.paintAlignment(true); } } // - * TODO: maybe need to load as normal otherwise return; } } - */ + // try to see if its a JNet 'concise' style annotation file *before* + // we // try to parse it as a features file - boolean isGroupsFile = parseFeaturesFile(file, protocol); - // if it wasn't a features file then we just treat it as a general - // alignment file to load into the current view. - if (!isGroupsFile) + if (format == null) { - new FileLoader().LoadFile(viewport, file, protocol, format); + format = new IdentifyFile().Identify(file, protocol); + } + if (format.equalsIgnoreCase("JnetFile")) + { + jalview.io.JPredFile predictions = new jalview.io.JPredFile( + file, protocol); + new JnetAnnotationMaker().add_annotation(predictions, + viewport.getAlignment(), 0, false); + isAnnotation = true; } else { - alignPanel.paintAlignment(true); + /* + * if (format.equalsIgnoreCase("PDB")) { + * + * String pdbfn = ""; // try to match up filename with sequence id + * try { if (protocol == jalview.io.FormatAdapter.FILE) { File fl = + * new File(file); pdbfn = fl.getName(); } else if (protocol == + * jalview.io.FormatAdapter.URL) { URL url = new URL(file); pdbfn = + * url.getFile(); } } catch (Exception e) { } ; if (assocSeq == + * null) { SequenceIdMatcher idm = new SequenceIdMatcher(viewport + * .getAlignment().getSequencesArray()); if (pdbfn.length() > 0) { + * // attempt to find a match in the alignment SequenceI mtch = + * idm.findIdMatch(pdbfn); int l = 0, c = pdbfn.indexOf("."); while + * (mtch == null && c != -1) { while ((c = pdbfn.indexOf(".", l)) > + * l) { l = c; } if (l > -1) { pdbfn = pdbfn.substring(0, l); } mtch + * = idm.findIdMatch(pdbfn); } if (mtch != null) { // try and + * associate // prompt ? PDBEntry pe = new AssociatePdbFileWithSeq() + * .associatePdbWithSeq(file, protocol, mtch, true); if (pe != null) + * { System.err.println("Associated file : " + file + " with " + + * mtch.getDisplayId(true)); alignPanel.paintAlignment(true); } } // + * TODO: maybe need to load as normal otherwise return; } } + */ + // try to parse it as a features file + boolean isGroupsFile = parseFeaturesFile(file, protocol); + // if it wasn't a features file then we just treat it as a general + // alignment file to load into the current view. + if (!isGroupsFile) + { + new FileLoader().LoadFile(viewport, file, protocol, format); + } + else + { + alignPanel.paintAlignment(true); + } } } } @@ -4703,9 +4994,26 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, } catch (Exception ex) { ex.printStackTrace(); + } catch (OutOfMemoryError oom) + { + try + { + System.gc(); + } catch (Exception x) + { + } + ; + new OOMWarning( + "loading data " + + (protocol != null ? (protocol.equals(FormatAdapter.PASTE) ? "from clipboard." + : "using " + protocol + " from " + file) + : ".") + + (format != null ? "(parsing as '" + format + + "' file)" : ""), oom, Desktop.desktop); } } + @Override public void tabSelectionChanged(int index) { if (index > -1) @@ -4716,12 +5024,13 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, } } + @Override public void tabbedPane_mousePressed(MouseEvent e) { if (SwingUtilities.isRightMouseButton(e)) { String reply = JOptionPane.showInternalInputDialog(this, - "Enter View Name", "Edit View Name", + MessageManager.getString("label.enter_view_name"), MessageManager.getString("label.enter_view_name, JOptionPane.QUESTION_MESSAGE); if (reply != null) @@ -4740,10 +5049,11 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, /** * Open the dialog for regex description parsing. */ + @Override protected void extractScores_actionPerformed(ActionEvent e) { ParseProperties pp = new jalview.analysis.ParseProperties( - viewport.alignment); + viewport.getAlignment()); // TODO: verify regex and introduce GUI dialog for version 2.5 // if (pp.getScoresFromDescription("col", "score column ", // "\\W*([-+]?\\d*\\.?\\d*e?-?\\d*)\\W+([-+]?\\d*\\.?\\d*e?-?\\d*)", @@ -4762,6 +5072,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * jalview.jbgui.GAlignFrame#showDbRefs_actionPerformed(java.awt.event.ActionEvent * ) */ + @Override protected void showDbRefs_actionPerformed(ActionEvent e) { viewport.setShowDbRefs(showDbRefsMenuitem.isSelected()); @@ -4773,6 +5084,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * @seejalview.jbgui.GAlignFrame#showNpFeats_actionPerformed(java.awt.event. * ActionEvent) */ + @Override protected void showNpFeats_actionPerformed(ActionEvent e) { viewport.setShowNpFeats(showNpFeatsMenuitem.isSelected()); @@ -4822,11 +5134,13 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, fetchr.addActionListener(new ActionListener() { + @Override public void actionPerformed(ActionEvent e) { new Thread(new Runnable() { + @Override public void run() { new jalview.ws.DBRefFetcher(alignPanel.av @@ -4842,43 +5156,61 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, final AlignFrame me = this; new Thread(new Runnable() { + @Override 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() { + @Override public void run() { - + String[] dbclasses = sf.getOrderedSupportedSources(); + // sf.getDbInstances(jalview.ws.dbsources.DasSequenceSource.class); + // jalview.util.QuickSort.sort(otherdb, otherdb); + List otherdb; JMenu dfetch = new JMenu(); - JMenuItem fetchr; - rfetch.add(dfetch); - int comp = 0, mcomp = 15; + JMenu ifetch = new JMenu(); + JMenuItem fetchr = null; + int comp = 0, icomp = 0, mcomp = 15; String mname = null; - if (otherdb != null && otherdb.length > 0) + int dbi = 0; + for (String dbclass : dbclasses) { - for (int i = 0; i < otherdb.length; i++) + otherdb = sf.getSourceProxy(dbclass); + // add a single entry for this class, or submenu allowing 'fetch + // all' or pick one + if (otherdb == null || otherdb.size() < 1) { - 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] }; + continue; + } + // List dbs=otherdb; + // otherdb=new ArrayList(); + // for (DbSourceProxy db:dbs) + // { + // if (!db.isA(DBRefSource.ALIGNMENTDB) + // } + if (mname == null) + { + mname = "From " + dbclass; + } + if (otherdb.size() == 1) + { + final DbSourceProxy[] dassource = otherdb + .toArray(new DbSourceProxy[0]); + DbSourceProxy src = otherdb.get(0); + fetchr = new JMenuItem(src.getDbSource()); fetchr.addActionListener(new ActionListener() { + @Override public void actionPerformed(ActionEvent e) { new Thread(new Runnable() { + @Override public void run() { new jalview.ws.DBRefFetcher(alignPanel.av @@ -4890,17 +5222,112 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, } }); - fetchr.setToolTipText("Retrieve from " + dbname); + fetchr.setToolTipText("" + + JvSwingUtils.wrapTooltip("Retrieve from " + + src.getDbName()) + ""); dfetch.add(fetchr); - if (comp++ == mcomp || i == (otherdb.length - 1)) + comp++; + } + else + { + final DbSourceProxy[] dassource = otherdb + .toArray(new DbSourceProxy[0]); + // fetch all entry + DbSourceProxy src = otherdb.get(0); + fetchr = new JMenuItem("Fetch All '" + src.getDbSource() + + "'"); + fetchr.addActionListener(new ActionListener() { - dfetch.setText(mname + " to '" + dbname + "'"); - rfetch.add(dfetch); - dfetch = new JMenu(); - mname = null; - comp = 0; + @Override + public void actionPerformed(ActionEvent e) + { + new Thread(new Runnable() + { + + @Override + public void run() + { + new jalview.ws.DBRefFetcher(alignPanel.av + .getSequenceSelection(), + alignPanel.alignFrame, dassource) + .fetchDBRefs(false); + } + }).start(); + } + }); + + fetchr.setToolTipText("" + + JvSwingUtils.wrapTooltip("Retrieve from all " + + otherdb.size() + " sources in " + + src.getDbSource() + "
First is :" + + src.getDbName()) + ""); + dfetch.add(fetchr); + comp++; + // and then build the rest of the individual menus + ifetch = new JMenu("Sources from " + src.getDbSource()); + icomp = 0; + String imname = null; + int i = 0; + for (DbSourceProxy sproxy : otherdb) + { + String dbname = sproxy.getDbName(); + String sname = dbname.length() > 5 ? dbname.substring(0, + 5) + "..." : dbname; + String msname = dbname.length() > 10 ? dbname.substring( + 0, 10) + "..." : dbname; + if (imname == null) + { + imname = "from '" + sname + "'"; + } + fetchr = new JMenuItem(msname); + final DbSourceProxy[] dassrc = + { sproxy }; + fetchr.addActionListener(new ActionListener() + { + + @Override + public void actionPerformed(ActionEvent e) + { + new Thread(new Runnable() + { + + @Override + public void run() + { + new jalview.ws.DBRefFetcher(alignPanel.av + .getSequenceSelection(), + alignPanel.alignFrame, dassrc) + .fetchDBRefs(false); + } + }).start(); + } + + }); + fetchr.setToolTipText("" + + JvSwingUtils.wrapTooltip("Retrieve from " + + dbname) + ""); + ifetch.add(fetchr); + ++i; + if (++icomp >= mcomp || i == (otherdb.size())) + { + ifetch.setText(MessageManager.formatMessage("label.source_to_target",new String[]{imname,sname})); + dfetch.add(ifetch); + ifetch = new JMenu(); + imname = null; + icomp = 0; + comp++; + } } } + ++dbi; + if (comp >= mcomp || dbi >= (dbclasses.length)) + { + dfetch.setText(MessageManager.formatMessage("label.source_to_target",new String[]{mname,dbclass})); + rfetch.add(dfetch); + dfetch = new JMenu(); + mname = null; + comp = 0; + } } } }); @@ -4912,6 +5339,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, /** * Left justify the whole alignment. */ + @Override protected void justifyLeftMenuItem_actionPerformed(ActionEvent e) { AlignmentI al = viewport.getAlignment(); @@ -4922,6 +5350,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, /** * Right justify the whole alignment. */ + @Override protected void justifyRightMenuItem_actionPerformed(ActionEvent e) { AlignmentI al = viewport.getAlignment(); @@ -4942,6 +5371,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * jalview.jbgui.GAlignFrame#showUnconservedMenuItem_actionPerformed(java. * awt.event.ActionEvent) */ + @Override protected void showUnconservedMenuItem_actionPerformed(ActionEvent e) { viewport.setShowUnconserved(showNonconservedMenuItem.getState()); @@ -4955,6 +5385,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * jalview.jbgui.GAlignFrame#showGroupConsensus_actionPerformed(java.awt.event * .ActionEvent) */ + @Override protected void showGroupConsensus_actionPerformed(ActionEvent e) { viewport.setShowGroupConsensus(showGroupConsensus.getState()); @@ -4969,6 +5400,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * jalview.jbgui.GAlignFrame#showGroupConservation_actionPerformed(java.awt * .event.ActionEvent) */ + @Override protected void showGroupConservation_actionPerformed(ActionEvent e) { viewport.setShowGroupConservation(showGroupConservation.getState()); @@ -4982,6 +5414,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * jalview.jbgui.GAlignFrame#showConsensusHistogram_actionPerformed(java.awt * .event.ActionEvent) */ + @Override protected void showConsensusHistogram_actionPerformed(ActionEvent e) { viewport.setShowConsensusHistogram(showConsensusHistogram.getState()); @@ -4995,12 +5428,23 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * jalview.jbgui.GAlignFrame#showConsensusProfile_actionPerformed(java.awt * .event.ActionEvent) */ + @Override protected void showSequenceLogo_actionPerformed(ActionEvent e) { viewport.setShowSequenceLogo(showSequenceLogo.getState()); alignPanel.updateAnnotation(applyAutoAnnotationSettings.getState()); } + @Override + protected void normaliseSequenceLogo_actionPerformed(ActionEvent e) + { + showSequenceLogo.setState(true); + viewport.setShowSequenceLogo(true); + viewport.setNormaliseSequenceLogo(normaliseSequenceLogo.getState()); + alignPanel.updateAnnotation(applyAutoAnnotationSettings.getState()); + } + + @Override protected void applyAutoAnnotationSettings_actionPerformed(ActionEvent e) { alignPanel.updateAnnotation(applyAutoAnnotationSettings.getState()); @@ -5013,6 +5457,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * jalview.jbgui.GAlignFrame#makeGrpsFromSelection_actionPerformed(java.awt * .event.ActionEvent) */ + @Override protected void makeGrpsFromSelection_actionPerformed(ActionEvent e) { if (viewport.getSelectionGroup() != null) @@ -5020,9 +5465,9 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, SequenceGroup[] gps = jalview.analysis.Grouping.makeGroupsFrom( viewport.getSequenceSelection(), viewport.getAlignmentView(true).getSequenceStrings( - viewport.getGapCharacter()), - viewport.alignment.getGroups()); - viewport.alignment.deleteAllGroups(); + viewport.getGapCharacter()), viewport.getAlignment() + .getGroups()); + viewport.getAlignment().deleteAllGroups(); viewport.sequenceColours = null; viewport.setSelectionGroup(null); // set view properties for each group @@ -5030,14 +5475,12 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, { gps[g].setShowNonconserved(viewport.getShowUnconserved()); gps[g].setshowSequenceLogo(viewport.isShowSequenceLogo()); - viewport.alignment.addGroup(gps[g]); + viewport.getAlignment().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)) - ; + for (SequenceI s : gps[g].getSequences()) + viewport.setSequenceColour(s, col); } PaintRefresher.Refresh(this, viewport.getSequenceSetId()); alignPanel.updateAnnotation(); @@ -5059,7 +5502,8 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, "Implementation error: cannot show a view from another alignment in an AlignFrame."); } if (tabbedPane != null - & alignPanels.indexOf(alignmentPanel) != tabbedPane.getSelectedIndex()) + & alignPanels.indexOf(alignmentPanel) != tabbedPane + .getSelectedIndex()) { tabbedPane.setSelectedIndex(alignPanels.indexOf(alignmentPanel)); } @@ -5077,6 +5521,7 @@ class PrintThread extends Thread static PageFormat pf; + @Override public void run() { PrinterJob printJob = PrinterJob.getPrinterJob();