X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fappletgui%2FAPopupMenu.java;h=bf17fb0dc757aa821df5e33eb71eef5719001297;hb=a8f483d04205bb8273ee311c12968b7e86d205fa;hp=ff1c3c884e6b72e22af47aedf9fbaa801ad422ff;hpb=c35461ed2a5a258cab842e8ccb89b7a973722799;p=jalview.git diff --git a/src/jalview/appletgui/APopupMenu.java b/src/jalview/appletgui/APopupMenu.java old mode 100755 new mode 100644 index ff1c3c8..bf17fb0 --- a/src/jalview/appletgui/APopupMenu.java +++ b/src/jalview/appletgui/APopupMenu.java @@ -1,22 +1,21 @@ /* - * Jalview - A Sequence Alignment Editor and Viewer - * Copyright (C) 2007 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle - * - * This program 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 2 - * of the License, or (at your option) any later version. - * - * This program 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 this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8.2) + * Copyright (C) 2014 The Jalview Authors + * + * This file is part of Jalview. + * + * Jalview is free software: you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + * + * 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 . + * The Jalview Authors are detailed in the 'AUTHORS' file. */ - package jalview.appletgui; import java.util.*; @@ -28,62 +27,117 @@ import jalview.analysis.*; import jalview.commands.*; import jalview.datamodel.*; import jalview.schemes.*; +import jalview.util.MessageManager; +import jalview.util.UrlLink; import jalview.io.AppletFormatAdapter; +import jalview.io.SequenceAnnotationReport; -public class APopupMenu - extends java.awt.PopupMenu implements ActionListener, ItemListener +public class APopupMenu extends java.awt.PopupMenu implements + ActionListener, ItemListener { Menu groupMenu = new Menu(); + MenuItem editGroupName = new MenuItem(); + protected MenuItem clustalColour = new MenuItem(); + protected MenuItem zappoColour = new MenuItem(); + protected MenuItem taylorColour = new MenuItem(); + protected MenuItem hydrophobicityColour = new MenuItem(); + protected MenuItem helixColour = new MenuItem(); + protected MenuItem strandColour = new MenuItem(); + protected MenuItem turnColour = new MenuItem(); + protected MenuItem buriedColour = new MenuItem(); + protected CheckboxMenuItem abovePIDColour = new CheckboxMenuItem(); + protected MenuItem userDefinedColour = new MenuItem(); + protected MenuItem PIDColour = new MenuItem(); + protected MenuItem BLOSUM62Colour = new MenuItem(); + MenuItem noColourmenuItem = new MenuItem(); + protected CheckboxMenuItem conservationMenuItem = new CheckboxMenuItem(); final AlignmentPanel ap; + MenuItem unGroupMenuItem = new MenuItem(); + + MenuItem createGroupMenuItem = new MenuItem(); + MenuItem nucleotideMenuItem = new MenuItem(); + Menu colourMenu = new Menu(); + CheckboxMenuItem showBoxes = new CheckboxMenuItem(); + CheckboxMenuItem showText = new CheckboxMenuItem(); + CheckboxMenuItem showColourText = new CheckboxMenuItem(); - Menu editMenu = new Menu("Edit"); - MenuItem copy = new MenuItem("Copy (Jalview Only)"); - MenuItem cut = new MenuItem("Cut (Jalview Only)"); - MenuItem toUpper = new MenuItem("To Upper Case"); - MenuItem toLower = new MenuItem("To Lower Case"); - MenuItem toggleCase = new MenuItem("Toggle Case"); + + CheckboxMenuItem displayNonconserved = new CheckboxMenuItem(); + + Menu editMenu = new Menu(MessageManager.getString("action.edit")); + + MenuItem copy = new MenuItem(MessageManager.getString("label.jalview_copy")); + + MenuItem cut = new MenuItem(MessageManager.getString("label.jalview_cut")); + + MenuItem toUpper = new MenuItem(MessageManager.getString("label.to_upper_case")); + + MenuItem toLower = new MenuItem(MessageManager.getString("label.to_lower_case")); + + MenuItem toggleCase = new MenuItem(MessageManager.getString("label.toggle_case")); + Menu outputmenu = new Menu(); + Menu seqMenu = new Menu(); + MenuItem pdb = new MenuItem(); + MenuItem hideSeqs = new MenuItem(); + MenuItem repGroup = new MenuItem(); - MenuItem sequenceName = new MenuItem("Edit Name/Description"); - MenuItem sequenceFeature = new MenuItem("Create Sequence Feature"); - MenuItem editSequence = new MenuItem("Edit Sequence"); + + MenuItem sequenceName = new MenuItem(MessageManager.getString("label.edit_name_description")); + + MenuItem sequenceFeature = new MenuItem(MessageManager.getString("label.create_sequence_feature")); + + MenuItem editSequence = new MenuItem(MessageManager.getString("label.edit_sequence")); + + MenuItem sequenceDetails = new MenuItem(MessageManager.getString("label.sequence_details") + "..."); + + MenuItem selSeqDetails = new MenuItem(MessageManager.getString("label.sequence_details") + "..."); Sequence seq; + MenuItem revealAll = new MenuItem(); + + MenuItem revealSeq = new MenuItem(); + + /** + * index of sequence to be revealed + */ + int revealSeq_index = -1; + Menu menu1 = new Menu(); public APopupMenu(AlignmentPanel apanel, final Sequence seq, Vector links) { - /////////////////////////////////////////////////////////// + // ///////////////////////////////////////////////////////// // If this is activated from the sequence panel, the user may want to // edit or annotate a particular residue. Therefore display the residue menu // // If from the IDPanel, we must display the sequence menu - ////////////////////////////////////////////////////////// + // //////////////////////////////////////////////////////// this.ap = apanel; this.seq = seq; @@ -91,17 +145,15 @@ public class APopupMenu try { jbInit(); - } - catch (Exception e) + } catch (Exception e) { e.printStackTrace(); } - for (int i = 0; i < jalview.io.AppletFormatAdapter.WRITEABLE_FORMATS.length; - i++) + for (int i = 0; i < jalview.io.AppletFormatAdapter.WRITEABLE_FORMATS.length; i++) { - MenuItem item = new MenuItem(jalview.io.AppletFormatAdapter. - WRITEABLE_FORMATS[i]); + MenuItem item = new MenuItem( + jalview.io.AppletFormatAdapter.WRITEABLE_FORMATS[i]); item.addActionListener(this); outputmenu.add(item); @@ -111,13 +163,18 @@ public class APopupMenu if (sg != null && sg.getSize() > 0) { - editGroupName.setLabel(sg.getName()); + editGroupName.setLabel(MessageManager.formatMessage("label.name_param", new String[]{sg.getName()})); showText.setState(sg.getDisplayText()); showColourText.setState(sg.getColourText()); showBoxes.setState(sg.getDisplayBoxes()); - if (!ap.av.alignment.getGroups().contains(sg)) + displayNonconserved.setState(sg.getShowNonconserved()); + if (!ap.av.getAlignment().getGroups().contains(sg)) { + menu1.setLabel(MessageManager.getString("action.edit_new_group")); groupMenu.remove(unGroupMenuItem); + } else { + menu1.setLabel(MessageManager.getString("action.edit_group")); + groupMenu.remove(createGroupMenuItem); } } @@ -127,98 +184,186 @@ public class APopupMenu remove(groupMenu); } - if (links != null && links.size()>0) + if (links != null && links.size() > 0) { - Menu linkMenu = new Menu("Link"); + Menu linkMenu = new Menu(MessageManager.getString("action.link")); String link; for (int i = 0; i < links.size(); i++) { link = links.elementAt(i).toString(); - final String target = link.substring(0, link.indexOf("|")); - - final String url; - - if (link.indexOf("$SEQUENCE_ID$") > -1) + UrlLink urlLink = new UrlLink(link); + if (!urlLink.isValid()) + { + System.err.println(urlLink.getInvalidMessage()); + continue; + } + final String target = urlLink.getTarget(); // link.substring(0, + // link.indexOf("|")); + final String label = urlLink.getLabel(); + if (seq != null && urlLink.isDynamic()) { - // Substitute SEQUENCE_ID string and any matching database reference accessions - String url_pref = link.substring(link.indexOf("|") + 1, - link.indexOf("$SEQUENCE_ID$")); - - String url_suff = link.substring(link.indexOf("$SEQUENCE_ID$") + 13); // collect matching db-refs - DBRefEntry[] dbr = jalview.util.DBRefUtils.selectRefs(seq.getDBRef(), new String[]{target}); + DBRefEntry[] dbr = jalview.util.DBRefUtils.selectRefs( + seq.getDBRef(), new String[] + { target }); // collect id string too String id = seq.getName(); - if (id.indexOf("|") > -1) + String descr = seq.getDescription(); + if (descr != null && descr.length() < 1) { - id = id.substring(id.lastIndexOf("|") + 1); + descr = null; } - if (dbr!=null) + if (dbr != null) { - for (int r=0;r -1) { // Substitute SEQUENCE_ID + * string and any matching database reference accessions String url_pref + * = link.substring(link.indexOf("|") + 1, + * link.indexOf("$SEQUENCE_ID$")); + * + * String url_suff = link.substring(link.indexOf("$SEQUENCE_ID$") + 13); + * // collect matching db-refs DBRefEntry[] dbr = + * jalview.util.DBRefUtils.selectRefs(seq.getDBRef(), new + * String[]{target}); // collect id string too String id = + * seq.getName(); if (id.indexOf("|") > -1) { id = + * id.substring(id.lastIndexOf("|") + 1); } if (dbr!=null) { for (int + * r=0;r 0) { - seqMenu.add(linkMenu); - } - else - { - add(linkMenu); + if (seq != null) + { + seqMenu.add(linkMenu); + } + else + { + add(linkMenu); + } } } + // TODO: add group link menu entry here if (seq != null) { seqMenu.setLabel(seq.getName()); - repGroup.setLabel("Represent Group with " + seq.getName()); + repGroup.setLabel(MessageManager.formatMessage("label.represent_group_with", new String[]{seq.getName()})); } else { remove(seqMenu); } - if (!ap.av.hasHiddenRows) + if (!ap.av.hasHiddenRows()) { remove(revealAll); + remove(revealSeq); + } + else + { + final int index = ap.av.getAlignment().findIndex(seq); + + if (ap.av.adjustForHiddenSeqs(index) + - ap.av.adjustForHiddenSeqs(index - 1) > 1) + { + revealSeq_index = index; + } + else + { + remove(revealSeq); + } } } + /** * add a show URL menu item to the given linkMenu + * * @param linkMenu - * @param target - menu label string - * @param url - url to open + * @param target + * - menu label string + * @param url + * - url to open */ - private void addshowLink(Menu linkMenu, final String target, final String url) + private void addshowLink(Menu linkMenu, final String target, + final String url) { addshowLink(linkMenu, target, target, url); } + /** * add a show URL menu item to the given linkMenu + * * @param linkMenu - * @param target - URL target window - * @param label - menu label string - * @param url - url to open + * @param target + * - URL target window + * @param label + * - menu label string + * @param url + * - url to open */ - private void addshowLink(Menu linkMenu, final String target, final String label, final String url) + private void addshowLink(Menu linkMenu, final String target, + final String label, final String url) { MenuItem item = new MenuItem(label); item.addActionListener(new java.awt.event.ActionListener() @@ -230,7 +375,6 @@ public class APopupMenu }); linkMenu.add(item); } - public void itemStateChanged(ItemEvent evt) { @@ -250,6 +394,10 @@ public class APopupMenu { showBoxes_itemStateChanged(); } + else if (evt.getSource() == displayNonconserved) + { + this.showNonconserved_itemStateChanged(); + } } public void actionPerformed(ActionEvent evt) @@ -317,10 +465,23 @@ public class APopupMenu unGroupMenuItem_actionPerformed(); } + else if (source == createGroupMenuItem) + { + createGroupMenuItem_actionPerformed(); + } + else if (source == sequenceName) { editName(); } + else if (source == sequenceDetails) + { + showSequenceDetails(); + } + else if (source == selSeqDetails) + { + showSequenceSelectionDetails(); + } else if (source == pdb) { addPDB(); @@ -333,6 +494,10 @@ public class APopupMenu { hideSequences(true); } + else if (source == revealSeq) + { + ap.av.showSequence(revealSeq_index); + } else if (source == revealAll) { ap.av.showAllHiddenSeqs(); @@ -340,14 +505,10 @@ public class APopupMenu else if (source == editGroupName) { - EditNameDialog dialog = new EditNameDialog( - getGroup().getName(), - getGroup().getDescription(), - " Group Name", - "Group Description", - ap.alignFrame, - "Edit Group Name / Description", - 500,100, true); + EditNameDialog dialog = new EditNameDialog(getGroup().getName(), + getGroup().getDescription(), " Group Name", + "Group Description", ap.alignFrame, + "Edit Group Name / Description", 500, 100, true); if (dialog.accept) { @@ -364,39 +525,34 @@ public class APopupMenu { ap.alignFrame.cut_actionPerformed(); } - else if(source == editSequence) + else if (source == editSequence) { SequenceGroup sg = ap.av.getSelectionGroup(); - if(sg!=null) + if (sg != null) { if (seq == null) seq = (Sequence) sg.getSequenceAt(0); EditNameDialog dialog = new EditNameDialog(seq.getSequenceAsString( - sg.getStartRes(), - sg.getEndRes() + 1), - null, - "Edit Sequence ", - null, + sg.getStartRes(), sg.getEndRes() + 1), null, + "Edit Sequence ", null, - ap.alignFrame, - "Edit Sequence", - 500, 100, true); + ap.alignFrame, "Edit Sequence", 500, 100, true); if (dialog.accept) { - EditCommand editCommand = new EditCommand( - "Edit Sequences", EditCommand.REPLACE, - dialog.getName().replace(' ', ap.av.getGapCharacter()), - sg.getSequencesAsArray(ap.av.hiddenRepSequences), - sg.getStartRes(), sg.getEndRes()+1, ap.av.alignment - ); + EditCommand editCommand = new EditCommand("Edit Sequences", + EditCommand.REPLACE, dialog.getName().replace(' ', + ap.av.getGapCharacter()), + sg.getSequencesAsArray(ap.av.getHiddenRepSequences()), + sg.getStartRes(), sg.getEndRes() + 1, + ap.av.getAlignment()); ap.alignFrame.addHistoryItem(editCommand); - ap.av.firePropertyChange("alignment", null, - ap.av.getAlignment().getSequences()); + ap.av.firePropertyChange("alignment", null, ap.av.getAlignment() + .getSequences()); } } } @@ -406,45 +562,8 @@ public class APopupMenu Vector regions = new Vector(); if (sg != null) { - int start = sg.getStartRes(); - int end = sg.getEndRes() + 1; - - do - { - if (ap.av.hasHiddenColumns) - { - if (start == 0) - { - start = ap.av.colSel.adjustForHiddenColumns(start); - } - - end = ap.av.colSel.getHiddenBoundaryRight(start); - if (start == end) - { - end = sg.getEndRes() + 1; - } - if (end > sg.getEndRes()) - { - end = sg.getEndRes() + 1; - } - } - - regions.addElement(new int[] - {start, end}); - - if (ap.av.hasHiddenColumns) - { - start = ap.av.colSel.adjustForHiddenColumns(end); - start = ap.av.colSel.getHiddenBoundaryLeft(start) + 1; - } - } - while (end < sg.getEndRes()); - - int[][] startEnd = new int[regions.size()][2]; - for (int i = 0; i < regions.size(); i++) - { - startEnd[i] = (int[]) regions.elementAt(i); - } + int[][] startEnd = ap.av.getVisibleRegionBoundaries( + sg.getStartRes(), sg.getEndRes() + 1); String description; int caseChange; @@ -465,19 +584,18 @@ public class APopupMenu caseChange = ChangeCaseCommand.TO_LOWER; } - ChangeCaseCommand caseCommand = new ChangeCaseCommand( - description, sg.getSequencesAsArray(ap.av.hiddenRepSequences), - startEnd, caseChange - ); + ChangeCaseCommand caseCommand = new ChangeCaseCommand(description, + sg.getSequencesAsArray(ap.av.getHiddenRepSequences()), + startEnd, caseChange); ap.alignFrame.addHistoryItem(caseCommand); - ap.av.firePropertyChange("alignment", null, - ap.av.getAlignment().getSequences()); + ap.av.firePropertyChange("alignment", null, ap.av.getAlignment() + .getSequences()); } } - else if(source == sequenceFeature) + else if (source == sequenceFeature) { SequenceGroup sg = ap.av.getSelectionGroup(); if (sg == null) @@ -485,21 +603,31 @@ public class APopupMenu return; } - int gSize = sg.getSize(); - SequenceI[] seqs = new SequenceI[gSize]; - SequenceFeature[] features = new SequenceFeature[gSize]; + int rsize = 0, gSize = sg.getSize(); + SequenceI[] rseqs, seqs = new SequenceI[gSize]; + SequenceFeature[] tfeatures, features = new SequenceFeature[gSize]; for (int i = 0; i < gSize; i++) { - seqs[i] = sg.getSequenceAt(i); int start = sg.getSequenceAt(i).findPosition(sg.getStartRes()); int end = sg.findEndRes(sg.getSequenceAt(i)); - features[i] = new SequenceFeature(null, null, null, start, end, - "Jalview"); + if (start <= end) + { + seqs[rsize] = sg.getSequenceAt(i); + features[rsize] = new SequenceFeature(null, null, null, start, + end, "Jalview"); + rsize++; + } } - - if (ap.seqPanel.seqCanvas.getFeatureRenderer() - .amendFeatures(seqs, features, true, ap)) + rseqs = new SequenceI[rsize]; + tfeatures = new SequenceFeature[rsize]; + System.arraycopy(seqs, 0, rseqs, 0, rsize); + System.arraycopy(features, 0, tfeatures, 0, rsize); + features = tfeatures; + seqs = rseqs; + + if (ap.seqPanel.seqCanvas.getFeatureRenderer().amendFeatures(seqs, + features, true, ap)) { ap.alignFrame.sequenceFeatures.setState(true); ap.av.showSequenceFeatures(true); @@ -520,26 +648,63 @@ public class APopupMenu Frame frame = new Frame(); frame.add(cap); jalview.bin.JalviewLite.addFrame(frame, - "Selection output - " + e.getActionCommand(), - 600, 500); + MessageManager.formatMessage("label.selection_output_command", new String[]{e.getActionCommand()}),600, 500); + // JBPNote: getSelectionAsNewSequence behaviour has changed - this method + // now returns a full copy of sequence data + // TODO consider using getSequenceSelection instead here cap.setText(new jalview.io.AppletFormatAdapter().formatSequences( - e.getActionCommand(), - new Alignment(ap.av.getSelectionAsNewSequence()), - ap.av.showJVSuffix)); + e.getActionCommand(), + new Alignment(ap.av.getSelectionAsNewSequence()), + ap.av.showJVSuffix)); + + } + protected void showSequenceSelectionDetails() + { + createSequenceDetailsReport(ap.av.getSequenceSelection()); + } + + protected void showSequenceDetails() + { + createSequenceDetailsReport(new SequenceI[] + { seq }); + } + + public void createSequenceDetailsReport(SequenceI[] sequences) + { + + CutAndPasteTransfer cap = new CutAndPasteTransfer(false, ap.alignFrame); + + StringBuffer contents = new StringBuffer(); + for (SequenceI seq : sequences) + { + contents.append(MessageManager.formatMessage("label.annotation_for_displayid",new String[]{seq.getDisplayId(true)})); + new SequenceAnnotationReport(null) + .createSequenceAnnotationReport( + contents, + seq, + true, + true, + false, + (ap.seqPanel.seqCanvas.fr != null) ? ap.seqPanel.seqCanvas.fr.minmax + : null); + contents.append("

"); + } + Frame frame = new Frame(); + frame.add(cap); + jalview.bin.JalviewLite.addFrame(frame, "Sequence Details for " + + (sequences.length == 1 ? sequences[0].getDisplayId(true) + : "Selection"), 600, 500); + cap.setText(MessageManager.formatMessage("label.html_content", new String[]{contents.toString()})); } void editName() { - EditNameDialog dialog = new EditNameDialog( - seq.getName(), - seq.getDescription(), - " Sequence Name", - "Sequence Description", - ap.alignFrame, - "Edit Sequence Name / Description", - 500,100, true); + EditNameDialog dialog = new EditNameDialog(seq.getName(), + seq.getDescription(), " Sequence Name", + "Sequence Description", ap.alignFrame, + "Edit Sequence Name / Description", 500, 100, true); if (dialog.accept) { @@ -551,75 +716,79 @@ public class APopupMenu void addPDB() { - if(seq.getPDBId()!=null) + if (seq.getPDBId() != null) { - PDBEntry entry = (PDBEntry)seq.getPDBId().firstElement(); + PDBEntry entry = (PDBEntry) seq.getPDBId().firstElement(); - if ( ap.av.applet.jmolAvailable ) - new jalview.appletgui.AppletJmol(entry, - new Sequence[]{seq}, - null, - ap, - AppletFormatAdapter.URL); - else - new MCview.AppletPDBViewer(entry, - new Sequence[]{seq}, - null, - ap, - AppletFormatAdapter.URL); + if (ap.av.applet.jmolAvailable) + new jalview.appletgui.AppletJmol(entry, new Sequence[] + { seq }, null, ap, AppletFormatAdapter.URL); + else + new MCview.AppletPDBViewer(entry, new Sequence[] + { seq }, null, ap, AppletFormatAdapter.URL); } else { CutAndPasteTransfer cap = new CutAndPasteTransfer(true, ap.alignFrame); - cap.setText("Paste your PDB file here."); + cap.setText(MessageManager.getString("label.paste_pdb_file")); cap.setPDBImport(seq); Frame frame = new Frame(); frame.add(cap); - jalview.bin.JalviewLite.addFrame(frame, "Paste PDB file ", 400, 300); + jalview.bin.JalviewLite.addFrame(frame, + MessageManager.formatMessage("label.paste_pdb_file_for_sequence", new String[]{seq.getName()}), 400, 300); } } - private void jbInit() - throws Exception + private void jbInit() throws Exception { - groupMenu.setLabel("Group"); - groupMenu.setLabel("Selection"); + groupMenu.setLabel(MessageManager.getString("label.selection")); sequenceFeature.addActionListener(this); editGroupName.addActionListener(this); - unGroupMenuItem.setLabel("Remove Group"); + unGroupMenuItem.setLabel(MessageManager.getString("action.remove_group")); unGroupMenuItem.addActionListener(this); - nucleotideMenuItem.setLabel("Nucleotide"); + createGroupMenuItem.setLabel(MessageManager.getString("action.create_group")); + createGroupMenuItem.addActionListener(this); + + nucleotideMenuItem.setLabel(MessageManager.getString("label.nucleotide")); nucleotideMenuItem.addActionListener(this); conservationMenuItem.addItemListener(this); abovePIDColour.addItemListener(this); - colourMenu.setLabel("Group Colour"); - showBoxes.setLabel("Boxes"); + colourMenu.setLabel(MessageManager.getString("label.group_colour")); + showBoxes.setLabel(MessageManager.getString("action.boxes")); showBoxes.setState(true); showBoxes.addItemListener(this); sequenceName.addActionListener(this); - - showText.setLabel("Text"); + sequenceDetails.addActionListener(this); + selSeqDetails.addActionListener(this); + displayNonconserved.setLabel(MessageManager.getString("label.show_non_conversed")); + displayNonconserved.setState(false); + displayNonconserved.addItemListener(this); + showText.setLabel(MessageManager.getString("action.text")); showText.addItemListener(this); - showColourText.setLabel("Colour Text"); + showColourText.setLabel(MessageManager.getString("label.colour_text")); showColourText.addItemListener(this); - outputmenu.setLabel("Output to Textbox..."); - seqMenu.setLabel("Sequence"); - pdb.setLabel("View PDB Structure"); - hideSeqs.setLabel("Hide Sequences"); - repGroup.setLabel("Represent Group with"); - revealAll.setLabel("Reveal All"); - menu1.setLabel("Group"); + outputmenu.setLabel(MessageManager.getString("label.out_to_textbox")); + seqMenu.setLabel(MessageManager.getString("label.sequence")); + pdb.setLabel(MessageManager.getString("label.view_pdb_structure")); + hideSeqs.setLabel(MessageManager.getString("action.hide_sequences")); + repGroup.setLabel(MessageManager.formatMessage("label.represent_group_with", new String[]{""})); + revealAll.setLabel(MessageManager.getString("action.reveal_all")); + revealSeq.setLabel(MessageManager.getString("action.reveal_sequences")); + menu1.setLabel(MessageManager.getString("label.group")+":"); add(groupMenu); this.add(seqMenu); this.add(hideSeqs); + this.add(revealSeq); this.add(revealAll); - groupMenu.add(editGroupName); + // groupMenu.add(selSeqDetails); groupMenu.add(editMenu); groupMenu.add(outputmenu); groupMenu.add(sequenceFeature); + groupMenu.add(createGroupMenuItem); + groupMenu.add(unGroupMenuItem); groupMenu.add(menu1); colourMenu.add(noColourmenuItem); @@ -682,18 +851,25 @@ public class APopupMenu toLower.addActionListener(this); editMenu.add(toggleCase); seqMenu.add(sequenceName); - seqMenu.add(pdb); + // seqMenu.add(sequenceDetails); + + if (!ap.av.applet.useXtrnalSviewer) + { + seqMenu.add(pdb); + } seqMenu.add(repGroup); - menu1.add(unGroupMenuItem); + menu1.add(editGroupName); menu1.add(colourMenu); menu1.add(showBoxes); menu1.add(showText); menu1.add(showColourText); + menu1.add(displayNonconserved); toggleCase.addActionListener(this); pdb.addActionListener(this); hideSeqs.addActionListener(this); repGroup.addActionListener(this); revealAll.addActionListener(this); + revealSeq.addActionListener(this); } void refresh() @@ -704,8 +880,7 @@ public class APopupMenu protected void clustalColour_actionPerformed() { SequenceGroup sg = getGroup(); - sg.cs = new ClustalxColourScheme(sg.getSequences(ap.av.hiddenRepSequences), - ap.av.alignment.getWidth()); + sg.cs = new ClustalxColourScheme(sg, ap.av.getHiddenRepSequences()); refresh(); } @@ -767,18 +942,18 @@ public class APopupMenu if (abovePIDColour.getState()) { - sg.cs.setConsensus(AAFrequency.calculate(sg.getSequences(ap.av. - hiddenRepSequences), 0, - ap.av.alignment.getWidth())); - int threshold = SliderPanel.setPIDSliderSource(ap, sg.cs, - getGroup().getName()); + sg.cs.setConsensus(AAFrequency.calculate(sg.getSequences(ap.av + .getHiddenRepSequences()), 0, ap.av.getAlignment().getWidth())); + int threshold = SliderPanel.setPIDSliderSource(ap, sg.cs, getGroup() + .getName()); sg.cs.setThreshold(threshold, ap.av.getIgnoreGapsConsensus()); SliderPanel.showPIDSlider(); } - else // remove PIDColouring + else + // remove PIDColouring { sg.cs.setThreshold(0, ap.av.getIgnoreGapsConsensus()); } @@ -796,9 +971,8 @@ public class APopupMenu { SequenceGroup sg = getGroup(); sg.cs = new PIDColourScheme(); - sg.cs.setConsensus(AAFrequency.calculate(sg.getSequences(ap.av. - hiddenRepSequences), 0, - ap.av.alignment.getWidth())); + sg.cs.setConsensus(AAFrequency.calculate(sg.getSequences(ap.av + .getHiddenRepSequences()), 0, ap.av.getAlignment().getWidth())); refresh(); } @@ -808,9 +982,8 @@ public class APopupMenu sg.cs = new Blosum62ColourScheme(); - sg.cs.setConsensus(AAFrequency.calculate(sg.getSequences(ap.av. - hiddenRepSequences), 0, - ap.av.alignment.getWidth())); + sg.cs.setConsensus(AAFrequency.calculate(sg.getSequences(ap.av + .getHiddenRepSequences()), 0, ap.av.getAlignment().getWidth())); refresh(); } @@ -832,21 +1005,15 @@ public class APopupMenu if (conservationMenuItem.getState()) { - Conservation c = new Conservation("Group", - ResidueProperties.propHash, 3, - sg.getSequences(ap.av. - hiddenRepSequences), 0, - ap.av.alignment.getWidth()); - - c.calculate(); - c.verdict(false, ap.av.ConsPercGaps); - - sg.cs.setConservation(c); - + sg.cs.setConservation(Conservation.calculateConservation("Group", + ResidueProperties.propHash, 3, sg.getSequences(ap.av + .getHiddenRepSequences()), 0, ap.av.getAlignment() + .getWidth(), false, ap.av.getConsPercGaps(), false)); SliderPanel.setConservationSlider(ap, sg.cs, sg.getName()); SliderPanel.showConservationSlider(); } - else // remove ConservationColouring + else + // remove ConservationColouring { sg.cs.setConservation(null); } @@ -861,7 +1028,7 @@ public class APopupMenu // this method won't add a new group if it already exists if (sg != null) { - ap.av.alignment.addGroup(sg); + ap.av.getAlignment().addGroup(sg); } return sg; @@ -870,11 +1037,17 @@ public class APopupMenu void unGroupMenuItem_actionPerformed() { SequenceGroup sg = ap.av.getSelectionGroup(); - ap.av.alignment.deleteGroup(sg); + ap.av.getAlignment().deleteGroup(sg); ap.av.setSelectionGroup(null); ap.paintAlignment(true); } + void createGroupMenuItem_actionPerformed() + { + getGroup(); // implicitly create group + refresh(); + } + public void showColourText_itemStateChanged() { getGroup().setColourText(showColourText.getState()); @@ -887,6 +1060,12 @@ public class APopupMenu refresh(); } + public void showNonconserved_itemStateChanged() + { + getGroup().setShowNonconserved(this.displayNonconserved.getState()); + refresh(); + } + public void showBoxes_itemStateChanged() { getGroup().setDisplayBoxes(showBoxes.getState()); @@ -899,7 +1078,7 @@ public class APopupMenu if (sg == null || sg.getSize() < 1) { ap.av.hideSequence(new SequenceI[] - {seq}); + { seq }); return; } @@ -924,6 +1103,7 @@ public class APopupMenu } ap.av.hideSequence(hseqs); + ap.av.sendSelection(); } }