X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FAlignFrame.java;fp=src%2Fjalview%2Fgui%2FAlignFrame.java;h=a44df97ce08ee3003bfc0f67d53516b4ba4b1f94;hb=725dd79ff4976e8e30a638a6f7dfa45eea818d57;hp=fcb657285ca4f03e4e3c927dc34d02d6d783f574;hpb=74f21ca6ca8fa17d53708e457d191e15904f8310;p=jalview.git diff --git a/src/jalview/gui/AlignFrame.java b/src/jalview/gui/AlignFrame.java index fcb6572..a44df97 100644 --- a/src/jalview/gui/AlignFrame.java +++ b/src/jalview/gui/AlignFrame.java @@ -893,6 +893,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, scaleLeft.setVisible(av.getWrapAlignment()); scaleRight.setVisible(av.getWrapAlignment()); annotationPanelMenuItem.setState(av.isShowAnnotation()); + /* * Show/hide annotations only enabled if annotation panel is shown */ @@ -908,6 +909,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, showConsensusHistogram.setSelected(av.isShowConsensusHistogram()); showSequenceLogo.setSelected(av.isShowSequenceLogo()); normaliseSequenceLogo.setSelected(av.isNormaliseSequenceLogo()); + buildAutoAnnotationMenu(av); ColourMenuHelper.setColourSelected(colourMenu, av.getGlobalColourScheme()); @@ -928,6 +930,168 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, } /** + * Adds menu items for the Autocalculated Annotation sub-menu + * + * @param av + */ + void buildAutoAnnotationMenu(AlignViewport av) + { + autoAnnMenu.removeAll(); + autoAnnMenu.add(showAutoFirst); + autoAnnMenu.add(showAutoLast); + autoAnnMenu.addSeparator(); + autoAnnMenu.add(applyAutoAnnotationSettings); + autoAnnMenu.add(showConsensusHistogram); + autoAnnMenu.add(showSequenceLogo); + autoAnnMenu.add(normaliseSequenceLogo); + autoAnnMenu.addSeparator(); + + /* + * add options to reinstate any deleted auto-calculated annotations + */ + boolean hasConservation = false; + boolean hasQuality = false; + boolean hasConsensus = false; + boolean hasOccupancy = false; + boolean hasRnaStruct = false; + AlignmentAnnotation[] anns = av.getAlignment().getAlignmentAnnotation(); + if (anns == null) + { + return; + } + for (int i = 0; i < anns.length; i++) + { + if (anns[i].autoCalculated) + { + // TODO JAL-3485 should let these strings be constants instead + if ("Conservation".equals(anns[i].label)) + { + hasConservation = true; + } + else if ("Quality".equals(anns[i].label)) + { + hasQuality = true; + } + else if ("Consensus".equals(anns[i].label)) + { + hasConsensus = true; + } + else if ("Occupancy".equals(anns[i].label)) + { + hasOccupancy = true; + } + else if ("StrucConsensus".equals(anns[i].label)) + { + hasRnaStruct = true; + } + } + } + boolean added = false; + + /* + * a shareable action to refresh stuff; NB action listeners + * get run in reverse order to that in which they are added! + */ + ActionListener refresher = new ActionListener() + { + @Override + public void actionPerformed(ActionEvent e) + { + alignPanel.adjustAnnotationHeight(); + av.alignmentChanged(alignPanel); + buildAutoAnnotationMenu(av); + } + }; + + if (!av.isNucleotide()) + { + if (!hasConservation) + { + JMenuItem mi = new JMenuItem("Conservation"); + mi.addActionListener(refresher); + mi.addActionListener(new ActionListener() + { + @Override + public void actionPerformed(ActionEvent e) + { + av.initConservation(); + } + }); + autoAnnMenu.add(mi); + added = true; + } + if (!hasQuality) + { + JMenuItem mi = new JMenuItem("Quality"); + mi.addActionListener(refresher); + mi.addActionListener(new ActionListener() + { + @Override + public void actionPerformed(ActionEvent e) + { + av.initQuality(); + } + }); + autoAnnMenu.add(mi); + added = true; + } + } + if (!hasConsensus) + { + JMenuItem mi = new JMenuItem("Consensus"); + mi.addActionListener(refresher); + mi.addActionListener(new ActionListener() + { + @Override + public void actionPerformed(ActionEvent e) + { + av.initConsensus(); + } + }); + autoAnnMenu.add(mi); + added = true; + } + if (!hasOccupancy) + { + JMenuItem mi = new JMenuItem("Occupancy"); + mi.addActionListener(refresher); + mi.addActionListener(new ActionListener() + { + @Override + public void actionPerformed(ActionEvent e) + { + av.initOccupancy(); + } + }); + autoAnnMenu.add(mi); + added = true; + } + if (!hasRnaStruct && av.isNucleotide() + && av.getAlignment().hasRNAStructure()) + { + JMenuItem mi = new JMenuItem("Structure Consensus"); + mi.addActionListener(refresher); + mi.addActionListener(new ActionListener() + { + @Override + public void actionPerformed(ActionEvent e) + { + av.initRNAStructure(); + } + }); + autoAnnMenu.add(mi); + added = true; + } + + if (added) + { + autoAnnMenu.addSeparator(); + } + autoAnnMenu.add(showGroupConservation); + autoAnnMenu.add(showGroupConsensus); + } + + /** * Set the enabled state of the 'Run Groovy' option in the Calculate menu * * @param b