X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FAlignFrame.java;h=41685169e7ce5a0e028ea3dc0cf4720e74d15324;hb=27c019af21a3eddef893d67fcf27c70f33720a06;hp=fd6fe245bff3992ddce8fa8632ba18ec385ce6f9;hpb=d5ad9ef13d6f9d542e89d97b82cbd86b11ed7bae;p=jalview.git diff --git a/src/jalview/gui/AlignFrame.java b/src/jalview/gui/AlignFrame.java index fd6fe24..4168516 100644 --- a/src/jalview/gui/AlignFrame.java +++ b/src/jalview/gui/AlignFrame.java @@ -1,25 +1,28 @@ /* - * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8.0b1) + * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8.2) * Copyright (C) 2014 The Jalview Authors * * 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. + * 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 * PURPOSE. See the GNU General Public License for more details. * - * You should have received a copy of the GNU General Public License along with Jalview. If not, see . + * You should have received a copy of the GNU General Public License + * along with Jalview. If not, see . * The Jalview Authors are detailed in the 'AUTHORS' file. */ package jalview.gui; import jalview.analysis.AAFrequency; import jalview.analysis.AlignmentSorter; +import jalview.analysis.AlignmentUtils; import jalview.analysis.Conservation; import jalview.analysis.CrossRef; import jalview.analysis.NJTree; @@ -73,7 +76,6 @@ import jalview.schemes.PIDColourScheme; import jalview.schemes.PurinePyrimidineColourScheme; import jalview.schemes.RNAHelicesColourChooser; import jalview.schemes.ResidueProperties; -import jalview.schemes.ScoreMatrix; import jalview.schemes.StrandColourScheme; import jalview.schemes.TCoffeeColourScheme; import jalview.schemes.TaylorColourScheme; @@ -87,7 +89,6 @@ import jalview.ws.jws2.jabaws2.Jws2Instance; import jalview.ws.seqfetcher.DbSourceProxy; import java.awt.BorderLayout; -import java.awt.Color; import java.awt.Component; import java.awt.GridLayout; import java.awt.Rectangle; @@ -119,6 +120,7 @@ import java.util.List; import java.util.Vector; import javax.swing.JButton; +import javax.swing.JCheckBoxMenuItem; import javax.swing.JEditorPane; import javax.swing.JInternalFrame; import javax.swing.JLabel; @@ -151,9 +153,8 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, public AlignmentPanel alignPanel; AlignViewport viewport; - + public AlignViewControllerI avc; - Vector alignPanels = new Vector(); @@ -262,15 +263,17 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, int width, int height, String sequenceSetId, String viewId) { setSize(width, height); - viewport = new AlignViewport(al, hiddenColumns, sequenceSetId, viewId); - - alignPanel = new AlignmentPanel(this, viewport); if (al.getDataset() == null) { al.setDataset(null); } + viewport = new AlignViewport(al, hiddenColumns, sequenceSetId, viewId); + + alignPanel = new AlignmentPanel(this, viewport); + + addAlignmentPanel(alignPanel, true); init(); } @@ -297,7 +300,8 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, */ void init() { - avc = new jalview.controller.AlignViewController(this, viewport, alignPanel); + avc = new jalview.controller.AlignViewController(this, viewport, + alignPanel); if (viewport.getAlignmentConservationAnnotation() == null) { BLOSUM62Colour.setEnabled(false); @@ -330,6 +334,8 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, setMenusFromViewport(viewport); buildSortByAnnotationScoresMenu(); buildTreeMenu(); + buildShowHideAnnotationMenus(); + if (viewport.wrapAlignment) { wrapMenuItem_actionPerformed(null); @@ -341,7 +347,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, } addKeyListener(); - + } /** @@ -487,7 +493,9 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, case KeyEvent.VK_F2: viewport.cursorMode = !viewport.cursorMode; - statusBar.setText(MessageManager.formatMessage("label.keyboard_editing_mode", new String[]{(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; @@ -568,7 +576,8 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, public void addAlignmentPanel(final AlignmentPanel ap, boolean newPanel) { ap.alignFrame = this; - avc = new jalview.controller.AlignViewController(this, viewport, alignPanel); + avc = new jalview.controller.AlignViewController(this, viewport, + alignPanel); alignPanels.addElement(ap); @@ -819,7 +828,8 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, final JPanel progressPanel = (JPanel) progressBars.get(new Long(id)); if (handler.canCancel()) { - JButton cancel = new JButton(MessageManager.getString("action.cancel")); + JButton cancel = new JButton( + MessageManager.getString("action.cancel")); final IProgressIndicator us = this; cancel.addActionListener(new ActionListener() { @@ -853,9 +863,11 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, } @Override - public void setStatus(String text) { + public void setStatus(String text) + { statusBar.setText(text); }; + /* * Added so Castor Mapping file can obtain Jalview Version */ @@ -993,7 +1005,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, chooser.setFileView(new JalviewFileView()); chooser.setDialogTitle("Save Alignment to file"); - chooser.setToolTipText(MessageManager.getString("action.save")); + chooser.setToolTipText(MessageManager.getString("action.save")); int value = chooser.showSaveDialog(this); @@ -1002,9 +1014,14 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, currentFileFormat = chooser.getSelectedFormat(); if (currentFileFormat == null) { - JOptionPane.showInternalMessageDialog(Desktop.desktop, - MessageManager.getString("label.select_file_format_before_saving"), - MessageManager.getString("label.file_format_not_specified"), JOptionPane.WARNING_MESSAGE); + JOptionPane + .showInternalMessageDialog( + Desktop.desktop, + MessageManager + .getString("label.select_file_format_before_saving"), + MessageManager + .getString("label.file_format_not_specified"), + JOptionPane.WARNING_MESSAGE); value = chooser.showSaveDialog(this); return; } @@ -1040,8 +1057,9 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, success = new Jalview2XML().SaveAlignment(this, file, shortName); - statusBar.setText(MessageManager.formatMessage("label.successfully_saved_to_file_in_format",new String[]{fileName, format})); - + statusBar.setText(MessageManager.formatMessage( + "label.successfully_saved_to_file_in_format", new String[] + { fileName, format })); } else @@ -1062,8 +1080,10 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, int reply = JOptionPane .showInternalConfirmDialog( Desktop.desktop, - MessageManager.getString("label.alignment_contains_hidden_columns"), - MessageManager.getString("action.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); @@ -1093,7 +1113,10 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, out.print(output); out.close(); this.setTitle(file); - statusBar.setText(MessageManager.formatMessage("label.successfully_saved_to_file_in_format",new String[]{fileName, format})); + statusBar.setText(MessageManager.formatMessage( + "label.successfully_saved_to_file_in_format", + new String[] + { fileName, format })); } catch (Exception ex) { success = false; @@ -1104,8 +1127,11 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, if (!success) { - JOptionPane.showInternalMessageDialog(this, MessageManager.formatMessage("label.couldnt_save_file", new String[]{fileName}), - MessageManager.getString("label.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; @@ -1142,8 +1168,10 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, int reply = JOptionPane .showInternalConfirmDialog( Desktop.desktop, - MessageManager.getString("label.alignment_contains_hidden_columns"), - MessageManager.getString("action.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); @@ -1161,8 +1189,9 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, cap.setText(new FormatAdapter().formatSequences(e.getActionCommand(), viewport.getAlignment(), omitHidden, viewport.getColumnSelection())); - Desktop.addInternalFrame(cap, - MessageManager.formatMessage("label.alignment_output_command", new String[]{e.getActionCommand()}), 600, 500); + Desktop.addInternalFrame(cap, MessageManager.formatMessage( + "label.alignment_output_command", new String[] + { e.getActionCommand() }), 600, 500); } catch (OutOfMemoryError oom) { new OOMWarning("Outputting alignment as " + e.getActionCommand(), oom); @@ -1258,8 +1287,10 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, JalviewFileChooser chooser = new JalviewFileChooser( jalview.bin.Cache.getProperty("LAST_DIRECTORY")); chooser.setFileView(new JalviewFileView()); - chooser.setDialogTitle(MessageManager.getString("label.load_jalview_annotations")); - chooser.setToolTipText(MessageManager.getString("label.load_jalview_annotations")); + chooser.setDialogTitle(MessageManager + .getString("label.load_jalview_annotations")); + chooser.setToolTipText(MessageManager + .getString("label.load_jalview_annotations")); int value = chooser.showOpenDialog(null); @@ -1359,7 +1390,9 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, { undoMenuItem.setEnabled(true); CommandI command = (CommandI) viewport.historyList.peek(); - undoMenuItem.setText(MessageManager.formatMessage("label.undo_command", new String[]{command.getDescription()})); + undoMenuItem.setText(MessageManager.formatMessage( + "label.undo_command", new String[] + { command.getDescription() })); } else { @@ -1372,7 +1405,9 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, redoMenuItem.setEnabled(true); CommandI command = (CommandI) viewport.redoList.peek(); - redoMenuItem.setText(MessageManager.formatMessage("label.redo_command", new String[]{command.getDescription()})); + redoMenuItem.setText(MessageManager.formatMessage( + "label.redo_command", new String[] + { command.getDescription() })); } else { @@ -1705,7 +1740,9 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, Desktop.jalviewClipboard = new Object[] { seqs, viewport.getAlignment().getDataset(), hiddenColumns }; - statusBar.setText(MessageManager.formatMessage("label.copied_sequences_to_clipboard", new String[]{Integer.valueOf(seqs.length).toString()})); + statusBar.setText(MessageManager.formatMessage( + "label.copied_sequences_to_clipboard", new String[] + { Integer.valueOf(seqs.length).toString() })); } /** @@ -2064,6 +2101,60 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, } + @Override + protected void expand_newalign(ActionEvent e) + { + try + { + AlignmentI alignment = AlignmentUtils.expandContext(getViewport() + .getAlignment(), -1); + AlignFrame af = new AlignFrame(alignment, DEFAULT_WIDTH, + DEFAULT_HEIGHT); + String newtitle = new String("Flanking alignment"); + + if (Desktop.jalviewClipboard != null + && Desktop.jalviewClipboard[2] != null) + { + Vector hc = (Vector) Desktop.jalviewClipboard[2]; + for (int i = 0; i < hc.size(); i++) + { + int[] region = (int[]) hc.elementAt(i); + af.viewport.hideColumns(region[0], region[1]); + } + } + + // >>>This is a fix for the moment, until a better solution is + // found!!<<< + af.alignPanel.seqPanel.seqCanvas.getFeatureRenderer() + .transferSettings( + alignPanel.seqPanel.seqCanvas.getFeatureRenderer()); + + // TODO: maintain provenance of an alignment, rather than just make the + // title a concatenation of operations. + { + if (title.startsWith("Copied sequences")) + { + newtitle = title; + } + else + { + newtitle = newtitle.concat("- from " + title); + } + } + + Desktop.addInternalFrame(af, newtitle, DEFAULT_WIDTH, DEFAULT_HEIGHT); + + } catch (Exception ex) + { + ex.printStackTrace(); + System.out.println("Exception whilst pasting: " + ex); + // could be anything being pasted in here + } catch (OutOfMemoryError oom) + { + new OOMWarning("Viewing flanking region of alignment", oom); + } + } + /** * DOCUMENT ME! * @@ -2147,7 +2238,8 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, @Override protected void deleteGroups_actionPerformed(ActionEvent e) { - if (avc.deleteGroups()) { + if (avc.deleteGroups()) + { PaintRefresher.Refresh(this, viewport.getSequenceSetId()); alignPanel.updateAnnotation(); alignPanel.paintAlignment(true); @@ -2305,7 +2397,9 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, viewport.getSelectionGroup()); } - statusBar.setText(MessageManager.formatMessage("label.removed_columns", new String[]{Integer.valueOf(trimRegion.getSize()).toString()})); + statusBar.setText(MessageManager.formatMessage( + "label.removed_columns", new String[] + { Integer.valueOf(trimRegion.getSize()).toString() })); addHistoryItem(trimRegion); @@ -2353,7 +2447,9 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, addHistoryItem(removeGapCols); - statusBar.setText(MessageManager.formatMessage("label.removed_empty_columns", new String[]{Integer.valueOf(removeGapCols.getSize()).toString()})); + 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 @@ -2548,7 +2644,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, addAlignmentPanel(newap, true); newap.alignmentChanged(); - + if (alignPanels.size() == 2) { viewport.gatherViewsHere = true; @@ -2962,11 +3058,15 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, editPane.setEditable(false); StringBuffer contents = new AlignmentProperties(viewport.getAlignment()) .formatAsHtml(); - editPane.setText(MessageManager.formatMessage("label.html_content", new String[]{contents.toString()})); + editPane.setText(MessageManager.formatMessage("label.html_content", + new String[] + { contents.toString() })); JInternalFrame frame = new JInternalFrame(); frame.getContentPane().add(new JScrollPane(editPane)); - Desktop.instance.addInternalFrame(frame, MessageManager.formatMessage("label.alignment_properties", new String[]{getTitle()}), 500, 400); + Desktop.instance.addInternalFrame(frame, MessageManager.formatMessage( + "label.alignment_properties", new String[] + { getTitle() }), 500, 400); } /** @@ -2986,8 +3086,9 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, JInternalFrame frame = new JInternalFrame(); OverviewPanel overview = new OverviewPanel(alignPanel); frame.setContentPane(overview); - Desktop.addInternalFrame(frame, MessageManager.formatMessage("label.overview_params", new String[]{this.getTitle()}), - frame.getWidth(), frame.getHeight()); + Desktop.addInternalFrame(frame, MessageManager.formatMessage( + "label.overview_params", new String[] + { this.getTitle() }), frame.getWidth(), frame.getHeight()); frame.pack(); frame.setLayer(JLayeredPane.PALETTE_LAYER); frame.addInternalFrameListener(new javax.swing.event.InternalFrameAdapter() @@ -3183,10 +3284,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, { threshold = SliderPanel.setPIDSliderSource(alignPanel, cs, "Background"); - cs.setThreshold(threshold, viewport.getIgnoreGapsConsensus()); - - viewport.setGlobalColourScheme(cs); } else { @@ -3372,7 +3470,8 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, @Override public void userDefinedColour_actionPerformed(ActionEvent e) { - if (e.getActionCommand().equals(MessageManager.getString("action.user_defined"))) + if (e.getActionCommand().equals( + MessageManager.getString("action.user_defined"))) { new UserDefinedColours(alignPanel, null); } @@ -3421,8 +3520,10 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, int option = JOptionPane.showInternalConfirmDialog( jalview.gui.Desktop.desktop, - MessageManager.getString("label.remove_from_default_list"), - MessageManager.getString("label.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) { @@ -3573,15 +3674,18 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, if ((viewport.getSelectionGroup() == null) || (viewport.getSelectionGroup().getSize() < 2)) { - JOptionPane.showInternalMessageDialog(this, - MessageManager.getString("label.you_must_select_least_two_sequences"), MessageManager.getString("label.invalid_selection"), + JOptionPane.showInternalMessageDialog(this, MessageManager + .getString("label.you_must_select_least_two_sequences"), + MessageManager.getString("label.invalid_selection"), JOptionPane.WARNING_MESSAGE); } else { JInternalFrame frame = new JInternalFrame(); frame.setContentPane(new PairwiseAlignPanel(viewport)); - Desktop.addInternalFrame(frame, MessageManager.getString("action.pairwise_alignment"), 600, 500); + Desktop.addInternalFrame(frame, + MessageManager.getString("action.pairwise_alignment"), 600, + 500); } } @@ -3599,10 +3703,14 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, .getSelectionGroup().getSize() > 0)) || (viewport.getAlignment().getHeight() < 4)) { - JOptionPane.showInternalMessageDialog(this, - MessageManager.getString("label.principal_component_analysis_must_take_least_four_input_sequences"), - MessageManager.getString("label.sequence_selection_insufficient"), - JOptionPane.WARNING_MESSAGE); + JOptionPane + .showInternalMessageDialog( + this, + MessageManager + .getString("label.principal_component_analysis_must_take_least_four_input_sequences"), + MessageManager + .getString("label.sequence_selection_insufficient"), + JOptionPane.WARNING_MESSAGE); return; } @@ -3703,8 +3811,11 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, JOptionPane .showMessageDialog( Desktop.desktop, - MessageManager.getString("label.you_need_more_two_sequences_selected_build_tree"), - MessageManager.getString("label.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; } @@ -3718,8 +3829,10 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, JOptionPane .showMessageDialog( Desktop.desktop, - MessageManager.getString("label.selected_region_to_tree_may_only_contain_residues_or_gaps"), - MessageManager.getString("label.sequences_selection_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; @@ -3737,8 +3850,10 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, JOptionPane .showMessageDialog( Desktop.desktop, - MessageManager.getString("label.sequences_must_be_aligned_before_creating_tree"), - MessageManager.getString("label.sequences_not_aligned"), + MessageManager + .getString("label.sequences_must_be_aligned_before_creating_tree"), + MessageManager + .getString("label.sequences_not_aligned"), JOptionPane.WARNING_MESSAGE); return; @@ -3893,23 +4008,33 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, { calculateTree.removeAll(); // build the calculate menu - for (final String type:new String[] {"NJ", "AV"}) + + for (final String type : new String[] + { "NJ", "AV" }) { - for (final Object pwtype: ResidueProperties.scoreMatrices.keySet()) + String treecalcnm = MessageManager.getString("label.tree_calc_" + + type.toLowerCase()); + for (final Object pwtype : ResidueProperties.scoreMatrices.keySet()) { JMenuItem tm = new JMenuItem(); ScoreModelI sm = ResidueProperties.scoreMatrices.get(pwtype); - final String title="Calculate "+type+" using "+sm.getName(); - tm.setText(title);// MessageManager.getString("label.neighbour_blosum62")); - tm - .addActionListener(new java.awt.event.ActionListener() - { - public void actionPerformed(ActionEvent e) - { - NewTreePanel(type, (String) pwtype, title); - } - }); - calculateTree.add(tm); + if (sm.isProtein() == !viewport.getAlignment().isNucleotide()) + { + String smn = MessageManager.getStringOrReturn( + "label.score_model_", sm.getName()); + final String title = MessageManager.formatMessage( + "label.treecalc_title", treecalcnm, smn); + tm.setText(title);// + tm.addActionListener(new java.awt.event.ActionListener() + { + @Override + public void actionPerformed(ActionEvent e) + { + NewTreePanel(type, (String) pwtype, title); + } + }); + calculateTree.add(tm); + } } } @@ -4057,8 +4182,9 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, JalviewFileChooser chooser = new JalviewFileChooser( jalview.bin.Cache.getProperty("LAST_DIRECTORY")); chooser.setFileView(new JalviewFileView()); - chooser.setDialogTitle(MessageManager.getString("label.select_newick_like_tree_file")); - chooser.setToolTipText(MessageManager.getString("label.load_tree_file")); + chooser.setDialogTitle(MessageManager + .getString("label.select_newick_like_tree_file")); + chooser.setToolTipText(MessageManager.getString("label.load_tree_file")); int value = chooser.showOpenDialog(null); @@ -4073,14 +4199,20 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, viewport.setCurrentTree(ShowNewickTree(fin, choice).getTree()); } catch (Exception ex) { - JOptionPane.showMessageDialog(Desktop.desktop, ex.getMessage(), - MessageManager.getString("label.problem_reading_tree_file"), JOptionPane.WARNING_MESSAGE); + JOptionPane + .showMessageDialog( + Desktop.desktop, + ex.getMessage(), + MessageManager + .getString("label.problem_reading_tree_file"), + JOptionPane.WARNING_MESSAGE); ex.printStackTrace(); } if (fin != null && fin.hasWarningMessage()) { - JOptionPane.showMessageDialog(Desktop.desktop, - fin.getWarningMessage(), MessageManager.getString("label.possible_problem_with_tree_file"), + JOptionPane.showMessageDialog(Desktop.desktop, fin + .getWarningMessage(), MessageManager + .getString("label.possible_problem_with_tree_file"), JOptionPane.WARNING_MESSAGE); } } @@ -4185,7 +4317,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, @Override public void run() { - final List legacyItems=new ArrayList(); + final List legacyItems = new ArrayList(); try { System.err.println("Building ws menu again " @@ -4218,7 +4350,8 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, // be // stored or retrieved from elsewhere // No MSAWS used any more: - // Vector msaws = null; // (Vector) Discoverer.services.get("MsaWS"); + // Vector msaws = null; // (Vector) + // Discoverer.services.get("MsaWS"); Vector secstrpr = (Vector) Discoverer.services .get("SecStrPred"); if (secstrpr != null) @@ -4230,17 +4363,17 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, .get(i); jalview.ws.WSMenuEntryProviderI impl = jalview.ws.jws1.Discoverer .getServiceClient(sh); - int p=secstrmenu.getItemCount(); + int p = secstrmenu.getItemCount(); impl.attachWSMenuEntry(secstrmenu, me); - int q=secstrmenu.getItemCount(); - for (int litm=p;litm= mcomp || i == (otherdb.size())) { - ifetch.setText(MessageManager.formatMessage("label.source_to_target",imname,sname)); + ifetch.setText(MessageManager.formatMessage( + "label.source_to_target", imname, sname)); dfetch.add(ifetch); ifetch = new JMenu(); imname = null; @@ -5339,7 +5522,8 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, ++dbi; if (comp >= mcomp || dbi >= (dbclasses.length)) { - dfetch.setText(MessageManager.formatMessage("label.source_to_target",mname,dbclass)); + dfetch.setText(MessageManager.formatMessage( + "label.source_to_target", mname, dbclass)); rfetch.add(dfetch); dfetch = new JMenu(); mname = null; @@ -5477,7 +5661,8 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, @Override protected void makeGrpsFromSelection_actionPerformed(ActionEvent e) { - if (avc.makeGroupsFromSelection()) { + if (avc.makeGroupsFromSelection()) + { PaintRefresher.Refresh(this, viewport.getSequenceSetId()); alignPanel.updateAnnotation(); alignPanel.paintAlignment(true); @@ -5522,6 +5707,95 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, tabbedPane.setSelectedIndex(alignPanels.indexOf(alignmentPanel)); } } + + /** + * On menu option, open a panel to allow choice of annotation types to + * show/hide. + */ + @Override + protected void chooseAnnotations_actionPerformed() + { + new AnnotationChooser(this.alignPanel); + } + + /** + * Get a list of unique annotation types for the alignment, optionally + * restricted to sequence-specific annotations. + */ + protected List getAnnotationTypes(boolean sequenceSpecificOnly) + { + // TODO move this to an AlignmentUtils class or similar + List types = new ArrayList(); + for (AlignmentAnnotation aa : alignPanel.getAlignment() + .getAlignmentAnnotation()) + { + if (sequenceSpecificOnly && aa.sequenceRef == null) + { + continue; + } + String type = aa.label; + if (!types.contains(type)) + { + types.add(type); + } + } + return types; + } + + /** + * Action on selection of an annotation type to Show or Hide. + * + * @param type + * @param doShow + */ + @Override + protected void showHideAnnotation_actionPerformed(String type, boolean doShow) + { + for (AlignmentAnnotation aa : alignPanel.getAlignment() + .getAlignmentAnnotation()) + { + if (type.equals(aa.label)) + { + aa.visible = doShow; + } + } + this.alignPanel.paintAlignment(true); + } + + /** + * Dynamically build the list of annotation types to show or hide. + */ + @Override + protected void buildShowHideAnnotationMenus() + { + showAnnotations.removeAll(); + hideAnnotations.removeAll(); + + List types = getAnnotationTypes(false); + for (final String type : types) + { + final JMenuItem showitem = new JMenuItem(type); + showitem.addActionListener(new java.awt.event.ActionListener() + { + @Override + public void actionPerformed(ActionEvent e) + { + showHideAnnotation_actionPerformed(type, true); + } + }); + showAnnotations.add(showitem); + final JMenuItem hideitem = new JMenuItem(type); + hideitem.addActionListener(new java.awt.event.ActionListener() + { + @Override + public void actionPerformed(ActionEvent e) + { + showHideAnnotation_actionPerformed(type, false); + } + }); + hideAnnotations.add(hideitem); + } + } } class PrintThread extends Thread