X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fappletgui%2FAlignFrame.java;h=e01c4c917511544bc4bebd56c8146c86d26df156;hb=17e77c3f2949a0729322b4a8d907f3f34b6a9914;hp=48c08e2dab7217c73de0eb022098b8257cb2f3db;hpb=0e2054d29bc49351f000d478659dc3c4371b251c;p=jalview.git diff --git a/src/jalview/appletgui/AlignFrame.java b/src/jalview/appletgui/AlignFrame.java index 48c08e2..e01c4c9 100644 --- a/src/jalview/appletgui/AlignFrame.java +++ b/src/jalview/appletgui/AlignFrame.java @@ -1,37 +1,44 @@ /* - * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8.1) - * Copyright (C) 2014 The Jalview Authors + * Jalview - A Sequence Alignment Editor and Viewer (Version 2.9) + * Copyright (C) 2015 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.appletgui; import jalview.analysis.AlignmentSorter; -import jalview.analysis.Conservation; +import jalview.analysis.AnnotationSorter.SequenceAnnotationOrder; import jalview.api.AlignViewControllerGuiI; import jalview.api.AlignViewControllerI; +import jalview.api.AlignViewportI; +import jalview.api.FeatureRenderer; +import jalview.api.FeatureSettingsControllerI; import jalview.api.SequenceStructureBinding; import jalview.bin.JalviewLite; import jalview.commands.CommandI; import jalview.commands.EditCommand; +import jalview.commands.EditCommand.Action; import jalview.commands.OrderCommand; import jalview.commands.RemoveGapColCommand; import jalview.commands.RemoveGapsCommand; import jalview.commands.SlideSequencesCommand; import jalview.commands.TrimRegionCommand; import jalview.datamodel.Alignment; +import jalview.datamodel.AlignmentAnnotation; import jalview.datamodel.AlignmentI; import jalview.datamodel.AlignmentOrder; import jalview.datamodel.ColumnSelection; @@ -53,15 +60,16 @@ import jalview.schemes.NucleotideColourScheme; import jalview.schemes.PIDColourScheme; import jalview.schemes.PurinePyrimidineColourScheme; import jalview.schemes.RNAHelicesColourChooser; -import jalview.schemes.RNAInteractionColourScheme; -import jalview.schemes.ResidueProperties; import jalview.schemes.StrandColourScheme; import jalview.schemes.TCoffeeColourScheme; import jalview.schemes.TaylorColourScheme; import jalview.schemes.TurnColourScheme; import jalview.schemes.ZappoColourScheme; import jalview.structure.StructureSelectionManager; +import jalview.structures.models.AAStructureBindingModel; +import jalview.util.MappingUtils; import jalview.util.MessageManager; +import jalview.viewmodel.AlignmentViewport; import java.awt.BorderLayout; import java.awt.Canvas; @@ -88,29 +96,82 @@ import java.awt.event.WindowEvent; import java.io.IOException; import java.net.URL; import java.net.URLEncoder; -import java.util.Enumeration; +import java.util.Arrays; +import java.util.Deque; +import java.util.HashMap; import java.util.Hashtable; import java.util.List; +import java.util.Map; import java.util.StringTokenizer; import java.util.Vector; +import org.jmol.viewer.Viewer; + public class AlignFrame extends EmbmenuFrame implements ActionListener, ItemListener, KeyListener, AlignViewControllerGuiI { public AlignViewControllerI avc; + public AlignmentPanel alignPanel; public AlignViewport viewport; - int DEFAULT_WIDTH = 700; + // width and height may be overridden by applet parameters + int frameWidth = 700; - int DEFAULT_HEIGHT = 500; + int frameHeight = 500; String jalviewServletURL; - public AlignFrame(AlignmentI al, jalview.bin.JalviewLite applet, + /* + * Flag for showing autocalculated consensus above or below other consensus + * rows + */ + private boolean showAutoCalculatedAbove; + + private SequenceAnnotationOrder annotationSortOrder; + + /** + * Constructor that creates the frame and adds it to the display. + * + * @param al + * @param applet + * @param title + * @param embedded + */ + public AlignFrame(AlignmentI al, JalviewLite applet, String title, + boolean embedded) + { + this(al, applet, title, embedded, true); + } + + /** + * Constructor that optionally allows the frame to be displayed or only + * created. + * + * @param al + * @param applet + * @param title + * @param embedded + * @param addToDisplay + */ + public AlignFrame(AlignmentI al, JalviewLite applet, String title, + boolean embedded, boolean addToDisplay) + { + this(al, null, null, applet, title, embedded, addToDisplay); + } + + public AlignFrame(AlignmentI al, SequenceI[] hiddenSeqs, + ColumnSelection columnSelection, JalviewLite applet, String title, boolean embedded) { + this(al, hiddenSeqs, columnSelection, applet, title, embedded, true); + } + + public AlignFrame(AlignmentI al, SequenceI[] hiddenSeqs, + ColumnSelection columnSelection, JalviewLite applet, + String title, boolean embedded, boolean addToDisplay) + { if (applet != null) { jalviewServletURL = applet.getParameter("APPLICATION_URL"); @@ -133,35 +194,48 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, if (param != null) { int width = Integer.parseInt(param); - DEFAULT_WIDTH = width; + frameWidth = width; } param = applet.getParameter("windowHeight"); if (param != null) { int height = Integer.parseInt(param); - DEFAULT_HEIGHT = height; + frameHeight = height; } } catch (Exception ex) { } } viewport = new AlignViewport(al, applet); + + if (hiddenSeqs != null && hiddenSeqs.length > 0) + { + viewport.hideSequence(hiddenSeqs); + } + if (columnSelection != null) + { + viewport.setColumnSelection(columnSelection); + } + alignPanel = new AlignmentPanel(this, viewport); - avc = new jalview.controller.AlignViewController(this, viewport, alignPanel); + avc = new jalview.controller.AlignViewController(this, viewport, + alignPanel); viewport.updateConservation(alignPanel); viewport.updateConsensus(alignPanel); - annotationPanelMenuItem.setState(viewport.showAnnotation); displayNonconservedMenuItem.setState(viewport.getShowUnconserved()); - followMouseOverFlag.setState(viewport.getFollowHighlight()); + followMouseOverFlag.setState(viewport.isFollowHighlight()); showGroupConsensus.setState(viewport.isShowGroupConsensus()); showGroupConservation.setState(viewport.isShowGroupConservation()); showConsensusHistogram.setState(viewport.isShowConsensusHistogram()); showSequenceLogo.setState(viewport.isShowSequenceLogo()); normSequenceLogo.setState(viewport.isNormaliseSequenceLogo()); applyToAllGroups.setState(viewport.getColourAppliesToAllGroups()); - - seqLimits.setState(viewport.showJVSuffix); + annotationPanelMenuItem.setState(viewport.isShowAnnotation()); + showAlignmentAnnotations.setState(viewport.isShowAnnotation()); + showSequenceAnnotations.setState(viewport.isShowAnnotation()); + + seqLimits.setState(viewport.getShowJVSuffix()); if (applet != null) { @@ -227,8 +301,19 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, alignPanel.annotationPanelHolder.addKeyListener(this); alignPanel.annotationSpaceFillerHolder.addKeyListener(this); alignPanel.alabels.addKeyListener(this); - createAlignFrameWindow(embedded, title); + if (addToDisplay) + { + addToDisplay(embedded); + } + } + + /** + * @param embedded + */ + public void addToDisplay(boolean embedded) + { + createAlignFrameWindow(embedded); validate(); alignPanel.adjustAnnotationHeight(); alignPanel.paintAlignment(true); @@ -280,11 +365,11 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, boolean featuresFile = false; try { - featuresFile = new jalview.io.FeaturesFile(file, type) - .parse(viewport.getAlignment(), alignPanel.seqPanel.seqCanvas - .getFeatureRenderer().featureColours, featureLinks, - true, viewport.applet.getDefaultParameter( - "relaxedidmatch", false)); + featuresFile = new jalview.io.FeaturesFile(file, type).parse(viewport + .getAlignment(), alignPanel.seqPanel.seqCanvas + .getFeatureRenderer().getFeatureColours(), featureLinks, + true, viewport.applet.getDefaultParameter("relaxedidmatch", + false)); } catch (Exception ex) { ex.printStackTrace(); @@ -298,15 +383,21 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, } if (autoenabledisplay) { - viewport.showSequenceFeatures = true; + viewport.setShowSequenceFeatures(true); sequenceFeatures.setState(true); } + if (alignPanel.seqPanel.seqCanvas.fr != null) + { + // update the min/max ranges where necessary + alignPanel.seqPanel.seqCanvas.fr.findAllFeatures(true); + } if (viewport.featureSettings != null) { viewport.featureSettings.refreshTable(); } alignPanel.paintAlignment(true); - statusBar.setText(MessageManager.getString("label.successfully_added_features_alignment")); + statusBar.setText(MessageManager + .getString("label.successfully_added_features_alignment")); } return featuresFile; } @@ -319,7 +410,9 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, .getKeyCode() >= KeyEvent.VK_NUMPAD0 && evt .getKeyCode() <= KeyEvent.VK_NUMPAD9)) && Character.isDigit(evt.getKeyChar())) + { alignPanel.seqPanel.numberPressed(evt.getKeyChar()); + } switch (evt.getKeyCode()) { @@ -380,16 +473,24 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, case KeyEvent.VK_LEFT: if (evt.isAltDown() || !viewport.cursorMode) + { slideSequences(false, alignPanel.seqPanel.getKeyboardNo1()); + } else + { alignPanel.seqPanel.moveCursor(-1, 0); + } break; case KeyEvent.VK_RIGHT: if (evt.isAltDown() || !viewport.cursorMode) + { slideSequences(true, alignPanel.seqPanel.getKeyboardNo1()); + } else + { alignPanel.seqPanel.moveCursor(1, 0); + } break; case KeyEvent.VK_SPACE: @@ -450,7 +551,9 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, 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; @@ -474,7 +577,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, } case KeyEvent.VK_PAGE_UP: - if (viewport.wrapAlignment) + if (viewport.getWrapAlignment()) { alignPanel.scrollUp(true); } @@ -486,7 +589,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, break; case KeyEvent.VK_PAGE_DOWN: - if (viewport.wrapAlignment) + if (viewport.getWrapAlignment()) { alignPanel.scrollUp(false); } @@ -565,7 +668,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, } } break; - + case KeyEvent.VK_U: if (evt.isControlDown()) { @@ -666,114 +769,193 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, @Override public void itemStateChanged(ItemEvent evt) { - if (evt.getSource() == displayNonconservedMenuItem) + final Object source = evt.getSource(); + if (source == displayNonconservedMenuItem) { displayNonconservedMenuItem_actionPerformed(); } - else if (evt.getSource() == colourTextMenuItem) + else if (source == colourTextMenuItem) { colourTextMenuItem_actionPerformed(); } - else if (evt.getSource() == wrapMenuItem) + else if (source == wrapMenuItem) { wrapMenuItem_actionPerformed(); } - else if (evt.getSource() == scaleAbove) + else if (source == scaleAbove) { viewport.setScaleAboveWrapped(scaleAbove.getState()); } - else if (evt.getSource() == scaleLeft) + else if (source == scaleLeft) { viewport.setScaleLeftWrapped(scaleLeft.getState()); } - else if (evt.getSource() == scaleRight) + else if (source == scaleRight) { viewport.setScaleRightWrapped(scaleRight.getState()); } - else if (evt.getSource() == seqLimits) + else if (source == seqLimits) { seqLimits_itemStateChanged(); } - else if (evt.getSource() == viewBoxesMenuItem) + else if (source == viewBoxesMenuItem) { viewport.setShowBoxes(viewBoxesMenuItem.getState()); } - else if (evt.getSource() == viewTextMenuItem) + else if (source == viewTextMenuItem) { viewport.setShowText(viewTextMenuItem.getState()); } - else if (evt.getSource() == renderGapsMenuItem) + else if (source == renderGapsMenuItem) { viewport.setRenderGaps(renderGapsMenuItem.getState()); } - else if (evt.getSource() == annotationPanelMenuItem) + else if (source == annotationPanelMenuItem) { viewport.setShowAnnotation(annotationPanelMenuItem.getState()); alignPanel.setAnnotationVisible(annotationPanelMenuItem.getState()); } - else if (evt.getSource() == sequenceFeatures) + else if (source == sequenceFeatures) { - viewport.showSequenceFeatures(sequenceFeatures.getState()); + viewport.setShowSequenceFeatures(sequenceFeatures.getState()); alignPanel.seqPanel.seqCanvas.repaint(); } - else if (evt.getSource() == conservationMenuItem) + else if (source == showAlignmentAnnotations) + { + setAnnotationsVisibility(); + } + else if (source == showSequenceAnnotations) + { + setAnnotationsVisibility(); + } + else if (source == sortAnnBySequence) + { + boolean newState = sortAnnBySequence.getState(); + sortAnnByLabel.setState(false); + setAnnotationSortOrder(newState ? SequenceAnnotationOrder.SEQUENCE_AND_LABEL + : SequenceAnnotationOrder.NONE); + setViewportAnnotationOrder(); + } + else if (source == sortAnnByLabel) + { + boolean newState = sortAnnByLabel.getState(); + sortAnnBySequence.setState(false); + setAnnotationSortOrder(newState ? SequenceAnnotationOrder.LABEL_AND_SEQUENCE + : SequenceAnnotationOrder.NONE); + setViewportAnnotationOrder(); + } + else if (source == showAutoFirst) + { + showAutoLast.setState(!showAutoFirst.getState()); + setShowAutoCalculatedAbove(showAutoFirst.getState()); + setViewportAnnotationOrder(); + } + else if (source == showAutoLast) + { + showAutoFirst.setState(!showAutoLast.getState()); + setShowAutoCalculatedAbove(showAutoFirst.getState()); + setViewportAnnotationOrder(); + } + else if (source == conservationMenuItem) { conservationMenuItem_actionPerformed(); } - else if (evt.getSource() == abovePIDThreshold) + else if (source == abovePIDThreshold) { abovePIDThreshold_actionPerformed(); } - else if (evt.getSource() == applyToAllGroups) + else if (source == applyToAllGroups) { viewport.setColourAppliesToAllGroups(applyToAllGroups.getState()); } - else if (evt.getSource() == autoCalculate) + else if (source == autoCalculate) { viewport.autoCalculateConsensus = autoCalculate.getState(); } - else if (evt.getSource() == sortByTree) + else if (source == sortByTree) { viewport.sortByTree = sortByTree.getState(); } - else if (evt.getSource() == this.centreColumnLabelFlag) + else if (source == this.centreColumnLabelFlag) { centreColumnLabelFlag_stateChanged(); } - else if (evt.getSource() == this.followMouseOverFlag) + else if (source == this.followMouseOverFlag) { mouseOverFlag_stateChanged(); } - else if (evt.getSource() == showGroupConsensus) + else if (source == showGroupConsensus) { showGroupConsensus_actionPerformed(); } - else if (evt.getSource() == showGroupConservation) + else if (source == showGroupConservation) { showGroupConservation_actionPerformed(); } - else if (evt.getSource() == showSequenceLogo) + else if (source == showSequenceLogo) { showSequenceLogo_actionPerformed(); } - else if (evt.getSource() == normSequenceLogo) + else if (source == normSequenceLogo) { normSequenceLogo_actionPerformed(); } - else if (evt.getSource() == showConsensusHistogram) + else if (source == showConsensusHistogram) { showConsensusHistogram_actionPerformed(); } - else if (evt.getSource() == applyAutoAnnotationSettings) + else if (source == applyAutoAnnotationSettings) { applyAutoAnnotationSettings_actionPerformed(); } alignPanel.paintAlignment(true); } + /** + * Set the visibility state of sequence-related and/or alignment-related + * annotations depending on checkbox selections. Repaint after calling. + * + * @param visible + */ + private void setAnnotationsVisibility() + { + boolean showForAlignment = showAlignmentAnnotations.getState(); + boolean showForSequences = showSequenceAnnotations.getState(); + for (AlignmentAnnotation aa : alignPanel.getAlignment() + .getAlignmentAnnotation()) + { + boolean visible = (aa.sequenceRef == null ? showForAlignment + : showForSequences); + aa.visible = visible; + } + alignPanel.validateAnnotationDimensions(true); + validate(); + repaint(); + } + + private void setAnnotationSortOrder(SequenceAnnotationOrder order) + { + this.annotationSortOrder = order; + } + + /** + * Set flags on the viewport that control annotation ordering + */ + private void setViewportAnnotationOrder() + { + this.alignPanel.av.setSortAnnotationsBy(this.annotationSortOrder); + this.alignPanel.av + .setShowAutocalculatedAbove(this.showAutoCalculatedAbove); + } + + private void setShowAutoCalculatedAbove(boolean showAbove) + { + this.showAutoCalculatedAbove = showAbove; + } + private void mouseOverFlag_stateChanged() { - viewport.followHighlight = followMouseOverFlag.getState(); + viewport.setFollowHighlight(followMouseOverFlag.getState()); // TODO: could kick the scrollTo mechanism to reset view for current // searchresults. } @@ -787,6 +969,8 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, @Override public void actionPerformed(ActionEvent evt) { + viewport.applet.currentAlignFrame = this; + Object source = evt.getSource(); if (source == inputText) @@ -994,8 +1178,9 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, cap.setText(contents.toString()); Frame frame = new Frame(); frame.add(cap); - jalview.bin.JalviewLite.addFrame(frame, MessageManager.formatMessage("label.alignment_properties", new String[]{getTitle()}), - 400, 250); + jalview.bin.JalviewLite.addFrame(frame, MessageManager.formatMessage( + "label.alignment_properties", new String[] { getTitle() }), + 400, 250); } else if (source == overviewMenuItem) { @@ -1046,10 +1231,10 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, { changeColour(new PurinePyrimidineColourScheme()); } - else if (source == RNAInteractionColour) - { - changeColour(new RNAInteractionColourScheme()); - } + // else if (source == RNAInteractionColour) + // { + // changeColour(new RNAInteractionColourScheme()); + // } else if (source == RNAHelixColour) { new RNAHelicesColourChooser(viewport, alignPanel); @@ -1082,6 +1267,10 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, { new AnnotationColourChooser(viewport, alignPanel); } + else if (source == annotationColumnSelection) + { + new AnnotationColumnChooser(viewport, alignPanel); + } else if (source == sortPairwiseMenuItem) { sortPairwiseMenuItem_actionPerformed(); @@ -1142,7 +1331,8 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, CutAndPasteTransfer cap = new CutAndPasteTransfer(true, this); Frame frame = new Frame(); frame.add(cap); - jalview.bin.JalviewLite.addFrame(frame, MessageManager.getString("label.input_cut_paste"), 500, 500); + jalview.bin.JalviewLite.addFrame(frame, + MessageManager.getString("label.input_cut_paste"), 500, 500); } protected void outputText_actionPerformed(ActionEvent e) @@ -1150,58 +1340,54 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, CutAndPasteTransfer cap = new CutAndPasteTransfer(true, this); Frame frame = new Frame(); frame.add(cap); - jalview.bin.JalviewLite.addFrame(frame, - MessageManager.formatMessage("label.alignment_output_command", new String[]{e.getActionCommand()}),600, 500); - cap.setText(new AppletFormatAdapter().formatSequences( + jalview.bin.JalviewLite.addFrame(frame, MessageManager.formatMessage( + "label.alignment_output_command", + new Object[] { e.getActionCommand() }), 600, 500); + + FeatureRenderer fr = this.alignPanel.cloneFeatureRenderer(); + cap.setText(new AppletFormatAdapter(alignPanel).formatSequences( e.getActionCommand(), viewport.getAlignment(), - viewport.showJVSuffix)); + viewport.getShowJVSuffix())); } public void loadAnnotations() { CutAndPasteTransfer cap = new CutAndPasteTransfer(true, this); - cap.setText(MessageManager.getString("label.paste_features_annotations_Tcoffee_here")); + cap.setText(MessageManager + .getString("label.paste_features_annotations_Tcoffee_here")); cap.setAnnotationImport(); Frame frame = new Frame(); frame.add(cap); - jalview.bin.JalviewLite.addFrame(frame, MessageManager.getString("action.paste_annotations"), 400, 300); + jalview.bin.JalviewLite.addFrame(frame, + MessageManager.getString("action.paste_annotations"), 400, 300); } public String outputAnnotations(boolean displayTextbox) { - String annotation = new AnnotationFile().printAnnotations( - viewport.showAnnotation ? viewport.getAlignment() - .getAlignmentAnnotation() : null, viewport - .getAlignment().getGroups(), ((Alignment) viewport - .getAlignment()).alignmentProperties); + String annotation = new AnnotationFile() + .printAnnotationsForView(viewport); if (displayTextbox) { CutAndPasteTransfer cap = new CutAndPasteTransfer(false, this); Frame frame = new Frame(); frame.add(cap); - jalview.bin.JalviewLite.addFrame(frame, MessageManager.getString("label.annotations"), 600, 500); + jalview.bin.JalviewLite.addFrame(frame, + MessageManager.getString("label.annotations"), 600, 500); cap.setText(annotation); } return annotation; } - private Hashtable getDisplayedFeatureCols() + private Map getDisplayedFeatureCols() { if (alignPanel.getFeatureRenderer() != null - && viewport.featuresDisplayed != null) + && viewport.getFeaturesDisplayed() != null) { - FeatureRenderer fr = alignPanel.getFeatureRenderer(); - Hashtable fcols = new Hashtable(); - Enumeration en = viewport.featuresDisplayed.keys(); - while (en.hasMoreElements()) - { - Object col = en.nextElement(); - fcols.put(col, fr.featureColours.get(col)); - } - return fcols; + return alignPanel.getFeatureRenderer().getDisplayedFeatureCols(); + } return null; } @@ -1237,13 +1423,16 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, } Frame frame = new Frame(); frame.add(cap); - jalview.bin.JalviewLite.addFrame(frame, MessageManager.getString("label.features"), 600, 500); + jalview.bin.JalviewLite.addFrame(frame, + MessageManager.getString("label.features"), 600, 500); cap.setText(features); } else { if (features == null) + { features = ""; + } } return features; @@ -1253,7 +1442,12 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, { StringBuffer url = new StringBuffer(jalviewServletURL); - url.append("?open=" + // allow servlet parameters to be passed in applet parameter + String firstSep = url.lastIndexOf("?") > url.lastIndexOf("/") ? "&" + : "?"; + url.append(firstSep); + + url.append("open=" + appendProtocol(viewport.applet.getParameter("file"))); if (viewport.applet.getParameter("features") != null) @@ -1371,11 +1565,13 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, void updateEditMenuBar() { - if (viewport.historyList.size() > 0) + if (viewport.getHistoryList().size() > 0) { undoMenuItem.setEnabled(true); - CommandI command = (CommandI) viewport.historyList.peek(); - undoMenuItem.setLabel(MessageManager.formatMessage("label.undo_command", new String[]{command.getDescription()})); + CommandI command = viewport.getHistoryList().peek(); + undoMenuItem.setLabel(MessageManager.formatMessage( + "label.undo_command", + new Object[] { command.getDescription() })); } else { @@ -1383,12 +1579,14 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, undoMenuItem.setLabel(MessageManager.getString("action.undo")); } - if (viewport.redoList.size() > 0) + if (viewport.getRedoList().size() > 0) { redoMenuItem.setEnabled(true); - CommandI command = (CommandI) viewport.redoList.peek(); - redoMenuItem.setLabel(MessageManager.formatMessage("label.redo_command", new String[]{command.getDescription()})); + CommandI command = viewport.getRedoList().peek(); + redoMenuItem.setLabel(MessageManager.formatMessage( + "label.redo_command", + new Object[] { command.getDescription() })); } else { @@ -1400,12 +1598,13 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, /** * TODO: JAL-1104 */ + @Override public void addHistoryItem(CommandI command) { if (command.getSize() > 0) { - viewport.historyList.push(command); - viewport.redoList.removeAllElements(); + viewport.addToHistoryList(command); + viewport.clearRedoList(); updateEditMenuBar(); viewport.updateHiddenColumns(); } @@ -1419,16 +1618,16 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, */ protected void undoMenuItem_actionPerformed() { - if (viewport.historyList.size() < 1) + if (viewport.getHistoryList().isEmpty()) { return; } - CommandI command = (CommandI) viewport.historyList.pop(); - viewport.redoList.push(command); + CommandI command = viewport.getHistoryList().pop(); + viewport.addToRedoList(command); command.undoCommand(null); - AlignViewport originalSource = getOriginatingSource(command); + AlignmentViewport originalSource = getOriginatingSource(command); // JBPNote Test if (originalSource != viewport) { @@ -1451,16 +1650,16 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, */ protected void redoMenuItem_actionPerformed() { - if (viewport.redoList.size() < 1) + if (viewport.getRedoList().isEmpty()) { return; } - CommandI command = (CommandI) viewport.redoList.pop(); - viewport.historyList.push(command); + CommandI command = viewport.getRedoList().pop(); + viewport.addToHistoryList(command); command.doCommand(null); - AlignViewport originalSource = getOriginatingSource(command); + AlignmentViewport originalSource = getOriginatingSource(command); // JBPNote Test if (originalSource != viewport) { @@ -1476,9 +1675,9 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, .getAlignment().getSequences()); } - AlignViewport getOriginatingSource(CommandI command) + AlignmentViewport getOriginatingSource(CommandI command) { - AlignViewport originalSource = null; + AlignmentViewport originalSource = null; // For sequence removal and addition, we need to fire // the property change event FROM the viewport where the // original alignment was altered @@ -1517,6 +1716,12 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, return originalSource; } + /** + * Move the currently selected sequences up or down one position in the + * alignment + * + * @param up + */ public void moveSelectedSequences(boolean up) { SequenceGroup sg = viewport.getSelectionGroup(); @@ -1527,6 +1732,21 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, viewport.getAlignment().moveSelectedSequencesByOne(sg, up ? null : viewport.getHiddenRepSequences(), up); alignPanel.paintAlignment(true); + + /* + * Also move cDNA/protein complement sequences + */ + AlignViewportI complement = viewport.getCodingComplement(); + if (complement != null) + { + SequenceGroup mappedSelection = MappingUtils.mapSequenceGroup(sg, + viewport, complement); + complement.getAlignment().moveSelectedSequencesByOne(mappedSelection, + up ? null : complement.getHiddenRepSequences(), up); + // TODO need to trigger a repaint of the complementary panel - how? + // would prefer to handle in SplitFrame but it is not overriding key + // listener chiz + } } synchronized void slideSequences(boolean right, int size) @@ -1555,7 +1775,9 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, for (int i = 0; i < viewport.getAlignment().getHeight(); i++) { if (!sg.contains(viewport.getAlignment().getSequenceAt(i))) + { invertGroup.addElement(viewport.getAlignment().getSequenceAt(i)); + } } SequenceI[] seqs1 = sg.toArray(new SequenceI[sg.size()]); @@ -1563,30 +1785,44 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, SequenceI[] seqs2 = invertGroup.toArray(new SequenceI[invertGroup .size()]); for (int i = 0; i < invertGroup.size(); i++) + { seqs2[i] = invertGroup.elementAt(i); + } SlideSequencesCommand ssc; if (right) + { ssc = new SlideSequencesCommand("Slide Sequences", seqs2, seqs1, size, viewport.getGapCharacter()); + } else + { ssc = new SlideSequencesCommand("Slide Sequences", seqs1, seqs2, size, viewport.getGapCharacter()); + } int groupAdjustment = 0; if (ssc.getGapsInsertedBegin() && right) { if (viewport.cursorMode) + { alignPanel.seqPanel.moveCursor(size, 0); + } else + { groupAdjustment = size; + } } else if (!ssc.getGapsInsertedBegin() && !right) { if (viewport.cursorMode) + { alignPanel.seqPanel.moveCursor(-size, 0); + } else + { groupAdjustment = -size; + } } if (groupAdjustment != 0) @@ -1598,16 +1834,19 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, } boolean appendHistoryItem = false; - if (viewport.historyList != null && viewport.historyList.size() > 0 - && viewport.historyList.peek() instanceof SlideSequencesCommand) + Deque historyList = viewport.getHistoryList(); + if (historyList != null && historyList.size() > 0 + && historyList.peek() instanceof SlideSequencesCommand) { appendHistoryItem = ssc - .appendSlideCommand((SlideSequencesCommand) viewport.historyList + .appendSlideCommand((SlideSequencesCommand) historyList .peek()); } if (!appendHistoryItem) + { addHistoryItem(ssc); + } repaint(); } @@ -1625,12 +1864,12 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, SequenceGroup sg = viewport.getSelectionGroup(); copiedSequences = new StringBuffer(); - Hashtable orderedSeqs = new Hashtable(); + Map orderedSeqs = new HashMap(); for (int i = 0; i < sg.getSize(); i++) { SequenceI seq = sg.getSequenceAt(i); int index = viewport.getAlignment().findIndex(seq); - orderedSeqs.put(index + "", seq); + orderedSeqs.put(index, seq); } int index = 0, startRes, endRes; @@ -1640,14 +1879,10 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, { copiedHiddenColumns = new Vector(); int hiddenOffset = viewport.getSelectionGroup().getStartRes(); - for (int i = 0; i < viewport.getColumnSelection().getHiddenColumns() - .size(); i++) + for (int[] region : viewport.getColumnSelection().getHiddenColumns()) { - int[] region = (int[]) viewport.getColumnSelection() - .getHiddenColumns().elementAt(i); - - copiedHiddenColumns.addElement(new int[] - { region[0] - hiddenOffset, region[1] - hiddenOffset }); + copiedHiddenColumns.addElement(new int[] { + region[0] - hiddenOffset, region[1] - hiddenOffset }); } } else @@ -1661,11 +1896,10 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, while (seq == null) { - if (orderedSeqs.containsKey(index + "")) + if (orderedSeqs.containsKey(index)) { - seq = (SequenceI) orderedSeqs.get(index + ""); + seq = orderedSeqs.get(index); index++; - break; } else @@ -1745,14 +1979,17 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, if (newAlignment) { - String newtitle = new String("Copied sequences"); - if (getTitle().startsWith("Copied sequences")) + String newtitle = MessageManager + .getString("label.copied_sequences"); + if (getTitle().startsWith( + MessageManager.getString("label.copied_sequences"))) { newtitle = getTitle(); } else { - newtitle = newtitle.concat("- from " + getTitle()); + newtitle = newtitle.concat(MessageManager.formatMessage( + "label.from_msname", new String[] { getTitle() })); } AlignFrame af = new AlignFrame(new Alignment(newSeqs), viewport.applet, newtitle, false); @@ -1765,8 +2002,8 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, } } - jalview.bin.JalviewLite.addFrame(af, newtitle, DEFAULT_WIDTH, - DEFAULT_HEIGHT); + jalview.bin.JalviewLite.addFrame(af, newtitle, frameWidth, + frameHeight); } else { @@ -1787,7 +2024,8 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, } // !newAlignment - addHistoryItem(new EditCommand("Add sequences", EditCommand.PASTE, + addHistoryItem(new EditCommand( + MessageManager.getString("label.add_sequences"), Action.PASTE, seqs, 0, viewport.getAlignment().getWidth(), viewport.getAlignment())); @@ -1837,8 +2075,9 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, /* * //ADD HISTORY ITEM */ - addHistoryItem(new EditCommand("Cut Sequences", EditCommand.CUT, cut, - sg.getStartRes(), sg.getEndRes() - sg.getStartRes() + 1, + addHistoryItem(new EditCommand( + MessageManager.getString("label.cut_sequences"), Action.CUT, + cut, sg.getStartRes(), sg.getEndRes() - sg.getStartRes() + 1, viewport.getAlignment())); viewport.setSelectionGroup(null); @@ -1915,7 +2154,8 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, protected void makeGrpsFromSelection_actionPerformed() { - if (avc.makeGroupsFromSelection()) { + if (avc.makeGroupsFromSelection()) + { PaintRefresher.Refresh(this, viewport.getSequenceSetId()); alignPanel.updateAnnotation(); alignPanel.paintAlignment(true); @@ -1926,6 +2166,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, { avc.createGroup(); } + protected void unGroup_actionPerformed() { if (avc.unGroup()) @@ -1933,6 +2174,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, alignPanel.alignmentChanged(); } } + protected void deleteGroups_actionPerformed() { if (avc.deleteGroups()) @@ -2036,7 +2278,10 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, 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); for (SequenceGroup sg : viewport.getAlignment().getGroups()) @@ -2076,7 +2321,10 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, 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 @@ -2200,8 +2448,8 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, newaf.setTitle(title.toString()); - newaf.viewport.historyList = viewport.historyList; - newaf.viewport.redoList = viewport.redoList; + newaf.viewport.setHistoryList(viewport.getHistoryList()); + newaf.viewport.setRedoList(viewport.getRedoList()); return newaf; } @@ -2215,7 +2463,9 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, if (alignPanel != null && (fr = alignPanel.getFeatureRenderer()) != null) { - return fr.getGroups(); + List gps = fr.getFeatureGroups(); + String[] _gps = gps.toArray(new String[gps.size()]); + return _gps; } return null; } @@ -2233,7 +2483,9 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, if (alignPanel != null && (fr = alignPanel.getFeatureRenderer()) != null) { - return fr.getGroups(visible); + List gps = fr.getGroups(visible); + String[] _gps = gps.toArray(new String[gps.size()]); + return _gps; } return null; } @@ -2250,11 +2502,12 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, { FeatureRenderer fr = null; this.sequenceFeatures.setState(true); - viewport.showSequenceFeatures(true); + viewport.setShowSequenceFeatures(true); if (alignPanel != null && (fr = alignPanel.getFeatureRenderer()) != null) { - fr.setGroupState(groups, state); + + fr.setGroupVisibility(Arrays.asList(groups), state); alignPanel.seqPanel.seqCanvas.repaint(); if (alignPanel.overviewPanel != null) { @@ -2278,7 +2531,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, protected void displayNonconservedMenuItem_actionPerformed() { - viewport.setShowunconserved(displayNonconservedMenuItem.getState()); + viewport.setShowUnconserved(displayNonconservedMenuItem.getState()); alignPanel.paintAlignment(true); } @@ -2303,7 +2556,8 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, OverviewPanel overview = new OverviewPanel(alignPanel); frame.add(overview); // +50 must allow for applet frame window - jalview.bin.JalviewLite.addFrame(frame, MessageManager.formatMessage("label.overview_params", new String[]{this.getTitle()}), + jalview.bin.JalviewLite.addFrame(frame, MessageManager.formatMessage( + "label.overview_params", new String[] { this.getTitle() }), overview.getPreferredSize().width, overview.getPreferredSize().height + 50); @@ -2325,17 +2579,16 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, } - void changeColour(ColourSchemeI cs) + public void changeColour(ColourSchemeI cs) { - int threshold = 0; if (cs != null) { if (viewport.getAbovePIDThreshold()) { - viewport.setThreshold(SliderPanel.setPIDSliderSource(alignPanel, cs, - "Background")); - } + viewport.setThreshold(SliderPanel.setPIDSliderSource(alignPanel, + cs, "Background")); + } if (viewport.getConservationSelected()) { @@ -2350,15 +2603,6 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, } viewport.setGlobalColourScheme(cs); - if (alignPanel.getOverviewPanel() != null) - { - alignPanel.getOverviewPanel().updateOverviewImage(); - } - - jalview.structure.StructureSelectionManager - .getStructureSelectionManager(viewport.applet) - .sequenceColoursChanged(alignPanel); - alignPanel.paintAlignment(true); } @@ -2459,7 +2703,8 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, { Frame frame = new Frame(); frame.add(new PairwiseAlignPanel(alignPanel)); - jalview.bin.JalviewLite.addFrame(frame, MessageManager.getString("action.pairwise_alignment"), 600, + jalview.bin.JalviewLite.addFrame(frame, + MessageManager.getString("action.pairwise_alignment"), 600, 500); } } @@ -2561,12 +2806,14 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, cap.setTreeImport(); Frame frame = new Frame(); frame.add(cap); - jalview.bin.JalviewLite.addFrame(frame, MessageManager.getString("label.paste_newick_file"), 400, 300); + jalview.bin.JalviewLite.addFrame(frame, + MessageManager.getString("label.paste_newick_file"), 400, 300); } public void loadTree(jalview.io.NewickFile tree, String treeFile) { - TreePanel tp = new TreePanel(alignPanel, treeFile, MessageManager.getString("label.load_tree_from_file"), tree); + TreePanel tp = new TreePanel(alignPanel, treeFile, + MessageManager.getString("label.load_tree_from_file"), tree); jalview.bin.JalviewLite.addFrame(tp, treeFile, 600, 500); addTreeMenuItem(tp, treeFile); } @@ -2586,7 +2833,8 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, .sortByTree(viewport.getAlignment(), treePanel.getTree()); // addHistoryItem(new HistoryItem("Sort", viewport.alignment, // HistoryItem.SORT)); - addHistoryItem(new OrderCommand(MessageManager.formatMessage("label.order_by_params", new String[]{title}), oldOrder, + addHistoryItem(new OrderCommand(MessageManager.formatMessage( + "label.order_by_params", new String[] { title }), oldOrder, viewport.getAlignment())); alignPanel.paintAlignment(true); } @@ -2683,27 +2931,31 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, // TODO: update this text for each release or centrally store it for // lite and application g.setFont(new Font("Helvetica", Font.BOLD, 14)); - g.drawString(MessageManager.formatMessage("label.jalviewLite_release", new String[]{version}), x, y += fh); + g.drawString(MessageManager.formatMessage( + "label.jalviewLite_release", new String[] { version }), x, + y += fh); g.setFont(new Font("Helvetica", Font.BOLD, 12)); - g.drawString(MessageManager.formatMessage("label.jaview_build_date", new String[]{builddate}), x, y += fh); + g.drawString(MessageManager.formatMessage( + "label.jaview_build_date", new String[] { builddate }), x, + y += fh); g.setFont(new Font("Helvetica", Font.PLAIN, 12)); - g.drawString( - MessageManager.getString("label.jalview_authors_1"), + g.drawString(MessageManager.getString("label.jalview_authors_1"), x, y += fh * 1.5); - g.drawString(MessageManager.getString("label.jalview_authors_2"), x + 50, y += fh+8); + g.drawString(MessageManager.getString("label.jalview_authors_2"), + x + 50, y += fh + 8); g.drawString( - MessageManager.getString("label.jalview_dev_managers"), - x, y += fh); - g.drawString( - MessageManager.getString("label.jalview_distribution_lists"), - x, y += fh); - g.drawString(MessageManager.getString("label.jalview_please_cite"), x, y += fh + 8); + MessageManager.getString("label.jalview_dev_managers"), x, + y += fh); + g.drawString(MessageManager + .getString("label.jalview_distribution_lists"), x, y += fh); + g.drawString(MessageManager.getString("label.jalview_please_cite"), + x, y += fh + 8); g.drawString( MessageManager.getString("label.jalview_cite_1_authors"), x, y += fh); g.drawString( - MessageManager.getString("label.jalview_cite_1_title"), - x, y += fh); + MessageManager.getString("label.jalview_cite_1_title"), x, + y += fh); g.drawString(MessageManager.getString("label.jalview_cite_1_ref"), x, y += fh); } @@ -2712,7 +2964,8 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, Frame frame = new Frame(); frame.add(new AboutPanel(JalviewLite.getVersion(), JalviewLite .getBuildDate())); - jalview.bin.JalviewLite.addFrame(frame, MessageManager.getString("label.jalview"), 580, 220); + jalview.bin.JalviewLite.addFrame(frame, + MessageManager.getString("label.jalview"), 580, 220); } @@ -2735,31 +2988,32 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, Menu fileMenu = new Menu(MessageManager.getString("action.file")); - MenuItem loadApplication = new MenuItem(MessageManager.getString("label.view_full_application")); - - MenuItem loadTree = new MenuItem(MessageManager.getString("label.load_associated_tree")); - - MenuItem loadAnnotations = new MenuItem(MessageManager.getString("label.load_features_annotations")); - - MenuItem outputFeatures = new MenuItem(MessageManager.getString("label.export_features")); + MenuItem loadApplication = new MenuItem( + MessageManager.getString("label.view_full_application")); - MenuItem outputAnnotations = new MenuItem(MessageManager.getString("label.export_annotations")); + MenuItem loadTree = new MenuItem( + MessageManager.getString("label.load_associated_tree")); - MenuItem closeMenuItem = new MenuItem(MessageManager.getString("action.close")); + MenuItem loadAnnotations = new MenuItem( + MessageManager.getString("label.load_features_annotations")); - Menu editMenu = new Menu(MessageManager.getString("action.edit")); + MenuItem outputFeatures = new MenuItem( + MessageManager.getString("label.export_features")); - Menu viewMenu = new Menu(MessageManager.getString("action.view")); + MenuItem outputAnnotations = new MenuItem( + MessageManager.getString("label.export_annotations")); - Menu colourMenu = new Menu(MessageManager.getString("action.colour")); + MenuItem closeMenuItem = new MenuItem( + MessageManager.getString("action.close")); - Menu calculateMenu = new Menu(MessageManager.getString("action.calculate")); + MenuItem selectAllSequenceMenuItem = new MenuItem( + MessageManager.getString("action.select_all")); - MenuItem selectAllSequenceMenuItem = new MenuItem(MessageManager.getString("action.select_all")); + MenuItem deselectAllSequenceMenuItem = new MenuItem( + MessageManager.getString("action.deselect_all")); - MenuItem deselectAllSequenceMenuItem = new MenuItem(MessageManager.getString("action.deselect_all")); - - MenuItem invertSequenceMenuItem = new MenuItem(MessageManager.getString("action.invert_selection")); + MenuItem invertSequenceMenuItem = new MenuItem( + MessageManager.getString("action.invert_selection")); MenuItem remove2LeftMenuItem = new MenuItem(); @@ -2795,8 +3049,6 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, public Label statusBar = new Label(); - Menu outputTextboxMenu = new Menu(); - MenuItem clustalColour = new MenuItem(); MenuItem zappoColour = new MenuItem(); @@ -2815,8 +3067,8 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, MenuItem purinePyrimidineColour = new MenuItem(); - MenuItem RNAInteractionColour = new MenuItem(); - + // MenuItem RNAInteractionColour = new MenuItem(); + MenuItem RNAHelixColour = new MenuItem(); MenuItem userDefinedColour = new MenuItem(); @@ -2837,7 +3089,8 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, CheckboxMenuItem displayNonconservedMenuItem = new CheckboxMenuItem(); - MenuItem alProperties = new MenuItem(MessageManager.getString("label.alignment_props")); + MenuItem alProperties = new MenuItem( + MessageManager.getString("label.alignment_props")); MenuItem overviewMenuItem = new MenuItem(); @@ -2893,22 +3146,15 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, MenuItem modifyConservation = new MenuItem(); - CheckboxMenuItem autoCalculate = new CheckboxMenuItem( - "Autocalculate Consensus", true); + CheckboxMenuItem autoCalculate = null; CheckboxMenuItem sortByTree = new CheckboxMenuItem( "Sort Alignment With New Tree", true); Menu sortByTreeMenu = new Menu(); - Menu sort = new Menu(); - - Menu calculate = new Menu(); - MenuItem inputText = new MenuItem(); - Menu helpMenu = new Menu(); - MenuItem documentation = new MenuItem(); MenuItem about = new MenuItem(); @@ -2919,8 +3165,6 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, CheckboxMenuItem followMouseOverFlag = new CheckboxMenuItem(); - Menu autoAnnMenu = new Menu(); - CheckboxMenuItem showSequenceLogo = new CheckboxMenuItem(); CheckboxMenuItem applyAutoAnnotationSettings = new CheckboxMenuItem(); @@ -2933,18 +3177,27 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, CheckboxMenuItem normSequenceLogo = new CheckboxMenuItem(); + /** + * Initialise menus and other items + * + * @throws Exception + */ private void jbInit() throws Exception { - setMenuBar(alignFrameMenuBar); - MenuItem item; - - // dynamically fill save as menu with available formats + /* + * Configure File menu items and actions + */ + inputText + .setLabel(MessageManager.getString("label.input_from_textbox")); + inputText.addActionListener(this); + Menu outputTextboxMenu = new Menu( + MessageManager.getString("label.out_to_textbox")); for (int i = 0; i < jalview.io.AppletFormatAdapter.WRITEABLE_FORMATS.length; i++) { - item = new MenuItem( + MenuItem item = new MenuItem( jalview.io.AppletFormatAdapter.WRITEABLE_FORMATS[i]); item.addActionListener(new java.awt.event.ActionListener() @@ -2960,125 +3213,20 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, } closeMenuItem.addActionListener(this); loadApplication.addActionListener(this); - loadTree.addActionListener(this); loadAnnotations.addActionListener(this); outputFeatures.addActionListener(this); outputAnnotations.addActionListener(this); - selectAllSequenceMenuItem.addActionListener(this); - deselectAllSequenceMenuItem.addActionListener(this); - invertSequenceMenuItem.addActionListener(this); - remove2LeftMenuItem.setLabel(MessageManager.getString("action.remove_left")); - remove2LeftMenuItem.addActionListener(this); - remove2RightMenuItem.setLabel(MessageManager.getString("action.remove_right")); - remove2RightMenuItem.addActionListener(this); - removeGappedColumnMenuItem.setLabel(MessageManager.getString("action.remove_empty_columns")); - removeGappedColumnMenuItem.addActionListener(this); - removeAllGapsMenuItem.setLabel(MessageManager.getString("action.remove_all_gaps")); - removeAllGapsMenuItem.addActionListener(this); - viewBoxesMenuItem.setLabel(MessageManager.getString("action.boxes")); - viewBoxesMenuItem.setState(true); - viewBoxesMenuItem.addItemListener(this); - viewTextMenuItem.setLabel(MessageManager.getString("action.text")); - viewTextMenuItem.setState(true); - viewTextMenuItem.addItemListener(this); - sortPairwiseMenuItem.setLabel(MessageManager.getString("action.by_pairwise_id")); - sortPairwiseMenuItem.addActionListener(this); - sortIDMenuItem.setLabel(MessageManager.getString("action.by_id")); - sortIDMenuItem.addActionListener(this); - sortLengthMenuItem.setLabel(MessageManager.getString("action.by_length")); - sortLengthMenuItem.addActionListener(this); - sortGroupMenuItem.setLabel(MessageManager.getString("action.by_group")); - sortGroupMenuItem.addActionListener(this); - removeRedundancyMenuItem.setLabel(MessageManager.getString("action.remove_redundancy")); - removeRedundancyMenuItem.addActionListener(this); - pairwiseAlignmentMenuItem.setLabel(MessageManager.getString("action.pairwise_alignment")); - pairwiseAlignmentMenuItem.addActionListener(this); - PCAMenuItem.setLabel(MessageManager.getString("label.principal_component_analysis")); - PCAMenuItem.addActionListener(this); - averageDistanceTreeMenuItem - .setLabel(MessageManager.getString("label.average_distance_identity")); - averageDistanceTreeMenuItem.addActionListener(this); - neighbourTreeMenuItem.setLabel(MessageManager.getString("label.neighbour_joining_identity")); - neighbourTreeMenuItem.addActionListener(this); - statusBar.setBackground(Color.white); - statusBar.setFont(new java.awt.Font("Verdana", 0, 11)); - statusBar.setText(MessageManager.getString("label.status_bar")); - outputTextboxMenu.setLabel(MessageManager.getString("label.out_to_textbox")); - clustalColour.setLabel(MessageManager.getString("label.clustalx")); - clustalColour.addActionListener(this); - zappoColour.setLabel(MessageManager.getString("label.zappo")); - zappoColour.addActionListener(this); - taylorColour.setLabel(MessageManager.getString("label.taylor")); - taylorColour.addActionListener(this); - hydrophobicityColour.setLabel(MessageManager.getString("label.hydrophobicity")); - hydrophobicityColour.addActionListener(this); - helixColour.setLabel(MessageManager.getString("label.helix_propensity")); - helixColour.addActionListener(this); - strandColour.setLabel(MessageManager.getString("label.strand_propensity")); - strandColour.addActionListener(this); - turnColour.setLabel(MessageManager.getString("label.turn_propensity")); - turnColour.addActionListener(this); - buriedColour.setLabel(MessageManager.getString("label.buried_index")); - buriedColour.addActionListener(this); - purinePyrimidineColour.setLabel(MessageManager.getString("label.purine_pyrimidine")); - purinePyrimidineColour.addActionListener(this); - RNAInteractionColour.setLabel(MessageManager.getString("label.rna_interaction")); - RNAInteractionColour.addActionListener(this); - RNAHelixColour.setLabel(MessageManager.getString("action.by_rna_helixes")); - RNAHelixColour.addActionListener(this); - userDefinedColour.setLabel(MessageManager.getString("action.user_defined")); - userDefinedColour.addActionListener(this); - PIDColour.setLabel(MessageManager.getString("label.percentage_identity")); - PIDColour.addActionListener(this); - BLOSUM62Colour.setLabel(MessageManager.getString("label.blosum62_score")); - BLOSUM62Colour.addActionListener(this); - tcoffeeColour.setLabel(MessageManager.getString("label.tcoffee_scores")); - tcoffeeColour.setEnabled(false); // it will enabled only if a score file is - // provided - tcoffeeColour.addActionListener(this); - avDistanceTreeBlosumMenuItem - .setLabel(MessageManager.getString("label.average_distance_bloslum62")); - avDistanceTreeBlosumMenuItem.addActionListener(this); - njTreeBlosumMenuItem.setLabel(MessageManager.getString("label.neighbour_blosum62")); - njTreeBlosumMenuItem.addActionListener(this); - annotationPanelMenuItem.setLabel(MessageManager.getString("label.show_annotations")); - annotationPanelMenuItem.addItemListener(this); - colourTextMenuItem.setLabel(MessageManager.getString("label.colour_text")); - colourTextMenuItem.addItemListener(this); - displayNonconservedMenuItem.setLabel(MessageManager.getString("label.show_non_conversed")); - displayNonconservedMenuItem.addItemListener(this); - alProperties.addActionListener(this); - overviewMenuItem.setLabel(MessageManager.getString("label.overview_window")); - overviewMenuItem.addActionListener(this); + /* + * Configure Edit menu items and actions + */ undoMenuItem.setEnabled(false); undoMenuItem.setLabel(MessageManager.getString("action.undo")); undoMenuItem.addActionListener(this); redoMenuItem.setEnabled(false); redoMenuItem.setLabel(MessageManager.getString("action.redo")); redoMenuItem.addActionListener(this); - conservationMenuItem.setLabel(MessageManager.getString("action.by_conservation")); - conservationMenuItem.addItemListener(this); - noColourmenuItem.setLabel(MessageManager.getString("label.none")); - noColourmenuItem.addActionListener(this); - wrapMenuItem.setLabel(MessageManager.getString("action.wrap")); - wrapMenuItem.addItemListener(this); - renderGapsMenuItem.setLabel(MessageManager.getString("action.show_gaps")); - renderGapsMenuItem.setState(true); - renderGapsMenuItem.addItemListener(this); - findMenuItem.setLabel(MessageManager.getString("action.find")); - findMenuItem.addActionListener(this); - abovePIDThreshold.setLabel(MessageManager.getString("label.above_identity_threshold")); - abovePIDThreshold.addItemListener(this); - nucleotideColour.setLabel(MessageManager.getString("label.nucleotide")); - nucleotideColour.addActionListener(this); - deleteGroups.setLabel(MessageManager.getString("action.undefine_groups")); - deleteGroups.addActionListener(this); - grpsFromSelection.setLabel(MessageManager.getString("action.make_groups_selection")); - grpsFromSelection.addActionListener(this); - createGroup.setLabel(MessageManager.getString("action.create_group")); - unGroup.setLabel(MessageManager.getString("action.remove_group")); copy.setLabel(MessageManager.getString("action.copy")); copy.addActionListener(this); cut.setLabel(MessageManager.getString("action.cut")); @@ -3090,75 +3238,66 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, pasteNew.addActionListener(this); pasteThis.setLabel(MessageManager.getString("label.to_this_alignment")); pasteThis.addActionListener(this); - applyToAllGroups.setLabel(MessageManager.getString("label.apply_colour_to_all_groups")); - applyToAllGroups.setState(true); - applyToAllGroups.addItemListener(this); - font.setLabel(MessageManager.getString("action.font")); - font.addActionListener(this); - scaleAbove.setLabel(MessageManager.getString("action.scale_above")); - scaleAbove.setState(true); - scaleAbove.setEnabled(false); - scaleAbove.addItemListener(this); - scaleLeft.setEnabled(false); - scaleLeft.setState(true); - scaleLeft.setLabel(MessageManager.getString("action.scale_left")); - scaleLeft.addItemListener(this); - scaleRight.setEnabled(false); - scaleRight.setState(true); - scaleRight.setLabel(MessageManager.getString("action.scale_right")); - scaleRight.addItemListener(this); - modifyPID.setLabel(MessageManager.getString("label.modify_identity_thereshold")); - modifyPID.addActionListener(this); - modifyConservation.setLabel(MessageManager.getString("label.modify_conservation_thereshold")); - modifyConservation.addActionListener(this); - sortByTreeMenu.setLabel(MessageManager.getString("action.by_tree_order")); - sort.setLabel(MessageManager.getString("action.sort")); - calculate.setLabel(MessageManager.getString("action.calculate_tree")); - autoCalculate.addItemListener(this); - sortByTree.addItemListener(this); - inputText.setLabel(MessageManager.getString("label.input_from_textbox")); - inputText.addActionListener(this); - centreColumnLabelFlag.setLabel(MessageManager.getString("label.centre_column_labels")); - centreColumnLabelFlag.addItemListener(this); - followMouseOverFlag.setLabel(MessageManager.getString("label.automatic_scrolling")); - followMouseOverFlag.addItemListener(this); - helpMenu.setLabel(MessageManager.getString("action.help")); - documentation.setLabel(MessageManager.getString("label.documentation")); - documentation.addActionListener(this); + remove2LeftMenuItem.setLabel(MessageManager + .getString("action.remove_left")); + remove2LeftMenuItem.addActionListener(this); + remove2RightMenuItem.setLabel(MessageManager + .getString("action.remove_right")); + remove2RightMenuItem.addActionListener(this); + removeGappedColumnMenuItem.setLabel(MessageManager + .getString("action.remove_empty_columns")); + removeGappedColumnMenuItem.addActionListener(this); + removeAllGapsMenuItem.setLabel(MessageManager + .getString("action.remove_all_gaps")); + removeAllGapsMenuItem.addActionListener(this); + removeRedundancyMenuItem.setLabel(MessageManager + .getString("action.remove_redundancy")); + removeRedundancyMenuItem.addActionListener(this); - about.setLabel(MessageManager.getString("label.about")); - about.addActionListener(this); - seqLimits.setState(true); - seqLimits.setLabel(MessageManager.getString("label.show_sequence_limits")); - seqLimits.addItemListener(this); - featureSettings.setLabel(MessageManager.getString("label.feature_settings")); - featureSettings.addActionListener(this); - sequenceFeatures.setLabel(MessageManager.getString("label.sequence_features")); - sequenceFeatures.addItemListener(this); - sequenceFeatures.setState(false); - annotationColour.setLabel(MessageManager.getString("action.by_annotation")); - annotationColour.addActionListener(this); - invertSequenceMenuItem.setLabel(MessageManager.getString("action.invert_sequence_selection")); - invertColSel.setLabel(MessageManager.getString("action.invert_column_selection")); - menu1.setLabel(MessageManager.getString("action.show")); + /* + * Configure Select menu items and actions + */ + findMenuItem.setLabel(MessageManager.getString("action.find")); + findMenuItem.addActionListener(this); + selectAllSequenceMenuItem.addActionListener(this); + deselectAllSequenceMenuItem.addActionListener(this); + invertSequenceMenuItem.setLabel(MessageManager + .getString("action.invert_sequence_selection")); + invertSequenceMenuItem.addActionListener(this); + invertColSel.setLabel(MessageManager + .getString("action.invert_column_selection")); + invertColSel.addActionListener(this); + deleteGroups.setLabel(MessageManager + .getString("action.undefine_groups")); + deleteGroups.addActionListener(this); + grpsFromSelection.setLabel(MessageManager + .getString("action.make_groups_selection")); + grpsFromSelection.addActionListener(this); + createGroup.setLabel(MessageManager.getString("action.create_group")); + unGroup.setLabel(MessageManager.getString("action.remove_group")); + annotationColumnSelection.setLabel(MessageManager + .getString("action.select_by_annotation")); + annotationColumnSelection.addActionListener(this); + + /* + * Configure View menu items and actions + */ + newView.setLabel(MessageManager.getString("action.new_view")); + newView.addActionListener(this); + Menu showMenu = new Menu(MessageManager.getString("action.show")); showColumns.setLabel(MessageManager.getString("label.all_columns")); showSeqs.setLabel(MessageManager.getString("label.all_sequences")); - menu2.setLabel(MessageManager.getString("action.hide")); - hideColumns.setLabel(MessageManager.getString("label.selected_columns")); - hideSequences.setLabel(MessageManager.getString("label.selected_sequences")); - hideAllButSelection.setLabel(MessageManager.getString("label.all_but_selected_region")); - hideAllSelection.setLabel(MessageManager.getString("label.selected_region")); - showAllHidden.setLabel(MessageManager.getString("label.all_sequences_columns")); - showGroupConsensus.setLabel(MessageManager.getString("label.group_consensus")); - showGroupConservation.setLabel(MessageManager.getString("label.group_conservation")); - showConsensusHistogram.setLabel(MessageManager.getString("label.show_consensus_histogram")); - showSequenceLogo.setLabel(MessageManager.getString("label.show_consensus_logo")); - normSequenceLogo.setLabel(MessageManager.getString("label.norm_consensus_logo")); - applyAutoAnnotationSettings.setLabel(MessageManager.getString("label.apply_all_groups")); - applyAutoAnnotationSettings.setState(true); - autoAnnMenu.setLabel(MessageManager.getString("label.autocalculated_annotation")); - - invertColSel.addActionListener(this); + Menu hideMenu = new Menu(MessageManager.getString("action.hide")); + hideColumns + .setLabel(MessageManager.getString("label.selected_columns")); + hideSequences.setLabel(MessageManager + .getString("label.selected_sequences")); + hideAllButSelection.setLabel(MessageManager + .getString("label.all_but_selected_region")); + hideAllSelection.setLabel(MessageManager + .getString("label.selected_region")); + showAllHidden.setLabel(MessageManager + .getString("label.all_sequences_columns")); showColumns.addActionListener(this); showSeqs.addActionListener(this); hideColumns.addActionListener(this); @@ -3166,47 +3305,277 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, hideAllButSelection.addActionListener(this); hideAllSelection.addActionListener(this); showAllHidden.addActionListener(this); + featureSettings.setLabel(MessageManager + .getString("action.feature_settings")); + featureSettings.addActionListener(this); + sequenceFeatures.setLabel(MessageManager + .getString("label.show_sequence_features")); + sequenceFeatures.addItemListener(this); + sequenceFeatures.setState(false); + followMouseOverFlag.setLabel(MessageManager + .getString("label.automatic_scrolling")); + followMouseOverFlag.addItemListener(this); + alProperties.addActionListener(this); + overviewMenuItem.setLabel(MessageManager + .getString("label.overview_window")); + overviewMenuItem.addActionListener(this); + + /* + * Configure Annotations menu items and actions + */ + annotationPanelMenuItem.setLabel(MessageManager + .getString("label.show_annotations")); + annotationPanelMenuItem.addItemListener(this); + showGroupConsensus.setLabel(MessageManager + .getString("label.group_consensus")); + showGroupConservation.setLabel(MessageManager + .getString("label.group_conservation")); + showConsensusHistogram.setLabel(MessageManager + .getString("label.show_consensus_histogram")); + showSequenceLogo.setLabel(MessageManager + .getString("label.show_consensus_logo")); + normSequenceLogo.setLabel(MessageManager + .getString("label.norm_consensus_logo")); + applyAutoAnnotationSettings.setLabel(MessageManager + .getString("label.apply_all_groups")); + applyAutoAnnotationSettings.setState(true); + Menu autoAnnMenu = new Menu( + MessageManager.getString("label.autocalculated_annotation")); showGroupConsensus.addItemListener(this); showGroupConservation.addItemListener(this); showConsensusHistogram.addItemListener(this); showSequenceLogo.addItemListener(this); normSequenceLogo.addItemListener(this); - applyAutoAnnotationSettings.addItemListener(this); - formatMenu.setLabel(MessageManager.getString("action.format")); - selectMenu.setLabel(MessageManager.getString("action.select")); - newView.setLabel(MessageManager.getString("action.new_view")); - newView.addActionListener(this); + showAlignmentAnnotations = new CheckboxMenuItem( + MessageManager.getString("label.show_all_al_annotations")); + showSequenceAnnotations = new CheckboxMenuItem( + MessageManager.getString("label.show_all_seq_annotations")); + sortAnnBySequence = new CheckboxMenuItem( + MessageManager.getString("label.sort_annotations_by_sequence")); + sortAnnByLabel = new CheckboxMenuItem( + MessageManager.getString("label.sort_annotations_by_label")); + showAutoFirst = new CheckboxMenuItem( + MessageManager.getString("label.show_first")); + showAutoLast = new CheckboxMenuItem( + MessageManager.getString("label.show_last")); + showAlignmentAnnotations.addItemListener(this); + showSequenceAnnotations.addItemListener(this); + sortAnnBySequence.addItemListener(this); + sortAnnByLabel.addItemListener(this); + showAutoFirst.addItemListener(this); + showAutoLast.addItemListener(this); + + /* + * Configure Format menu items and actions + */ + font.setLabel(MessageManager.getString("action.font")); + font.addActionListener(this); + scaleAbove.setLabel(MessageManager.getString("action.scale_above")); + scaleAbove.setState(true); + scaleAbove.setEnabled(false); + scaleAbove.addItemListener(this); + scaleLeft.setEnabled(false); + scaleLeft.setState(true); + scaleLeft.setLabel(MessageManager.getString("action.scale_left")); + scaleLeft.addItemListener(this); + scaleRight.setEnabled(false); + scaleRight.setState(true); + scaleRight.setLabel(MessageManager.getString("action.scale_right")); + scaleRight.addItemListener(this); + viewBoxesMenuItem.setLabel(MessageManager.getString("action.boxes")); + viewBoxesMenuItem.setState(true); + viewBoxesMenuItem.addItemListener(this); + viewTextMenuItem.setLabel(MessageManager.getString("action.text")); + viewTextMenuItem.setState(true); + viewTextMenuItem.addItemListener(this); + colourTextMenuItem.setLabel(MessageManager + .getString("label.colour_text")); + colourTextMenuItem.addItemListener(this); + displayNonconservedMenuItem.setLabel(MessageManager + .getString("label.show_non_conversed")); + displayNonconservedMenuItem.addItemListener(this); + wrapMenuItem.setLabel(MessageManager.getString("action.wrap")); + wrapMenuItem.addItemListener(this); + renderGapsMenuItem.setLabel(MessageManager + .getString("action.show_gaps")); + renderGapsMenuItem.setState(true); + renderGapsMenuItem.addItemListener(this); + centreColumnLabelFlag.setLabel(MessageManager + .getString("label.centre_column_labels")); + centreColumnLabelFlag.addItemListener(this); + seqLimits.setState(true); + seqLimits.setLabel(MessageManager + .getString("label.show_sequence_limits")); + seqLimits.addItemListener(this); + + /* + * Configure Colour menu items and actions + */ + applyToAllGroups.setLabel(MessageManager + .getString("label.apply_colour_to_all_groups")); + applyToAllGroups.setState(true); + applyToAllGroups.addItemListener(this); + clustalColour.setLabel(MessageManager.getString("label.clustalx")); + clustalColour.addActionListener(this); + zappoColour.setLabel(MessageManager.getString("label.zappo")); + zappoColour.addActionListener(this); + taylorColour.setLabel(MessageManager.getString("label.taylor")); + taylorColour.addActionListener(this); + hydrophobicityColour.setLabel(MessageManager + .getString("label.hydrophobicity")); + hydrophobicityColour.addActionListener(this); + helixColour + .setLabel(MessageManager.getString("label.helix_propensity")); + helixColour.addActionListener(this); + strandColour.setLabel(MessageManager + .getString("label.strand_propensity")); + strandColour.addActionListener(this); + turnColour.setLabel(MessageManager.getString("label.turn_propensity")); + turnColour.addActionListener(this); + buriedColour.setLabel(MessageManager.getString("label.buried_index")); + buriedColour.addActionListener(this); + purinePyrimidineColour.setLabel(MessageManager + .getString("label.purine_pyrimidine")); + purinePyrimidineColour.addActionListener(this); + // RNAInteractionColour.setLabel(MessageManager + // .getString("label.rna_interaction")); + // RNAInteractionColour.addActionListener(this); + RNAHelixColour.setLabel(MessageManager + .getString("action.by_rna_helixes")); + RNAHelixColour.addActionListener(this); + userDefinedColour.setLabel(MessageManager + .getString("action.user_defined")); + userDefinedColour.addActionListener(this); + PIDColour.setLabel(MessageManager + .getString("label.percentage_identity")); + PIDColour.addActionListener(this); + BLOSUM62Colour.setLabel(MessageManager + .getString("label.blosum62_score")); + BLOSUM62Colour.addActionListener(this); + tcoffeeColour + .setLabel(MessageManager.getString("label.tcoffee_scores")); + // it will be enabled only if a score file is provided + tcoffeeColour.setEnabled(false); + tcoffeeColour.addActionListener(this); + conservationMenuItem.setLabel(MessageManager + .getString("action.by_conservation")); + conservationMenuItem.addItemListener(this); + noColourmenuItem.setLabel(MessageManager.getString("label.none")); + noColourmenuItem.addActionListener(this); + abovePIDThreshold.setLabel(MessageManager + .getString("label.above_identity_threshold")); + abovePIDThreshold.addItemListener(this); + nucleotideColour.setLabel(MessageManager.getString("label.nucleotide")); + nucleotideColour.addActionListener(this); + modifyPID.setLabel(MessageManager + .getString("label.modify_identity_thereshold")); + modifyPID.addActionListener(this); + modifyConservation.setLabel(MessageManager + .getString("label.modify_conservation_thereshold")); + modifyConservation.addActionListener(this); + annotationColour.setLabel(MessageManager + .getString("action.by_annotation")); + annotationColour.addActionListener(this); + + /* + * Configure Calculate menu items and actions + */ + sortPairwiseMenuItem.setLabel(MessageManager + .getString("action.by_pairwise_id")); + sortPairwiseMenuItem.addActionListener(this); + sortIDMenuItem.setLabel(MessageManager.getString("action.by_id")); + sortIDMenuItem.addActionListener(this); + sortLengthMenuItem.setLabel(MessageManager + .getString("action.by_length")); + sortLengthMenuItem.addActionListener(this); + sortGroupMenuItem.setLabel(MessageManager.getString("action.by_group")); + sortGroupMenuItem.addActionListener(this); + pairwiseAlignmentMenuItem.setLabel(MessageManager + .getString("action.pairwise_alignment")); + pairwiseAlignmentMenuItem.addActionListener(this); + PCAMenuItem.setLabel(MessageManager + .getString("label.principal_component_analysis")); + PCAMenuItem.addActionListener(this); + autoCalculate = new CheckboxMenuItem( + MessageManager.getString("label.autocalculate_consensus"), true); + averageDistanceTreeMenuItem.setLabel(MessageManager + .getString("label.average_distance_identity")); + averageDistanceTreeMenuItem.addActionListener(this); + neighbourTreeMenuItem.setLabel(MessageManager + .getString("label.neighbour_joining_identity")); + neighbourTreeMenuItem.addActionListener(this); + avDistanceTreeBlosumMenuItem.setLabel(MessageManager + .getString("label.average_distance_bloslum62")); + avDistanceTreeBlosumMenuItem.addActionListener(this); + njTreeBlosumMenuItem.setLabel(MessageManager + .getString("label.neighbour_blosum62")); + njTreeBlosumMenuItem.addActionListener(this); + sortByTreeMenu.setLabel(MessageManager + .getString("action.by_tree_order")); + Menu sortMenu = new Menu(MessageManager.getString("action.sort")); + Menu calculateTreeMenu = new Menu( + MessageManager.getString("action.calculate_tree")); + autoCalculate.addItemListener(this); + sortByTree.addItemListener(this); + + /* + * Configure Help menu items and actions + */ + Menu helpMenu = new Menu(MessageManager.getString("action.help")); + documentation.setLabel(MessageManager.getString("label.documentation")); + documentation.addActionListener(this); + about.setLabel(MessageManager.getString("label.about")); + about.addActionListener(this); + + /* + * Add top level menus to frame + */ alignFrameMenuBar.add(fileMenu); + Menu editMenu = new Menu(MessageManager.getString("action.edit")); alignFrameMenuBar.add(editMenu); + Menu selectMenu = new Menu(MessageManager.getString("action.select")); alignFrameMenuBar.add(selectMenu); + Menu viewMenu = new Menu(MessageManager.getString("action.view")); alignFrameMenuBar.add(viewMenu); + Menu annotationsMenu = new Menu( + MessageManager.getString("action.annotations")); + alignFrameMenuBar.add(annotationsMenu); + Menu formatMenu = new Menu(MessageManager.getString("action.format")); alignFrameMenuBar.add(formatMenu); + Menu colourMenu = new Menu(MessageManager.getString("action.colour")); alignFrameMenuBar.add(colourMenu); + Menu calculateMenu = new Menu( + MessageManager.getString("action.calculate")); alignFrameMenuBar.add(calculateMenu); alignFrameMenuBar.add(helpMenu); + /* + * File menu + */ fileMenu.add(inputText); fileMenu.add(loadTree); fileMenu.add(loadAnnotations); - fileMenu.addSeparator(); fileMenu.add(outputTextboxMenu); fileMenu.add(outputFeatures); fileMenu.add(outputAnnotations); - if (jalviewServletURL != null) { fileMenu.add(loadApplication); } - fileMenu.addSeparator(); fileMenu.add(closeMenuItem); + /* + * Edit menu + */ editMenu.add(undoMenuItem); editMenu.add(redoMenuItem); editMenu.add(cut); editMenu.add(copy); + pasteMenu.add(pasteNew); + pasteMenu.add(pasteThis); editMenu.add(pasteMenu); editMenu.add(delete); editMenu.addSeparator(); @@ -3215,21 +3584,38 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, editMenu.add(removeGappedColumnMenuItem); editMenu.add(removeAllGapsMenuItem); editMenu.add(removeRedundancyMenuItem); + + /* + * Select menu + */ + selectMenu.add(findMenuItem); + selectMenu.addSeparator(); + selectMenu.add(selectAllSequenceMenuItem); + selectMenu.add(deselectAllSequenceMenuItem); + selectMenu.add(invertSequenceMenuItem); + selectMenu.add(invertColSel); + selectMenu.add(createGroup); + selectMenu.add(unGroup); + selectMenu.add(grpsFromSelection); + selectMenu.add(deleteGroups); + selectMenu.add(annotationColumnSelection); + + /* + * View menu + */ viewMenu.add(newView); viewMenu.addSeparator(); - viewMenu.add(menu1); - viewMenu.add(menu2); + showMenu.add(showColumns); + showMenu.add(showSeqs); + showMenu.add(showAllHidden); + viewMenu.add(showMenu); + hideMenu.add(hideColumns); + hideMenu.add(hideSequences); + hideMenu.add(hideAllSelection); + hideMenu.add(hideAllButSelection); + viewMenu.add(hideMenu); viewMenu.addSeparator(); viewMenu.add(followMouseOverFlag); - viewMenu.add(annotationPanelMenuItem); - autoAnnMenu.add(applyAutoAnnotationSettings); - autoAnnMenu.add(showConsensusHistogram); - autoAnnMenu.add(showSequenceLogo); - autoAnnMenu.add(normSequenceLogo); - autoAnnMenu.addSeparator(); - autoAnnMenu.add(showGroupConservation); - autoAnnMenu.add(showGroupConsensus); - viewMenu.add(autoAnnMenu); viewMenu.addSeparator(); viewMenu.add(sequenceFeatures); viewMenu.add(featureSettings); @@ -3237,6 +3623,48 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, viewMenu.add(alProperties); viewMenu.addSeparator(); viewMenu.add(overviewMenuItem); + + /* + * Annotations menu + */ + annotationsMenu.add(annotationPanelMenuItem); + annotationsMenu.addSeparator(); + annotationsMenu.add(showAlignmentAnnotations); + annotationsMenu.add(showSequenceAnnotations); + annotationsMenu.add(sortAnnBySequence); + annotationsMenu.add(sortAnnByLabel); + annotationsMenu.addSeparator(); + autoAnnMenu.add(showAutoFirst); + autoAnnMenu.add(showAutoLast); + autoAnnMenu.addSeparator(); + autoAnnMenu.add(applyAutoAnnotationSettings); + autoAnnMenu.add(showConsensusHistogram); + autoAnnMenu.add(showSequenceLogo); + autoAnnMenu.add(normSequenceLogo); + autoAnnMenu.addSeparator(); + autoAnnMenu.add(showGroupConservation); + autoAnnMenu.add(showGroupConsensus); + annotationsMenu.add(autoAnnMenu); + + /* + * Format menu + */ + formatMenu.add(font); + formatMenu.add(seqLimits); + formatMenu.add(wrapMenuItem); + formatMenu.add(scaleAbove); + formatMenu.add(scaleLeft); + formatMenu.add(scaleRight); + formatMenu.add(viewBoxesMenuItem); + formatMenu.add(viewTextMenuItem); + formatMenu.add(colourTextMenuItem); + formatMenu.add(displayNonconservedMenuItem); + formatMenu.add(renderGapsMenuItem); + formatMenu.add(centreColumnLabelFlag); + + /* + * Colour menu + */ colourMenu.add(applyToAllGroups); colourMenu.addSeparator(); colourMenu.add(noColourmenuItem); @@ -3252,7 +3680,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, colourMenu.add(buriedColour); colourMenu.add(nucleotideColour); colourMenu.add(purinePyrimidineColour); - // colourMenu.add(RNAInteractionColour); + // colourMenu.add(RNAInteractionColour); colourMenu.add(tcoffeeColour); colourMenu.add(userDefinedColour); colourMenu.addSeparator(); @@ -3262,61 +3690,44 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, colourMenu.add(modifyPID); colourMenu.add(annotationColour); colourMenu.add(RNAHelixColour); - calculateMenu.add(sort); - calculateMenu.add(calculate); + + /* + * Calculate menu + */ + sortMenu.add(sortIDMenuItem); + sortMenu.add(sortLengthMenuItem); + sortMenu.add(sortByTreeMenu); + sortMenu.add(sortGroupMenuItem); + sortMenu.add(sortPairwiseMenuItem); + calculateMenu.add(sortMenu); + calculateTreeMenu.add(averageDistanceTreeMenuItem); + calculateTreeMenu.add(neighbourTreeMenuItem); + calculateTreeMenu.add(avDistanceTreeBlosumMenuItem); + calculateTreeMenu.add(njTreeBlosumMenuItem); + calculateMenu.add(calculateTreeMenu); calculateMenu.addSeparator(); calculateMenu.add(pairwiseAlignmentMenuItem); calculateMenu.add(PCAMenuItem); calculateMenu.add(autoCalculate); calculateMenu.add(sortByTree); - this.add(statusBar, BorderLayout.SOUTH); - pasteMenu.add(pasteNew); - pasteMenu.add(pasteThis); - sort.add(sortIDMenuItem); - sort.add(sortLengthMenuItem); - sort.add(sortByTreeMenu); - sort.add(sortGroupMenuItem); - sort.add(sortPairwiseMenuItem); - calculate.add(averageDistanceTreeMenuItem); - calculate.add(neighbourTreeMenuItem); - calculate.add(avDistanceTreeBlosumMenuItem); - calculate.add(njTreeBlosumMenuItem); + + /* + * Help menu + */ helpMenu.add(documentation); helpMenu.add(about); - menu1.add(showColumns); - menu1.add(showSeqs); - menu1.add(showAllHidden); - menu2.add(hideColumns); - menu2.add(hideSequences); - menu2.add(hideAllSelection); - menu2.add(hideAllButSelection); - formatMenu.add(font); - formatMenu.add(seqLimits); - formatMenu.add(wrapMenuItem); - formatMenu.add(scaleAbove); - formatMenu.add(scaleLeft); - formatMenu.add(scaleRight); - formatMenu.add(viewBoxesMenuItem); - formatMenu.add(viewTextMenuItem); - formatMenu.add(colourTextMenuItem); - formatMenu.add(displayNonconservedMenuItem); - formatMenu.add(renderGapsMenuItem); - formatMenu.add(centreColumnLabelFlag); - selectMenu.add(findMenuItem); - selectMenu.addSeparator(); - selectMenu.add(selectAllSequenceMenuItem); - selectMenu.add(deselectAllSequenceMenuItem); - selectMenu.add(invertSequenceMenuItem); - selectMenu.add(invertColSel); - selectMenu.add(createGroup); - selectMenu.add(unGroup); - selectMenu.add(grpsFromSelection); - selectMenu.add(deleteGroups); + /* + * Status bar + */ + statusBar.setBackground(Color.white); + statusBar.setFont(new java.awt.Font("Verdana", 0, 11)); + statusBar.setText(MessageManager.getString("label.status_bar")); + this.add(statusBar, BorderLayout.SOUTH); } - - public void setStatus(String string) { + public void setStatus(String string) + { statusBar.setText(string); }; @@ -3326,16 +3737,14 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, MenuItem annotationColour = new MenuItem(); - MenuItem invertColSel = new MenuItem(); + MenuItem annotationColumnSelection = new MenuItem(); - Menu menu1 = new Menu(); + MenuItem invertColSel = new MenuItem(); MenuItem showColumns = new MenuItem(); MenuItem showSeqs = new MenuItem(); - Menu menu2 = new Menu(); - MenuItem hideColumns = new MenuItem(); MenuItem hideSequences = new MenuItem(); @@ -3346,11 +3755,21 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, MenuItem showAllHidden = new MenuItem(); - Menu formatMenu = new Menu(); + MenuItem newView = new MenuItem(); + + private CheckboxMenuItem showAlignmentAnnotations; - Menu selectMenu = new Menu(); + private CheckboxMenuItem showSequenceAnnotations; - MenuItem newView = new MenuItem(); + private CheckboxMenuItem sortAnnBySequence; + + private CheckboxMenuItem sortAnnByLabel; + + private CheckboxMenuItem showAutoFirst; + + private CheckboxMenuItem showAutoLast; + + private SplitFrame splitFrame; /** * Attach the alignFrame panels after embedding menus, if necessary. This used @@ -3361,46 +3780,11 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, * true to attach the view to the applet area on the page rather than * in a new window */ - public void createAlignFrameWindow(boolean reallyEmbedded, String title) + public void createAlignFrameWindow(boolean reallyEmbedded) { if (reallyEmbedded) { - // //// - // Explicly build the embedded menu panel for the on-page applet - // - // view cannot be closed if its actually on the page - fileMenu.remove(closeMenuItem); - fileMenu.remove(3); // Remove Seperator - embeddedMenu = makeEmbeddedPopupMenu(alignFrameMenuBar, "Arial", - Font.PLAIN, 11, false); // use our own fonts. - // and actually add the components to the applet area - viewport.applet.setLayout(new BorderLayout()); - viewport.applet.add(embeddedMenu, BorderLayout.NORTH); - viewport.applet.add(statusBar, BorderLayout.SOUTH); - alignPanel.setSize(viewport.applet.getSize().width, - viewport.applet.getSize().height - embeddedMenu.HEIGHT - - statusBar.HEIGHT); - viewport.applet.add(alignPanel, BorderLayout.CENTER); - final AlignFrame me = this; - viewport.applet.addFocusListener(new FocusListener() - { - - @Override - public void focusLost(FocusEvent e) - { - if (me.viewport.applet.currentAlignFrame == me) - { - me.viewport.applet.currentAlignFrame = null; - } - } - - @Override - public void focusGained(FocusEvent e) - { - me.viewport.applet.currentAlignFrame = me; - } - }); - viewport.applet.validate(); + embedAlignFrameInApplet(viewport.applet); } else { @@ -3409,19 +3793,68 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, // if (embedMenuIfNeeded(alignPanel)) { - // adjust for status bar height too - alignPanel.setSize(getSize().width, getSize().height - - statusBar.HEIGHT); + /* + * adjust for status bar height too. ? pointless as overridden by layout + * manager + */ + alignPanel.setSize(getSize().width, + getSize().height - statusBar.getHeight()); } add(statusBar, BorderLayout.SOUTH); add(alignPanel, BorderLayout.CENTER); // and register with the applet so it can pass external API calls to us - jalview.bin.JalviewLite.addFrame(this, title, DEFAULT_WIDTH, - DEFAULT_HEIGHT); + jalview.bin.JalviewLite.addFrame(this, this.getTitle(), frameWidth, + frameHeight); } } /** + * Add the components of this AlignFrame to the applet container. + * + * @param theApplet + */ + public void embedAlignFrameInApplet(final JalviewLite theApplet) + { + // //// + // Explicitly build the embedded menu panel for the on-page applet + // + // view cannot be closed if its actually on the page + fileMenu.remove(closeMenuItem); + fileMenu.remove(3); // Remove Separator + // construct embedded menu, using default font + embeddedMenu = makeEmbeddedPopupMenu(alignFrameMenuBar, false, false); + // and actually add the components to the applet area + theApplet.setLayout(new BorderLayout()); + theApplet.add(embeddedMenu, BorderLayout.NORTH); + theApplet.add(statusBar, BorderLayout.SOUTH); + // TODO should size be left to the layout manager? + alignPanel.setSize(theApplet.getSize().width, + theApplet.getSize().height - embeddedMenu.getHeight() + - statusBar.getHeight()); + theApplet.add(alignPanel, BorderLayout.CENTER); + final AlignFrame me = this; + theApplet.addFocusListener(new FocusListener() + { + + @Override + public void focusLost(FocusEvent e) + { + if (theApplet.currentAlignFrame == me) + { + theApplet.currentAlignFrame = null; + } + } + + @Override + public void focusGained(FocusEvent e) + { + theApplet.currentAlignFrame = me; + } + }); + theApplet.validate(); + } + + /** * create a new binding between structures in an existing jmol viewer instance * and an alignpanel with sequences that have existing PDBFile entries. Note, * this does not open a new Jmol window, or modify the display of the @@ -3437,10 +3870,10 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, public SequenceStructureBinding addStructureViewInstance( Object jmolviewer, String[] sequenceIds) { - org.jmol.api.JmolViewer viewer = null; + Viewer viewer = null; try { - viewer = (org.jmol.api.JmolViewer) jmolviewer; + viewer = (Viewer) jmolviewer; } catch (ClassCastException ex) { System.err.println("Unsupported viewer object :" @@ -3482,12 +3915,11 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, return null; } } - ExtJmol jmv = null; + AAStructureBindingModel jmv = null; // TODO: search for a jmv that involves viewer if (jmv == null) { // create a new viewer/jalview binding. - jmv = new ExtJmol(viewer, alignPanel, new SequenceI[][] - { seqs }); + jmv = new ExtJmol(viewer, alignPanel, new SequenceI[][] { seqs }); } return jmv; @@ -3513,7 +3945,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, boolean needtoadd = false; if (toaddpdb != null) { - Vector pdbe = toaddpdb.getPDBId(); + Vector pdbe = toaddpdb.getAllPDBEntries(); PDBEntry pdbentry = null; if (pdbe != null && pdbe.size() > 0) { @@ -3554,6 +3986,8 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, } pdbentry.getProperty().put("protocol", protocol); toaddpdb.addPDBId(pdbentry); + alignPanel.getStructureSelectionManager() + .registerPDBEntry(pdbentry); } } return true; @@ -3568,8 +4002,8 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, { if (seqs[i] != null) { - sequences.addElement(new Object[] - { seqs[i], (chains != null) ? chains[i] : null }); + sequences.addElement(new Object[] { seqs[i], + (chains != null) ? chains[i] : null }); } } seqs = new SequenceI[sequences.size()]; @@ -3582,8 +4016,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, chains[i] = (String) oj[1]; } } - return new Object[] - { seqs, chains }; + return new Object[] { seqs, chains }; } @@ -3761,4 +4194,46 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, return false; } + public SplitFrame getSplitFrame() + { + return this.splitFrame; + } + + public void setSplitFrame(SplitFrame sf) + { + this.splitFrame = sf; + } + + // may not need this + @Override + public void setShowSeqFeatures(boolean b) + { + // showSeqFeatures.setSelected(b); + viewport.setShowSequenceFeatures(b); + + } + + @Override + public void setMenusForViewport() + { + // setMenusFromViewport(viewport); + + } + + @Override + public void refreshFeatureUI(boolean enableIfNecessary) + { + if (enableIfNecessary) + { + sequenceFeatures.setState(true); + alignPanel.av.setShowSequenceFeatures(true); + } + } + + @Override + public FeatureSettingsControllerI getFeatureSettingsUI() + { + return alignPanel.av.featureSettings; + } + }