X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FAlignFrame.java;h=9b5681bee81975fdd7f503a6aef1eaae86559158;hb=bb7c8e1f39eca07ec0bc544df298ee58f109b011;hp=44a2318d42d0f66173755f01cb1f1e6951caa81d;hpb=7dc7fb2a35c435d825bc91c5ae60ec6073419a69;p=jalview.git diff --git a/src/jalview/gui/AlignFrame.java b/src/jalview/gui/AlignFrame.java index 44a2318..9b5681b 100644 --- a/src/jalview/gui/AlignFrame.java +++ b/src/jalview/gui/AlignFrame.java @@ -34,7 +34,7 @@ import jalview.api.AlignmentViewPanel; import jalview.api.FeatureSettingsControllerI; import jalview.api.SplitContainerI; import jalview.api.ViewStyleI; -import jalview.api.analysis.ScoreModelI; +import jalview.api.analysis.SimilarityParamsI; import jalview.bin.Cache; import jalview.bin.Jalview; import jalview.commands.CommandI; @@ -53,13 +53,18 @@ import jalview.datamodel.AlignmentI; import jalview.datamodel.AlignmentOrder; import jalview.datamodel.AlignmentView; import jalview.datamodel.ColumnSelection; +import jalview.datamodel.HiddenColumns; +import jalview.datamodel.HiddenMarkovModel; import jalview.datamodel.HiddenSequences; import jalview.datamodel.PDBEntry; import jalview.datamodel.SeqCigar; import jalview.datamodel.Sequence; import jalview.datamodel.SequenceGroup; import jalview.datamodel.SequenceI; +import jalview.gui.ColourMenuHelper.ColourChangeListener; import jalview.gui.ViewSelectionMenu.ViewSetProvider; +import jalview.hmmer.HMMAlignThread; +import jalview.hmmer.HMMBuildThread; import jalview.io.AlignmentProperties; import jalview.io.AnnotationFile; import jalview.io.BioJsHTMLOutput; @@ -68,7 +73,9 @@ import jalview.io.FileFormat; import jalview.io.FileFormatI; import jalview.io.FileFormats; import jalview.io.FileLoader; +import jalview.io.FileParse; import jalview.io.FormatAdapter; +import jalview.io.HMMFile; import jalview.io.HtmlSvgOutput; import jalview.io.IdentifyFile; import jalview.io.JPredFile; @@ -76,28 +83,16 @@ import jalview.io.JalviewFileChooser; import jalview.io.JalviewFileView; import jalview.io.JnetAnnotationMaker; import jalview.io.NewickFile; +import jalview.io.ScoreMatrixFile; import jalview.io.TCoffeeScoreFile; import jalview.jbgui.GAlignFrame; -import jalview.schemes.Blosum62ColourScheme; -import jalview.schemes.BuriedColourScheme; -import jalview.schemes.ClustalxColourScheme; import jalview.schemes.ColourSchemeI; -import jalview.schemes.ColourSchemeProperty; -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.ColourSchemes; +import jalview.schemes.ResidueColourScheme; 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.viewmodel.AlignmentViewport; +import jalview.viewmodel.ViewportRanges; import jalview.ws.DBRefFetcher; import jalview.ws.DBRefFetcher.FetchFinishedListenerI; import jalview.ws.jws1.Discoverer; @@ -126,21 +121,23 @@ import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; -import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.print.PageFormat; import java.awt.print.PrinterJob; import java.beans.PropertyChangeEvent; import java.io.File; import java.io.FileWriter; +import java.io.IOException; import java.io.PrintWriter; import java.net.URL; import java.util.ArrayList; import java.util.Arrays; import java.util.Deque; import java.util.Enumeration; +import java.util.HashMap; import java.util.Hashtable; import java.util.List; +import java.util.Map; import java.util.Vector; import javax.swing.JCheckBoxMenuItem; @@ -149,7 +146,7 @@ import javax.swing.JInternalFrame; import javax.swing.JLayeredPane; import javax.swing.JMenu; import javax.swing.JMenuItem; -import javax.swing.JRadioButtonMenuItem; +import javax.swing.JOptionPane; import javax.swing.JScrollPane; import javax.swing.SwingUtilities; @@ -160,13 +157,19 @@ import javax.swing.SwingUtilities; * @version $Revision$ */ public class AlignFrame extends GAlignFrame implements DropTargetListener, - IProgressIndicator, AlignViewControllerGuiI + IProgressIndicator, AlignViewControllerGuiI, ColourChangeListener { + Map distribution = new HashMap<>(); // temporary + public static final int DEFAULT_WIDTH = 700; public static final int DEFAULT_HEIGHT = 500; + boolean autoAlignNewSequences; + + boolean recurring; + /* * The currently displayed panel (selected tabbed view if more than one) */ @@ -174,9 +177,11 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, AlignViewport viewport; + ViewportRanges vpRanges; + public AlignViewControllerI avc; - List alignPanels = new ArrayList(); + List alignPanels = new ArrayList<>(); /** * Last format used to load or save alignments in this window @@ -188,6 +193,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, */ String fileName = null; + /** * Creates a new AlignFrame object with specific width and height. * @@ -243,7 +249,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * @param height * height of frame. */ - public AlignFrame(AlignmentI al, ColumnSelection hiddenColumns, + public AlignFrame(AlignmentI al, HiddenColumns hiddenColumns, int width, int height) { this(al, hiddenColumns, width, height, null); @@ -260,7 +266,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * @param sequenceSetId * (may be null) */ - public AlignFrame(AlignmentI al, ColumnSelection hiddenColumns, + public AlignFrame(AlignmentI al, HiddenColumns hiddenColumns, int width, int height, String sequenceSetId) { this(al, hiddenColumns, width, height, sequenceSetId, null); @@ -279,7 +285,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * @param viewId * (may be null) */ - public AlignFrame(AlignmentI al, ColumnSelection hiddenColumns, + public AlignFrame(AlignmentI al, HiddenColumns hiddenColumns, int width, int height, String sequenceSetId, String viewId) { setSize(width, height); @@ -298,7 +304,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, } public AlignFrame(AlignmentI al, SequenceI[] hiddenSeqs, - ColumnSelection hiddenColumns, int width, int height) + HiddenColumns hiddenColumns, int width, int height) { setSize(width, height); @@ -334,6 +340,11 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, init(); } + public void setIsRecurring(boolean status) + { + recurring = status; + } + /** * initalise the alignframe from the underlying viewport data and the * configurations @@ -345,11 +356,12 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, progressBar = new ProgressBar(this.statusPanel, this.statusBar); } + vpRanges = viewport.getRanges(); avc = new jalview.controller.AlignViewController(this, viewport, alignPanel); if (viewport.getAlignmentConservationAnnotation() == null) { - BLOSUM62Colour.setEnabled(false); + // BLOSUM62Colour.setEnabled(false); conservationMenuItem.setEnabled(false); modifyConservation.setEnabled(false); // PIDColour.setEnabled(false); @@ -369,19 +381,29 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, sortPairwiseMenuItem_actionPerformed(null); } - if (Desktop.desktop != null) - { - this.setDropTarget(new java.awt.dnd.DropTarget(this, this)); - addServiceListeners(); - setGUINucleotide(viewport.getAlignment().isNucleotide()); - } - this.alignPanel.av .setShowAutocalculatedAbove(isShowAutoCalculatedAbove()); setMenusFromViewport(viewport); buildSortByAnnotationScoresMenu(); - buildTreeMenu(); + calculateTree.addActionListener(new ActionListener() + { + + @Override + public void actionPerformed(ActionEvent e) + { + openTreePcaDialog(); + } + }); + buildColourMenu(); + buildHMMERMenu(); + + if (Desktop.desktop != null) + { + this.setDropTarget(new java.awt.dnd.DropTarget(this, this)); + addServiceListeners(); + setGUINucleotide(); + } if (viewport.getWrapAlignment()) { @@ -395,8 +417,8 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, addKeyListener(); - final List selviews = new ArrayList(); - final List origview = new ArrayList(); + final List selviews = new ArrayList<>(); + final List origview = new ArrayList<>(); final String menuLabel = MessageManager .getString("label.copy_format_from"); ViewSelectionMenu vsel = new ViewSelectionMenu(menuLabel, @@ -409,7 +431,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, origview.clear(); origview.add(alignPanel); // make an array of all alignment panels except for this one - List aps = new ArrayList( + List aps = new ArrayList<>( Arrays.asList(Desktop.getAlignmentPanels(null))); aps.remove(AlignFrame.this.alignPanel); return aps.toArray(new AlignmentPanel[aps.size()]); @@ -481,6 +503,22 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, } + private void buildHMMERMenu() + { + hmmerMenu.removeAll(); + + hmmerMenu.add(changeHMMERLocation); + hmmerMenu.addSeparator(); + + hmmerMenu.add(autoAlignSeqs); + hmmerMenu.addSeparator(); + + hmmerMenu.add(hmmAlign); + hmmerMenu.add(hmmBuild); + hmmerMenu.add(hmmSearch); + + } + /** * Change the filename and format for the alignment, and enable the 'reload' * button functionality. @@ -653,8 +691,10 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, new String[] { (viewport.cursorMode ? "on" : "off") })); if (viewport.cursorMode) { - alignPanel.getSeqPanel().seqCanvas.cursorX = viewport.startRes; - alignPanel.getSeqPanel().seqCanvas.cursorY = viewport.startSeq; + alignPanel.getSeqPanel().seqCanvas.cursorX = vpRanges + .getStartRes(); + alignPanel.getSeqPanel().seqCanvas.cursorY = vpRanges + .getStartSeq(); } alignPanel.getSeqPanel().seqCanvas.repaint(); break; @@ -688,23 +728,21 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, case KeyEvent.VK_PAGE_UP: if (viewport.getWrapAlignment()) { - alignPanel.scrollUp(true); + vpRanges.scrollUp(true); } else { - alignPanel.setScrollValues(viewport.startRes, viewport.startSeq - - viewport.endSeq + viewport.startSeq); + vpRanges.pageUp(); } break; case KeyEvent.VK_PAGE_DOWN: if (viewport.getWrapAlignment()) { - alignPanel.scrollUp(false); + vpRanges.scrollUp(false); } else { - alignPanel.setScrollValues(viewport.startRes, viewport.startSeq - + viewport.endSeq - viewport.startSeq); + vpRanges.pageDown(); } break; } @@ -776,6 +814,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, ap.av.updateConservation(ap); ap.av.updateConsensus(ap); ap.av.updateStrucConsensus(ap); + ap.av.updateInformation(ap); } } @@ -848,27 +887,23 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, /** * Configure menu items that vary according to whether the alignment is * nucleotide or protein - * - * @param nucleotide */ - public void setGUINucleotide(boolean nucleotide) + public void setGUINucleotide() { + AlignmentI al = getViewport().getAlignment(); + boolean nucleotide = al.isNucleotide(); + showTranslation.setVisible(nucleotide); showReverse.setVisible(nucleotide); showReverseComplement.setVisible(nucleotide); conservationMenuItem.setEnabled(!nucleotide); - modifyConservation.setEnabled(!nucleotide); + modifyConservation.setEnabled(!nucleotide + && conservationMenuItem.isSelected()); showGroupConservation.setEnabled(!nucleotide); - rnahelicesColour.setEnabled(nucleotide); - nucleotideColour.setEnabled(nucleotide); - purinePyrimidineColour.setEnabled(nucleotide); - RNAInteractionColour.setEnabled(nucleotide); + showComplementMenuItem.setText(nucleotide ? MessageManager .getString("label.protein") : MessageManager .getString("label.nucleotide")); - setColourSelected(jalview.bin.Cache.getDefault( - nucleotide ? Preferences.DEFAULT_COLOUR_NUC - : Preferences.DEFAULT_COLOUR_PROT, "None")); } /** @@ -921,9 +956,12 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, showConsensusHistogram.setSelected(av.isShowConsensusHistogram()); showSequenceLogo.setSelected(av.isShowSequenceLogo()); normaliseSequenceLogo.setSelected(av.isNormaliseSequenceLogo()); + showInformationHistogram.setSelected(av.isShowInformationHistogram()); + showHMMSequenceLogo.setSelected(av.isShowHMMSequenceLogo()); + normaliseHMMSequenceLogo.setSelected(av.isNormaliseHMMSequenceLogo()); - setColourSelected(ColourSchemeProperty.getColourName(av - .getGlobalColourScheme())); + ColourMenuHelper.setColourSelected(colourMenu, + av.getGlobalColourScheme()); showSeqFeatures.setSelected(av.isShowSequenceFeatures()); hiddenMarkers.setState(av.getShowHiddenMarkers()); @@ -933,9 +971,6 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, 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); showProducts.setEnabled(canShowProducts()); setGroovyEnabled(Desktop.getGroovyConsole() != null); @@ -1015,6 +1050,44 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, } @Override + public void hmmBuild_actionPerformed(ActionEvent e) + throws IOException, InterruptedException + { + new Thread(new HMMBuildThread(this)).start(); + alignPanel.repaint(); + + } + + @Override + public void hmmAlign_actionPerformed(ActionEvent e) + throws IOException, InterruptedException + { + new Thread(new HMMAlignThread(this, true)).start(); + alignPanel.repaint(); + } + + @Override + public void changeHMMERLocation_actionPerformed(ActionEvent e) + { + String location = JOptionPane.showInputDialog( + MessageManager.getString("label.enter_location")); + Cache.setProperty(Preferences.HMMER_PATH, location); + } + + @Override + public void autoAlignSeqs_actionPerformed(boolean autoAlignSeqs) + { + autoAlignNewSequences = autoAlignSeqs; + alignPanel.repaint(); + } + + @Override + public void hmmSearch_actionPerformed(ActionEvent e) + { + alignPanel.repaint(); + } + + @Override public void reload_actionPerformed(ActionEvent e) { if (fileName != null) @@ -1197,8 +1270,8 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, exportData.getAlignment(), // class cast exceptions will // occur in the distant future exportData.getOmitHidden(), exportData.getStartEndPostions(), - f.getCacheSuffixDefault(format), - viewport.getColumnSelection()); + f.getCacheSuffixDefault(format), viewport.getAlignment() + .getHiddenColumns()); if (output == null) { @@ -1274,11 +1347,11 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, { FileFormatI format = fileFormat; cap.setText(new FormatAdapter(alignPanel, exportData.getSettings()) - .formatSequences(format, - exportData.getAlignment(), + .formatSequences(format, exportData.getAlignment(), exportData.getOmitHidden(), - exportData.getStartEndPostions(), - viewport.getColumnSelection())); + exportData + .getStartEndPostions(), viewport + .getAlignment().getHiddenColumns())); Desktop.addInternalFrame(cap, MessageManager.formatMessage( "label.alignment_output_command", new Object[] { e.getActionCommand() }), 600, 500); @@ -1327,8 +1400,9 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, alignmentToExport = viewport.getAlignment(); } alignmentStartEnd = alignmentToExport - .getVisibleStartAndEndIndex(viewport.getColumnSelection() - .getHiddenColumns()); + .getVisibleStartAndEndIndex(viewport.getAlignment() + .getHiddenColumns() + .getHiddenRegions()); AlignmentExportData ed = new AlignmentExportData(alignmentToExport, omitHidden, alignmentStartEnd, settings); return ed; @@ -1424,6 +1498,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, @Override public void associatedData_actionPerformed(ActionEvent e) + throws IOException, InterruptedException { // Pick the tree file JalviewFileChooser chooser = new JalviewFileChooser( @@ -1737,7 +1812,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, synchronized void slideSequences(boolean right, int size) { - List sg = new ArrayList(); + List sg = new ArrayList<>(); if (viewport.cursorMode) { sg.add(viewport.getAlignment().getSequenceAt( @@ -1756,7 +1831,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, return; } - List invertGroup = new ArrayList(); + List invertGroup = new ArrayList<>(); for (SequenceI seq : viewport.getAlignment().getSequences()) { @@ -1866,8 +1941,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, } String output = new FormatAdapter().formatSequences(FileFormat.Fasta, - seqs, - omitHidden, null); + seqs, omitHidden, null); StringSelection ss = new StringSelection(output); @@ -1890,10 +1964,11 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, ArrayList hiddenColumns = null; if (viewport.hasHiddenColumns()) { - hiddenColumns = new ArrayList(); + hiddenColumns = new ArrayList<>(); int hiddenOffset = viewport.getSelectionGroup().getStartRes(), hiddenCutoff = viewport .getSelectionGroup().getEndRes(); - for (int[] region : viewport.getColumnSelection().getHiddenColumns()) + for (int[] region : viewport.getAlignment().getHiddenColumns() + .getHiddenRegions()) { if (region[0] >= hiddenOffset && region[1] <= hiddenCutoff) { @@ -1915,9 +1990,12 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * * @param e * DOCUMENT ME! + * @throws InterruptedException + * @throws IOException */ @Override protected void pasteNew_actionPerformed(ActionEvent e) + throws IOException, InterruptedException { paste(true); } @@ -1927,9 +2005,12 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * * @param e * DOCUMENT ME! + * @throws InterruptedException + * @throws IOException */ @Override protected void pasteThis_actionPerformed(ActionEvent e) + throws IOException, InterruptedException { paste(false); } @@ -1939,8 +2020,10 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * * @param newAlignment * true to paste to a new alignment, otherwise add to this. + * @throws InterruptedException + * @throws IOException */ - void paste(boolean newAlignment) + void paste(boolean newAlignment) throws IOException, InterruptedException { boolean externalPaste = true; try @@ -1999,7 +2082,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, } int alwidth = 0; - ArrayList newGraphGroups = new ArrayList(); + ArrayList newGraphGroups = new ArrayList<>(); int fgroup = -1; if (newAlignment) @@ -2163,7 +2246,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, { // propagate alignment changed. - viewport.setEndSeq(alignment.getHeight()); + vpRanges.setEndSeq(alignment.getHeight()); if (annotationAdded) { // Duplicate sequence annotation in all views. @@ -2268,7 +2351,6 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, System.out.println("Exception whilst pasting: " + ex); // could be anything being pasted in here } - } @Override @@ -2567,7 +2649,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, { trimRegion = new TrimRegionCommand("Remove Left", true, seqs, column, viewport.getAlignment()); - viewport.setStartRes(0); + vpRanges.setStartRes(0); } else { @@ -2634,13 +2716,13 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, // This is to maintain viewport position on first residue // of first sequence SequenceI seq = viewport.getAlignment().getSequenceAt(0); - int startRes = seq.findPosition(viewport.startRes); + int startRes = seq.findPosition(vpRanges.getStartRes()); // ShiftList shifts; // viewport.getAlignment().removeGaps(shifts=new ShiftList()); // edit.alColumnChanges=shifts.getInverse(); // if (viewport.hasHiddenColumns) // viewport.getColumnSelection().compensateForEdits(shifts); - viewport.setStartRes(seq.findIndex(startRes) - 1); + vpRanges.setStartRes(seq.findIndex(startRes) - 1); viewport.firePropertyChange("alignment", null, viewport.getAlignment() .getSequences()); @@ -2673,12 +2755,12 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, // This is to maintain viewport position on first residue // of first sequence SequenceI seq = viewport.getAlignment().getSequenceAt(0); - int startRes = seq.findPosition(viewport.startRes); + int startRes = seq.findPosition(vpRanges.getStartRes()); addHistoryItem(new RemoveGapsCommand("Remove Gaps", seqs, start, end, viewport.getAlignment())); - viewport.setStartRes(seq.findIndex(startRes) - 1); + vpRanges.setStartRes(seq.findIndex(startRes) - 1); viewport.firePropertyChange("alignment", null, viewport.getAlignment() .getSequences()); @@ -2766,6 +2848,14 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, */ newap.av.replaceMappings(viewport.getAlignment()); + /* + * start up cDNA consensus (if applicable) now mappings are in place + */ + if (newap.av.initComplementConsensus()) + { + newap.refresh(true); // adjust layout of annotations + } + newap.av.viewName = getNewViewName(viewTitle); addAlignmentPanel(newap, true); @@ -2823,7 +2913,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, */ protected List getExistingViewNames(List comps) { - List existingNames = new ArrayList(); + List existingNames = new ArrayList<>(); for (Component comp : comps) { if (comp instanceof AlignmentPanel) @@ -3275,7 +3365,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, frame.setContentPane(overview); Desktop.addInternalFrame(frame, MessageManager.formatMessage( "label.overview_params", new Object[] { this.getTitle() }), - frame.getWidth(), frame.getHeight()); + true, frame.getWidth(), frame.getHeight(), true, true); frame.pack(); frame.setLayer(JLayeredPane.PALETTE_LAYER); frame.addInternalFrameListener(new javax.swing.event.InternalFrameAdapter() @@ -3292,146 +3382,19 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, } @Override - public void textColour_actionPerformed(ActionEvent e) + public void textColour_actionPerformed() { new TextColourChooser().chooseColour(alignPanel, null); } - /** - * DOCUMENT ME! - * - * @param e - * DOCUMENT ME! - */ - @Override - protected void noColourmenuItem_actionPerformed(ActionEvent e) - { - changeColour(null); - } - - /** - * DOCUMENT ME! - * - * @param e - * DOCUMENT ME! - */ - @Override - public void clustalColour_actionPerformed(ActionEvent e) - { - changeColour(new ClustalxColourScheme(viewport.getAlignment(), - viewport.getHiddenRepSequences())); - } - - /** - * DOCUMENT ME! - * - * @param e - * DOCUMENT ME! - */ - @Override - public void zappoColour_actionPerformed(ActionEvent e) - { - changeColour(new ZappoColourScheme()); - } - - /** - * DOCUMENT ME! - * - * @param e - * DOCUMENT ME! - */ - @Override - public void taylorColour_actionPerformed(ActionEvent e) - { - changeColour(new TaylorColourScheme()); - } - - /** - * DOCUMENT ME! - * - * @param e - * DOCUMENT ME! - */ - @Override - public void hydrophobicityColour_actionPerformed(ActionEvent e) - { - changeColour(new HydrophobicColourScheme()); - } - - /** - * DOCUMENT ME! - * - * @param e - * DOCUMENT ME! - */ - @Override - public void helixColour_actionPerformed(ActionEvent e) - { - changeColour(new HelixColourScheme()); - } - - /** - * DOCUMENT ME! - * - * @param e - * DOCUMENT ME! - */ - @Override - public void strandColour_actionPerformed(ActionEvent e) - { - changeColour(new StrandColourScheme()); - } - - /** - * DOCUMENT ME! - * - * @param e - * DOCUMENT ME! - */ - @Override - public void turnColour_actionPerformed(ActionEvent e) - { - changeColour(new TurnColourScheme()); - } - - /** - * DOCUMENT ME! - * - * @param e - * DOCUMENT ME! - */ - @Override - public void buriedColour_actionPerformed(ActionEvent e) - { - changeColour(new BuriedColourScheme()); - } - - /** - * DOCUMENT ME! - * - * @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) { + * public void covariationColour_actionPerformed() { * changeColour(new * CovariationColourScheme(viewport.getAlignment().getAlignmentAnnotation * ()[0])); } */ @Override - public void annotationColour_actionPerformed(ActionEvent e) + public void annotationColour_actionPerformed() { new AnnotationColourChooser(viewport, alignPanel); } @@ -3442,56 +3405,56 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, new AnnotationColumnChooser(viewport, alignPanel); } + /** + * Action on the user checking or unchecking the option to apply the selected + * colour scheme to all groups. If unchecked, groups may have their own + * independent colour schemes. + * + * @param selected + */ @Override - public void rnahelicesColour_actionPerformed(ActionEvent e) + public void applyToAllGroups_actionPerformed(boolean selected) { - new RNAHelicesColourChooser(viewport, alignPanel); + viewport.setColourAppliesToAllGroups(selected); } /** - * DOCUMENT ME! + * Action on user selecting a colour from the colour menu * - * @param e - * DOCUMENT ME! + * @param name + * the name (not the menu item label!) of the colour scheme */ @Override - protected void applyToAllGroups_actionPerformed(ActionEvent e) + public void changeColour_actionPerformed(String name) { - viewport.setColourAppliesToAllGroups(applyToAllGroups.isSelected()); + /* + * 'User Defined' opens a panel to configure or load a + * user-defined colour scheme + */ + if (ResidueColourScheme.USER_DEFINED.equals(name)) + { + new UserDefinedColours(alignPanel); + return; + } + + /* + * otherwise set the chosen colour scheme (or null for 'None') + */ + ColourSchemeI cs = ColourSchemes.getInstance().getColourScheme(name, + viewport.getAlignment(), viewport.getHiddenRepSequences()); + changeColour(cs); } /** - * DOCUMENT ME! + * Actions on setting or changing the alignment colour scheme * * @param cs - * DOCUMENT ME! */ @Override public void changeColour(ColourSchemeI cs) { // TODO: pull up to controller method - - if (cs != null) - { - // Make sure viewport is up to date w.r.t. any sliders - if (viewport.getAbovePIDThreshold()) - { - int threshold = SliderPanel.setPIDSliderSource(alignPanel, cs, - "Background"); - viewport.setThreshold(threshold); - } - - if (viewport.getConservationSelected()) - { - cs.setConservationInc(SliderPanel.setConservationSlider(alignPanel, - cs, "Background")); - } - if (cs instanceof TCoffeeColourScheme) - { - tcoffeeColour.setEnabled(true); - tcoffeeColour.setSelected(true); - } - } + ColourMenuHelper.setColourSelected(colourMenu, cs); viewport.setGlobalColourScheme(cs); @@ -3499,44 +3462,36 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, } /** - * DOCUMENT ME! + * Show the PID threshold slider panel */ @Override protected void modifyPID_actionPerformed() { - if (viewport.getAbovePIDThreshold() - && viewport.getGlobalColourScheme() != null) - { - SliderPanel.setPIDSliderSource(alignPanel, - viewport.getGlobalColourScheme(), "Background"); - SliderPanel.showPIDSlider(); - } + SliderPanel.setPIDSliderSource(alignPanel, + viewport.getResidueShading(), alignPanel.getViewName()); + SliderPanel.showPIDSlider(); } /** - * DOCUMENT ME! + * Show the Conservation slider panel */ @Override protected void modifyConservation_actionPerformed() { - if (viewport.getConservationSelected() - && viewport.getGlobalColourScheme() != null) - { - SliderPanel.setConservationSlider(alignPanel, - viewport.getGlobalColourScheme(), "Background"); - SliderPanel.showConservationSlider(); - } + SliderPanel.setConservationSlider(alignPanel, + viewport.getResidueShading(), alignPanel.getViewName()); + SliderPanel.showConservationSlider(); } /** * Action on selecting or deselecting (Colour) By Conservation */ @Override - protected void conservationMenuItem_actionPerformed() + public void conservationMenuItem_actionPerformed(boolean selected) { - boolean selected = conservationMenuItem.isSelected(); modifyConservation.setEnabled(selected); viewport.setConservationSelected(selected); + viewport.getResidueShading().setConservationApplied(selected); changeColour(viewport.getGlobalColourScheme()); if (selected) @@ -3553,11 +3508,15 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * Action on selecting or deselecting (Colour) Above PID Threshold */ @Override - public void abovePIDThreshold_actionPerformed() + public void abovePIDThreshold_actionPerformed(boolean selected) { - boolean selected = abovePIDThreshold.isSelected(); modifyPID.setEnabled(selected); viewport.setAbovePIDThreshold(selected); + if (!selected) + { + viewport.getResidueShading().setThreshold(0, + viewport.isIgnoreGapsConsensus()); + } changeColour(viewport.getGlobalColourScheme()); if (selected) @@ -3577,149 +3536,11 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * DOCUMENT ME! */ @Override - public void userDefinedColour_actionPerformed(ActionEvent e) - { - if (e.getActionCommand().equals( - MessageManager.getString("action.user_defined"))) - { - new UserDefinedColours(alignPanel, null); - } - else - { - UserColourScheme udc = (UserColourScheme) UserDefinedColours - .getUserColourSchemes().get(e.getActionCommand()); - - changeColour(udc); - } - } - - public void updateUserColourMenu() - { - - Component[] menuItems = colourMenu.getMenuComponents(); - int iSize = menuItems.length; - for (int i = 0; i < iSize; i++) - { - if (menuItems[i].getName() != null - && menuItems[i].getName().equals("USER_DEFINED")) - { - colourMenu.remove(menuItems[i]); - iSize--; - } - } - if (jalview.gui.UserDefinedColours.getUserColourSchemes() != null) - { - java.util.Enumeration userColours = jalview.gui.UserDefinedColours - .getUserColourSchemes().keys(); - - while (userColours.hasMoreElements()) - { - final JRadioButtonMenuItem radioItem = new JRadioButtonMenuItem( - userColours.nextElement().toString()); - radioItem.setName("USER_DEFINED"); - radioItem.addMouseListener(new MouseAdapter() - { - @Override - public void mousePressed(MouseEvent evt) - { - if (evt.isPopupTrigger()) // Mac - { - offerRemoval(radioItem); - } - } - - @Override - public void mouseReleased(MouseEvent evt) - { - if (evt.isPopupTrigger()) // Windows - { - offerRemoval(radioItem); - } - } - - /** - * @param radioItem - */ - void offerRemoval(final JRadioButtonMenuItem radioItem) - { - radioItem.removeActionListener(radioItem.getActionListeners()[0]); - - int option = JvOptionPane.showInternalConfirmDialog( - jalview.gui.Desktop.desktop, MessageManager - .getString("label.remove_from_default_list"), - MessageManager - .getString("label.remove_user_defined_colour"), - JvOptionPane.YES_NO_OPTION); - if (option == JvOptionPane.YES_OPTION) - { - jalview.gui.UserDefinedColours - .removeColourFromDefaults(radioItem.getText()); - colourMenu.remove(radioItem); - } - else - { - radioItem.addActionListener(new ActionListener() - { - @Override - public void actionPerformed(ActionEvent evt) - { - userDefinedColour_actionPerformed(evt); - } - }); - } - } - }); - radioItem.addActionListener(new ActionListener() - { - @Override - public void actionPerformed(ActionEvent evt) - { - userDefinedColour_actionPerformed(evt); - } - }); - - colourMenu.insert(radioItem, 15); - colours.add(radioItem); - } - } - } - - /** - * DOCUMENT ME! - * - * @param e - * DOCUMENT ME! - */ - @Override - public void PIDColour_actionPerformed(ActionEvent e) - { - changeColour(new PIDColourScheme()); - } - - /** - * DOCUMENT ME! - * - * @param e - * DOCUMENT ME! - */ - @Override - public void BLOSUM62Colour_actionPerformed(ActionEvent e) - { - changeColour(new Blosum62ColourScheme()); - } - - /** - * DOCUMENT ME! - * - * @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); + .getAlignment().getSequenceAt(0)); addHistoryItem(new OrderCommand("Pairwise Sort", oldOrder, viewport.getAlignment())); alignPanel.paintAlignment(true); @@ -3813,35 +3634,6 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, } } - /** - * DOCUMENT ME! - * - * @param e - * DOCUMENT ME! - */ - @Override - public void PCAMenuItem_actionPerformed(ActionEvent e) - { - if (((viewport.getSelectionGroup() != null) - && (viewport.getSelectionGroup().getSize() < 4) && (viewport - .getSelectionGroup().getSize() > 0)) - || (viewport.getAlignment().getHeight() < 4)) - { - JvOptionPane - .showInternalMessageDialog( - this, - MessageManager - .getString("label.principal_component_analysis_must_take_least_four_input_sequences"), - MessageManager - .getString("label.sequence_selection_insufficient"), - JvOptionPane.WARNING_MESSAGE); - - return; - } - - new PCAPanel(alignPanel); - } - @Override public void autoCalculate_actionPerformed(ActionEvent e) { @@ -3866,83 +3658,24 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, } /** - * DOCUMENT ME! - * - * @param e - * DOCUMENT ME! - */ - @Override - public void averageDistanceTreeMenuItem_actionPerformed(ActionEvent e) - { - newTreePanel("AV", "PID", "Average distance tree using PID"); - } - - /** - * DOCUMENT ME! - * - * @param e - * DOCUMENT ME! - */ - @Override - public void neighbourTreeMenuItem_actionPerformed(ActionEvent e) - { - newTreePanel("NJ", "PID", "Neighbour joining tree using PID"); - } - - /** - * DOCUMENT ME! - * - * @param e - * DOCUMENT ME! - */ - @Override - protected void njTreeBlosumMenuItem_actionPerformed(ActionEvent e) - { - newTreePanel("NJ", "BL", "Neighbour joining tree using BLOSUM62"); - } - - /** - * DOCUMENT ME! - * - * @param e - * DOCUMENT ME! - */ - @Override - protected void avTreeBlosumMenuItem_actionPerformed(ActionEvent e) - { - newTreePanel("AV", "BL", "Average distance tree using BLOSUM62"); - } - - /** - * DOCUMENT ME! + * Constructs a tree panel and adds it to the desktop * * @param type - * DOCUMENT ME! - * @param pwType - * DOCUMENT ME! - * @param title - * DOCUMENT ME! + * tree type (NJ or AV) + * @param modelName + * name of score model used to compute the tree + * @param options + * parameters for the distance or similarity calculation */ - void newTreePanel(String type, String pwType, String title) + void newTreePanel(String type, String modelName, SimilarityParamsI options) { + String frameTitle = ""; TreePanel tp; + boolean onSelection = false; if (viewport.getSelectionGroup() != null && viewport.getSelectionGroup().getSize() > 0) { - if (viewport.getSelectionGroup().getSize() < 3) - { - JvOptionPane - .showMessageDialog( - Desktop.desktop, - MessageManager - .getString("label.you_need_more_two_sequences_selected_build_tree"), - MessageManager - .getString("label.not_enough_sequences"), - JvOptionPane.WARNING_MESSAGE); - return; - } - SequenceGroup sg = viewport.getSelectionGroup(); /* Decide if the selection is a column region */ @@ -3962,45 +3695,29 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, return; } } - - title = title + " on region"; - tp = new TreePanel(alignPanel, type, pwType); + onSelection = true; } else { - // are the visible sequences aligned? - if (!viewport.getAlignment().isAligned(false)) - { - JvOptionPane - .showMessageDialog( - Desktop.desktop, - MessageManager - .getString("label.sequences_must_be_aligned_before_creating_tree"), - MessageManager - .getString("label.sequences_not_aligned"), - JvOptionPane.WARNING_MESSAGE); - - return; - } - if (viewport.getAlignment().getHeight() < 2) { return; } - - tp = new TreePanel(alignPanel, type, pwType); } - title += " from "; + tp = new TreePanel(alignPanel, type, modelName, options); + frameTitle = tp.getPanelTitle() + (onSelection ? " on region" : ""); + + frameTitle += " from "; if (viewport.viewName != null) { - title += viewport.viewName + " of "; + frameTitle += viewport.viewName + " of "; } - title += this.title; + frameTitle += this.title; - Desktop.addInternalFrame(tp, title, 600, 500); + Desktop.addInternalFrame(tp, frameTitle, 600, 500); } /** @@ -4122,53 +3839,15 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * call. Listeners are added to remove the menu item when the treePanel is * closed, and adjust the tree leaf to sequence mapping when the alignment is * modified. - * - * @param treePanel - * Displayed tree window. - * @param title - * SortBy menu item title. */ @Override - public void buildTreeMenu() + public void buildTreeSortMenu() { - calculateTree.removeAll(); - // build the calculate menu - - for (final String type : new String[] { "NJ", "AV" }) - { - String treecalcnm = MessageManager.getString("label.tree_calc_" - + type.toLowerCase()); - for (final String pwtype : ResidueProperties.scoreMatrices.keySet()) - { - JMenuItem tm = new JMenuItem(); - ScoreModelI sm = ResidueProperties.scoreMatrices.get(pwtype); - if (sm.isDNA() == viewport.getAlignment().isNucleotide() - || 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, pwtype, title); - } - }); - calculateTree.add(tm); - } - - } - } sortByTreeMenu.removeAll(); List comps = PaintRefresher.components.get(viewport .getSequenceSetId()); - List treePanels = new ArrayList(); + List treePanels = new ArrayList<>(); for (Component comp : comps) { if (comp instanceof TreePanel) @@ -4314,13 +3993,13 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, if (value == JalviewFileChooser.APPROVE_OPTION) { - String choice = chooser.getSelectedFile().getPath(); - jalview.bin.Cache.setProperty("LAST_DIRECTORY", choice); - jalview.io.NewickFile fin = null; + String filePath = chooser.getSelectedFile().getPath(); + Cache.setProperty("LAST_DIRECTORY", filePath); + NewickFile fin = null; try { - fin = new NewickFile(choice, DataSourceType.FILE); - viewport.setCurrentTree(ShowNewickTree(fin, choice).getTree()); + fin = new NewickFile(filePath, DataSourceType.FILE); + viewport.setCurrentTree(showNewickTree(fin, filePath).getTree()); } catch (Exception ex) { JvOptionPane @@ -4342,31 +4021,19 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, } } - @Override - protected void tcoffeeColorScheme_actionPerformed(ActionEvent e) - { - changeColour(new TCoffeeColourScheme(alignPanel.getAlignment())); - } - - public TreePanel ShowNewickTree(NewickFile nf, String title) + public TreePanel showNewickTree(NewickFile nf, String treeTitle) { - return ShowNewickTree(nf, title, 600, 500, 4, 5); + return showNewickTree(nf, treeTitle, 600, 500, 4, 5); } - public TreePanel ShowNewickTree(NewickFile nf, String title, - AlignmentView input) - { - return ShowNewickTree(nf, title, input, 600, 500, 4, 5); - } - - public TreePanel ShowNewickTree(NewickFile nf, String title, int w, + public TreePanel showNewickTree(NewickFile nf, String treeTitle, int w, int h, int x, int y) { - return ShowNewickTree(nf, title, null, w, h, x, y); + return showNewickTree(nf, treeTitle, null, w, h, x, y); } /** - * Add a treeviewer for the tree extracted from a newick file object to the + * Add a treeviewer for the tree extracted from a Newick file object to the * current alignment view * * @param nf @@ -4385,7 +4052,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * position * @return TreePanel handle */ - public TreePanel ShowNewickTree(NewickFile nf, String title, + public TreePanel showNewickTree(NewickFile nf, String treeTitle, AlignmentView input, int w, int h, int x, int y) { TreePanel tp = null; @@ -4396,7 +4063,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, if (nf.getTree() != null) { - tp = new TreePanel(alignPanel, "FromFile", title, nf, input); + tp = new TreePanel(alignPanel, nf, treeTitle, input); tp.setSize(w, h); @@ -4405,7 +4072,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, tp.setLocation(x, y); } - Desktop.addInternalFrame(tp, title, w, h); + Desktop.addInternalFrame(tp, treeTitle, w, h); } } catch (Exception ex) { @@ -4440,7 +4107,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 " @@ -4455,7 +4122,7 @@ 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; /* @@ -4823,8 +4490,8 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, // Java's Transferable for native dnd evt.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE); Transferable t = evt.getTransferable(); - List files = new ArrayList(); - List protocols = new ArrayList(); + List files = new ArrayList<>(); + List protocols = new ArrayList<>(); try { @@ -4844,8 +4511,8 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, /** * Object[] { String,SequenceI} */ - ArrayList filesmatched = new ArrayList(); - ArrayList filesnotmatched = new ArrayList(); + ArrayList filesmatched = new ArrayList<>(); + ArrayList filesnotmatched = new ArrayList<>(); for (int i = 0; i < files.size(); i++) { String file = files.get(i).toString(); @@ -4978,16 +4645,22 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, } /** - * Attempt to load a "dropped" file or URL string: First by testing whether - * it's an Annotation file, then a JNet file, and finally a features file. If - * all are false then the user may have dropped an alignment file onto this - * AlignFrame. + * Attempt to load a "dropped" file or URL string, by testing in turn for + *
    + *
  • an Annotation file
  • + *
  • a JNet file
  • + *
  • a features file
  • + *
  • else try to interpret as an alignment file
  • + *
* * @param file * either a filename or a URL string. + * @throws InterruptedException + * @throws IOException */ public void loadJalviewDataFile(String file, DataSourceType sourceType, FileFormatI format, SequenceI assocSeq) + throws IOException, InterruptedException { try { @@ -5013,8 +4686,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, { if (tcf.annotateAlignment(viewport.getAlignment(), true)) { - tcoffeeColour.setEnabled(true); - tcoffeeColour.setSelected(true); + buildColourMenu(); changeColour(new TCoffeeColourScheme(viewport.getAlignment())); isAnnotation = true; statusBar @@ -5056,18 +4728,39 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, { format = new IdentifyFile().identify(file, sourceType); } - if (FileFormat.Jnet.equals(format)) + if (FileFormat.ScoreMatrix == format) + { + ScoreMatrixFile sm = new ScoreMatrixFile(new FileParse(file, + sourceType)); + sm.parse(); + // todo: i18n this message + statusBar + .setText(MessageManager.formatMessage( + "label.successfully_loaded_matrix", + sm.getMatrixName())); + } + else if (FileFormat.HMMER3.equals(format)) + { + HMMFile hmmFile = new HMMFile(new FileParse(file, sourceType)); + HiddenMarkovModel hmm = hmmFile.getHMM(); + SequenceI hmmSeq = hmm.initHMMSequence(this, 0); + getViewport().initInformation(hmmSeq); + getViewport().updateInformation(alignPanel); + + isAnnotation = true; + + } + else if (FileFormat.Jnet.equals(format)) { - JPredFile predictions = new JPredFile( - file, sourceType); + JPredFile predictions = new JPredFile(file, sourceType); new JnetAnnotationMaker(); JnetAnnotationMaker.add_annotation(predictions, viewport.getAlignment(), 0, false); SequenceI repseq = viewport.getAlignment().getSequenceAt(0); viewport.getAlignment().setSeqrep(repseq); - ColumnSelection cs = new ColumnSelection(); + HiddenColumns cs = new HiddenColumns(); cs.hideInsertionsFor(repseq); - viewport.setColumnSelection(cs); + viewport.getAlignment().setHiddenColumns(cs); isAnnotation = true; } // else if (IdentifyFile.FeaturesFile.equals(format)) @@ -5081,12 +4774,15 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, else { new FileLoader().LoadFile(viewport, file, sourceType, format); + if (autoAlignNewSequences && !recurring) + { + new Thread(new HMMAlignThread(this, false)).start(); + } } } } if (isAnnotation) { - alignPanel.adjustAnnotationHeight(); viewport.updateSequenceIdColours(); buildSortByAnnotationScoresMenu(); @@ -5129,6 +4825,28 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, } /* + * 'focus' any colour slider that is open to the selected viewport + */ + if (viewport.getConservationSelected()) + { + SliderPanel.setConservationSlider(alignPanel, + viewport.getResidueShading(), alignPanel.getViewName()); + } + else + { + SliderPanel.hideConservationSlider(); + } + if (viewport.getAbovePIDThreshold()) + { + SliderPanel.setPIDSliderSource(alignPanel, + viewport.getResidueShading(), alignPanel.getViewName()); + } + else + { + SliderPanel.hidePIDSlider(); + } + + /* * If there is a frame linked to this one in a SplitPane, switch it to the * same view tab index. No infinite recursion of calls should happen, since * tabSelectionChanged() should not get invoked on setting the selected @@ -5653,6 +5371,30 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, } @Override + protected void showInformationHistogram_actionPerformed(ActionEvent e) + { + viewport.setShowInformationHistogram( + showInformationHistogram.getState()); + alignPanel.updateAnnotation(applyAutoAnnotationSettings.getState()); + } + + @Override + protected void showHMMSequenceLogo_actionPerformed(ActionEvent e) + { + viewport.setShowHMMSequenceLogo(showHMMSequenceLogo.getState()); + alignPanel.updateAnnotation(applyAutoAnnotationSettings.getState()); + } + + @Override + protected void normaliseHMMSequenceLogo_actionPerformed(ActionEvent e) + { + showHMMSequenceLogo.setState(true); + viewport.setShowHMMSequenceLogo(true); + viewport.setNormaliseHMMSequenceLogo(normaliseSequenceLogo.getState()); + alignPanel.updateAnnotation(applyAutoAnnotationSettings.getState()); + } + + @Override protected void applyAutoAnnotationSettings_actionPerformed(ActionEvent e) { alignPanel.updateAnnotation(applyAutoAnnotationSettings.getState()); @@ -5802,7 +5544,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, { return; } - List cdnaSeqs = new ArrayList(); + List cdnaSeqs = new ArrayList<>(); for (SequenceI aaSeq : alignment.getSequences()) { for (AlignedCodonFrame acf : mappings) @@ -5828,7 +5570,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, } AlignmentI cdna = new Alignment(cdnaSeqs.toArray(new SequenceI[cdnaSeqs .size()])); - AlignFrame alignFrame = new AlignFrame(cdna, AlignFrame.DEFAULT_WIDTH, + GAlignFrame alignFrame = new AlignFrame(cdna, AlignFrame.DEFAULT_WIDTH, AlignFrame.DEFAULT_HEIGHT); cdna.alignAs(alignment); String newtitle = "cDNA " + MessageManager.getString("label.for") + " " @@ -5944,6 +5686,44 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, true, (actionEvent.getModifiers() & (ActionEvent.META_MASK | ActionEvent.CTRL_MASK)) != 0); } + + /** + * Rebuilds the Colour menu, including any user-defined colours which have + * been loaded either on startup or during the session + */ + public void buildColourMenu() + { + colourMenu.removeAll(); + + colourMenu.add(applyToAllGroups); + colourMenu.add(textColour); + colourMenu.addSeparator(); + + ColourMenuHelper.addMenuItems(colourMenu, this, + viewport.getAlignment(), false); + + colourMenu.addSeparator(); + colourMenu.add(conservationMenuItem); + colourMenu.add(modifyConservation); + colourMenu.add(abovePIDThreshold); + colourMenu.add(modifyPID); + colourMenu.add(annotationColour); + + ColourSchemeI colourScheme = viewport.getGlobalColourScheme(); + ColourMenuHelper.setColourSelected(colourMenu, colourScheme); + } + + /** + * Open a dialog (if not already open) that allows the user to select and + * calculate PCA or Tree analysis + */ + protected void openTreePcaDialog() + { + if (alignPanel.getCalculationDialog() == null) + { + new CalculationChooser(AlignFrame.this); + } + } } class PrintThread extends Thread @@ -5982,4 +5762,6 @@ class PrintThread extends Thread } } } + + }