X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FPopupMenu.java;h=3a99f9ece4a9508794b3eebe2c2f6aba8bf449cd;hb=7dc7fb2a35c435d825bc91c5ae60ec6073419a69;hp=ad3d6af347997305f9483e80c07b1b5dbf1e490d;hpb=2a36d880a6a221c6a46f4a24d10539073e40106d;p=jalview.git diff --git a/src/jalview/gui/PopupMenu.java b/src/jalview/gui/PopupMenu.java index ad3d6af..3a99f9e 100644 --- a/src/jalview/gui/PopupMenu.java +++ b/src/jalview/gui/PopupMenu.java @@ -20,31 +20,11 @@ */ package jalview.gui; -import java.awt.Color; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.util.Arrays; -import java.util.Collections; -import java.util.Hashtable; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; -import java.util.TreeMap; -import java.util.Vector; - -import javax.swing.ButtonGroup; -import javax.swing.JCheckBoxMenuItem; -import javax.swing.JColorChooser; -import javax.swing.JMenu; -import javax.swing.JMenuItem; -import javax.swing.JOptionPane; -import javax.swing.JPopupMenu; -import javax.swing.JRadioButtonMenuItem; - import jalview.analysis.AAFrequency; import jalview.analysis.AlignmentAnnotationUtils; import jalview.analysis.AlignmentUtils; import jalview.analysis.Conservation; +import jalview.bin.Cache; import jalview.commands.ChangeCaseCommand; import jalview.commands.EditCommand; import jalview.commands.EditCommand.Action; @@ -58,6 +38,8 @@ import jalview.datamodel.Sequence; import jalview.datamodel.SequenceFeature; import jalview.datamodel.SequenceGroup; import jalview.datamodel.SequenceI; +import jalview.io.FileFormatI; +import jalview.io.FileFormats; import jalview.io.FormatAdapter; import jalview.io.SequenceAnnotationReport; import jalview.schemes.AnnotationColourGradient; @@ -69,7 +51,6 @@ import jalview.schemes.HydrophobicColourScheme; import jalview.schemes.NucleotideColourScheme; import jalview.schemes.PIDColourScheme; import jalview.schemes.PurinePyrimidineColourScheme; -import jalview.schemes.ResidueProperties; import jalview.schemes.StrandColourScheme; import jalview.schemes.TaylorColourScheme; import jalview.schemes.TurnColourScheme; @@ -80,6 +61,27 @@ import jalview.util.GroupUrlLink.UrlStringTooLongException; import jalview.util.MessageManager; import jalview.util.UrlLink; +import java.awt.Color; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.Hashtable; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.TreeMap; +import java.util.Vector; + +import javax.swing.ButtonGroup; +import javax.swing.JCheckBoxMenuItem; +import javax.swing.JColorChooser; +import javax.swing.JMenu; +import javax.swing.JMenuItem; +import javax.swing.JPopupMenu; +import javax.swing.JRadioButtonMenuItem; + /** * DOCUMENT ME! * @@ -88,10 +90,6 @@ import jalview.util.UrlLink; */ public class PopupMenu extends JPopupMenu { - private static final String ALL_ANNOTATIONS = "All"; - - private static final String COMMA = ","; - JMenu groupMenu = new JMenu(); JMenuItem groupName = new JMenuItem(); @@ -112,8 +110,6 @@ public class PopupMenu extends JPopupMenu protected JRadioButtonMenuItem buriedColour = new JRadioButtonMenuItem(); - protected JCheckBoxMenuItem abovePIDColour = new JCheckBoxMenuItem(); - protected JRadioButtonMenuItem userDefinedColour = new JRadioButtonMenuItem(); protected JRadioButtonMenuItem PIDColour = new JRadioButtonMenuItem(); @@ -126,8 +122,14 @@ public class PopupMenu extends JPopupMenu JRadioButtonMenuItem noColourmenuItem = new JRadioButtonMenuItem(); + protected JCheckBoxMenuItem abovePIDColour = new JCheckBoxMenuItem(); + + protected JMenuItem modifyPID = new JMenuItem(); + protected JCheckBoxMenuItem conservationMenuItem = new JCheckBoxMenuItem(); + protected JMenuItem modifyConservation = new JMenuItem(); + AlignmentPanel ap; JMenu sequenceMenu = new JMenu(); @@ -137,7 +139,7 @@ public class PopupMenu extends JPopupMenu JMenuItem sequenceDetails = new JMenuItem(); JMenuItem sequenceSelDetails = new JMenuItem(); - + JMenuItem makeReferenceSeq = new JMenuItem(); JMenuItem chooseAnnotations = new JMenuItem(); @@ -176,12 +178,6 @@ public class PopupMenu extends JPopupMenu JMenu pdbMenu = new JMenu(); - JMenuItem pdbFromFile = new JMenuItem(); - - JMenuItem enterPDB = new JMenuItem(); - - JMenuItem discoverPDB = new JMenuItem(); - JMenu outputMenu = new JMenu(); JMenu seqShowAnnotationsMenu = new JMenu(); @@ -204,7 +200,7 @@ public class PopupMenu extends JPopupMenu JMenu jMenu1 = new JMenu(); - JMenuItem proteinStructureMenu = new JMenuItem(); + JMenuItem pdbStructureDialog = new JMenuItem(); JMenu rnaStructureMenu = new JMenu(); @@ -222,7 +218,7 @@ public class PopupMenu extends JPopupMenu * @param seq * DOCUMENT ME! */ - public PopupMenu(final AlignmentPanel ap, Sequence seq, Vector links) + public PopupMenu(final AlignmentPanel ap, Sequence seq, List links) { this(ap, seq, links, null); } @@ -235,7 +231,7 @@ public class PopupMenu extends JPopupMenu * @param groupLinks */ public PopupMenu(final AlignmentPanel ap, final SequenceI seq, - Vector links, Vector groupLinks) + List links, List groupLinks) { // ///////////////////////////////////////////////////////// // If this is activated from the sequence panel, the user may want to @@ -256,19 +252,17 @@ public class PopupMenu extends JPopupMenu colours.add(strandColour); colours.add(turnColour); colours.add(buriedColour); - colours.add(abovePIDColour); colours.add(userDefinedColour); colours.add(PIDColour); colours.add(BLOSUM62Colour); colours.add(purinePyrimidineColour); colours.add(RNAInteractionColour); - for (int i = 0; i < jalview.io.FormatAdapter.WRITEABLE_FORMATS.length; i++) + for (String ff : FileFormats.getInstance().getWritableFormats(true)) { - JMenuItem item = new JMenuItem( - jalview.io.FormatAdapter.WRITEABLE_FORMATS[i]); + JMenuItem item = new JMenuItem(ff); - item.addActionListener(new java.awt.event.ActionListener() + item.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) @@ -317,9 +311,13 @@ public class PopupMenu extends JPopupMenu sequenceMenu.setText(sequence.getName()); if (seq == ap.av.getAlignment().getSeqrep()) { - makeReferenceSeq.setText("Unmark representative"); - } else { - makeReferenceSeq.setText("Mark as representative"); + makeReferenceSeq.setText(MessageManager + .getString("action.unmark_as_reference")); + } + else + { + makeReferenceSeq.setText(MessageManager + .getString("action.set_as_reference")); } if (!ap.av.getAlignment().isNucleotide()) @@ -328,6 +326,7 @@ public class PopupMenu extends JPopupMenu } else { + int origCount = rnaStructureMenu.getItemCount(); /* * add menu items to 2D-render any alignment or sequence secondary * structure annotation @@ -345,9 +344,9 @@ public class PopupMenu extends JPopupMenu */ menuItem = new JMenuItem(); menuItem.setText(MessageManager.formatMessage( - "label.2d_rna_structure_line", new Object[] - { aa.label })); - menuItem.addActionListener(new java.awt.event.ActionListener() + "label.2d_rna_structure_line", + new Object[] { aa.label })); + menuItem.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) @@ -373,9 +372,9 @@ public class PopupMenu extends JPopupMenu // TODO: make rnastrucF a bit more nice menuItem = new JMenuItem(); menuItem.setText(MessageManager.formatMessage( - "label.2d_rna_sequence_name", new Object[] - { seq.getName() })); - menuItem.addActionListener(new java.awt.event.ActionListener() + "label.2d_rna_sequence_name", + new Object[] { seq.getName() })); + menuItem.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) @@ -388,11 +387,15 @@ public class PopupMenu extends JPopupMenu } } } + if (rnaStructureMenu.getItemCount() == origCount) + { + remove(rnaStructureMenu); + } } menuItem = new JMenuItem( MessageManager.getString("action.hide_sequences")); - menuItem.addActionListener(new java.awt.event.ActionListener() + menuItem.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) @@ -406,9 +409,9 @@ public class PopupMenu extends JPopupMenu && ap.av.getSelectionGroup().getSize() > 1) { menuItem = new JMenuItem(MessageManager.formatMessage( - "label.represent_group_with", new Object[] - { seq.getName() })); - menuItem.addActionListener(new java.awt.event.ActionListener() + "label.represent_group_with", + new Object[] { seq.getName() })); + menuItem.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) @@ -474,9 +477,6 @@ public class PopupMenu extends JPopupMenu if (sg != null && sg.getSize() > 0) { - groupName.setText(MessageManager.formatMessage("label.name_param", - new Object[] - { sg.getName() })); groupName.setText(MessageManager .getString("label.edit_name_and_description_current_group")); @@ -538,10 +538,19 @@ public class PopupMenu extends JPopupMenu noColourmenuItem.setSelected(true); } - if (sg.cs != null && sg.cs.conservationApplied()) + if (sg.cs != null) { - conservationMenuItem.setSelected(true); + if (sg.cs.conservationApplied()) + { + conservationMenuItem.setSelected(true); + } + if (sg.cs.getThreshold() > 0) + { + abovePIDColour.setSelected(true); + } } + modifyConservation.setEnabled(conservationMenuItem.isSelected()); + modifyPID.setEnabled(abovePIDColour.isSelected()); displayNonconserved.setSelected(sg.getShowNonconserved()); showText.setSelected(sg.getDisplayText()); showColourText.setSelected(sg.getColourText()); @@ -556,7 +565,7 @@ public class PopupMenu extends JPopupMenu SequenceI sqass = null; for (SequenceI sq : ap.av.getSequenceSelection()) { - Vector pes = sq.getDatasetSequence().getPDBId(); + Vector pes = sq.getDatasetSequence().getAllPDBEntries(); if (pes != null && pes.size() > 0) { reppdb.put(pes.get(0).getId(), pes.get(0)); @@ -600,131 +609,69 @@ public class PopupMenu extends JPopupMenu if (seq == null) { sequenceMenu.setVisible(false); - proteinStructureMenu.setVisible(false); + pdbStructureDialog.setVisible(false); rnaStructureMenu.setVisible(false); } if (links != null && links.size() > 0) { + addFeatureLinks(seq, links); + } + } - JMenu linkMenu = new JMenu(MessageManager.getString("action.link")); - Vector linkset = new Vector(); - for (int i = 0; i < links.size(); i++) - { - String link = links.elementAt(i).toString(); - UrlLink urlLink = null; - try - { - urlLink = new UrlLink(link); - } catch (Exception foo) - { - jalview.bin.Cache.log.error("Exception for URLLink '" + link - + "'", foo); - continue; - } - ; - if (!urlLink.isValid()) - { - jalview.bin.Cache.log.error(urlLink.getInvalidMessage()); - continue; - } - final String label = urlLink.getLabel(); - if (seq != null && urlLink.isDynamic()) - { - - // collect matching db-refs - DBRefEntry[] dbr = jalview.util.DBRefUtils.selectRefs( - seq.getDBRef(), new String[] - { urlLink.getTarget() }); - // collect id string too - String id = seq.getName(); - String descr = seq.getDescription(); - if (descr != null && descr.length() < 1) - { - descr = null; - } + /** + * Adds a 'Link' menu item with a sub-menu item for each hyperlink provided. + * + * @param seq + * @param links + */ + void addFeatureLinks(final SequenceI seq, List links) + { + JMenu linkMenu = new JMenu(MessageManager.getString("action.link")); + Map> linkset = new LinkedHashMap>(); - if (dbr != null) - { - for (int r = 0; r < dbr.length; r++) - { - if (id != null && dbr[r].getAccessionId().equals(id)) - { - // suppress duplicate link creation for the bare sequence ID - // string with this link - id = null; - } - // create Bare ID link for this RUL - String[] urls = urlLink.makeUrls(dbr[r].getAccessionId(), - true); - if (urls != null) - { - for (int u = 0; u < urls.length; u += 2) - { - if (!linkset.contains(urls[u] + "|" + urls[u + 1])) - { - linkset.addElement(urls[u] + "|" + urls[u + 1]); - addshowLink(linkMenu, label + "|" + urls[u], - urls[u + 1]); - } - } - } - } - } - if (id != null) - { - // create Bare ID link for this RUL - String[] urls = urlLink.makeUrls(id, true); - if (urls != null) - { - for (int u = 0; u < urls.length; u += 2) - { - if (!linkset.contains(urls[u] + "|" + urls[u + 1])) - { - linkset.addElement(urls[u] + "|" + urls[u + 1]); - addshowLink(linkMenu, label, urls[u + 1]); - } - } - } - } - // Create urls from description but only for URL links which are regex - // links - if (descr != null && urlLink.getRegexReplace() != null) - { - // create link for this URL from description where regex matches - String[] urls = urlLink.makeUrls(descr, true); - if (urls != null) - { - for (int u = 0; u < urls.length; u += 2) - { - if (!linkset.contains(urls[u] + "|" + urls[u + 1])) - { - linkset.addElement(urls[u] + "|" + urls[u + 1]); - addshowLink(linkMenu, label, urls[u + 1]); - } - } - } - } - } - else - { - if (!linkset.contains(label + "|" + urlLink.getUrl_prefix())) - { - linkset.addElement(label + "|" + urlLink.getUrl_prefix()); - // Add a non-dynamic link - addshowLink(linkMenu, label, urlLink.getUrl_prefix()); - } - } - } - if (sequence != null) + for (String link : links) + { + UrlLink urlLink = null; + try + { + urlLink = new UrlLink(link); + } catch (Exception foo) { - sequenceMenu.add(linkMenu); + Cache.log.error("Exception for URLLink '" + link + "'", foo); + continue; } - else + + if (!urlLink.isValid()) { - add(linkMenu); + Cache.log.error(urlLink.getInvalidMessage()); + continue; } + + urlLink.createLinksFromSeq(seq, linkset); + } + + addshowLinks(linkMenu, linkset.values()); + + // disable link menu if there are no valid entries + if (linkMenu.getItemCount() > 0) + { + linkMenu.setEnabled(true); } + else + { + linkMenu.setEnabled(false); + } + + if (sequence != null) + { + sequenceMenu.add(linkMenu); + } + else + { + add(linkMenu); + } + } /** @@ -748,7 +695,8 @@ public class PopupMenu extends JPopupMenu showMenu.removeAll(); hideMenu.removeAll(); - final List all = Arrays.asList(ALL_ANNOTATIONS); + final List all = Arrays.asList(new String[] { MessageManager + .getString("label.all") }); addAnnotationTypeToShowHide(showMenu, forSequences, "", all, true, true); addAnnotationTypeToShowHide(hideMenu, forSequences, "", all, true, false); @@ -766,17 +714,15 @@ public class PopupMenu extends JPopupMenu */ Map>> shownTypes = new LinkedHashMap>>(); Map>> hiddenTypes = new LinkedHashMap>>(); - AlignmentAnnotationUtils.getShownHiddenTypes(shownTypes, - hiddenTypes, - AlignmentAnnotationUtils.asList(annotations), - forSequences); + AlignmentAnnotationUtils.getShownHiddenTypes(shownTypes, hiddenTypes, + AlignmentAnnotationUtils.asList(annotations), forSequences); for (String calcId : hiddenTypes.keySet()) { for (List type : hiddenTypes.get(calcId)) { - addAnnotationTypeToShowHide(showMenu, forSequences, - calcId, type, false, true); + addAnnotationTypeToShowHide(showMenu, forSequences, calcId, type, + false, true); } } // grey out 'show annotations' if none are hidden @@ -786,8 +732,8 @@ public class PopupMenu extends JPopupMenu { for (List type : shownTypes.get(calcId)) { - addAnnotationTypeToShowHide(hideMenu, forSequences, - calcId, type, false, false); + addAnnotationTypeToShowHide(hideMenu, forSequences, calcId, type, + false, false); } } // grey out 'hide annotations' if none are shown @@ -843,20 +789,20 @@ public class PopupMenu extends JPopupMenu label = label.substring(1, label.length() - 1); // a, b, c final JMenuItem item = new JMenuItem(label); item.setToolTipText(calcId); - item.addActionListener(new java.awt.event.ActionListener() + item.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { - AlignmentUtils.showOrHideSequenceAnnotations(ap.getAlignment(), types, - forSequences, allTypes, actionIsShow); + AlignmentUtils.showOrHideSequenceAnnotations(ap.getAlignment(), + types, forSequences, allTypes, actionIsShow); refresh(); } }); showOrHideMenu.add(item); } - private void buildGroupURLMenu(SequenceGroup sg, Vector groupLinks) + private void buildGroupURLMenu(SequenceGroup sg, List groupLinks) { // TODO: usability: thread off the generation of group url content so root @@ -865,19 +811,15 @@ public class PopupMenu extends JPopupMenu // ID/regex match URLs groupLinksMenu = new JMenu( MessageManager.getString("action.group_link")); - JMenu[] linkMenus = new JMenu[] - { null, new JMenu(MessageManager.getString("action.ids")), + // three types of url that might be created. + JMenu[] linkMenus = new JMenu[] { null, + new JMenu(MessageManager.getString("action.ids")), new JMenu(MessageManager.getString("action.sequences")), - new JMenu(MessageManager.getString("action.ids_sequences")) }; // three - // types - // of url - // that - // might - // be - // created. + new JMenu(MessageManager.getString("action.ids_sequences")) }; + SequenceI[] seqs = ap.av.getSelectionAsNewSequence(); String[][] idandseqs = GroupUrlLink.formStrings(seqs); - Hashtable commonDbrefs = new Hashtable(); + Hashtable commonDbrefs = new Hashtable(); for (int sq = 0; sq < seqs.length; sq++) { @@ -891,18 +833,17 @@ public class PopupMenu extends JPopupMenu { sqi = sqi.getDatasetSequence(); } - DBRefEntry[] dbr = sqi.getDBRef(); + DBRefEntry[] dbr = sqi.getDBRefs(); if (dbr != null && dbr.length > 0) { for (int d = 0; d < dbr.length; d++) { String src = dbr[d].getSource(); // jalview.util.DBRefUtils.getCanonicalName(dbr[d].getSource()).toUpperCase(); - Object[] sarray = (Object[]) commonDbrefs.get(src); + Object[] sarray = commonDbrefs.get(src); if (sarray == null) { sarray = new Object[2]; - sarray[0] = new int[] - { 0 }; + sarray[0] = new int[] { 0 }; sarray[1] = new String[seqs.length]; commonDbrefs.put(src, sarray); @@ -923,30 +864,28 @@ public class PopupMenu extends JPopupMenu // now create group links for all distinct ID/sequence sets. boolean addMenu = false; // indicates if there are any group links to give // to user - for (int i = 0; i < groupLinks.size(); i++) + for (String link : groupLinks) { - String link = groupLinks.elementAt(i).toString(); GroupUrlLink urlLink = null; try { urlLink = new GroupUrlLink(link); } catch (Exception foo) { - jalview.bin.Cache.log.error("Exception for GroupURLLink '" + link - + "'", foo); + Cache.log.error("Exception for GroupURLLink '" + link + "'", foo); continue; } ; if (!urlLink.isValid()) { - jalview.bin.Cache.log.error(urlLink.getInvalidMessage()); + Cache.log.error(urlLink.getInvalidMessage()); continue; } final String label = urlLink.getLabel(); boolean usingNames = false; // Now see which parts of the group apply for this URL String ltarget = urlLink.getTarget(); // jalview.util.DBRefUtils.getCanonicalName(urlLink.getTarget()); - Object[] idset = (Object[]) commonDbrefs.get(ltarget.toUpperCase()); + Object[] idset = commonDbrefs.get(ltarget.toUpperCase()); String[] seqstr, ids; // input to makeUrl if (idset != null) { @@ -1009,6 +948,15 @@ public class PopupMenu extends JPopupMenu } } + private void addshowLinks(JMenu linkMenu, Collection> linkset) + { + for (List linkstrset : linkset) + { + // split linkstr into label and url + addshowLink(linkMenu, linkstrset.get(1), linkstrset.get(3)); + } + } + /** * add a show URL menu item to the given linkMenu * @@ -1022,9 +970,8 @@ public class PopupMenu extends JPopupMenu { JMenuItem item = new JMenuItem(label); item.setToolTipText(MessageManager.formatMessage( - "label.open_url_param", new Object[] - { url })); - item.addActionListener(new java.awt.event.ActionListener() + "label.open_url_param", new Object[] { url })); + item.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) @@ -1062,11 +1009,10 @@ public class PopupMenu extends JPopupMenu JMenuItem item = new JMenuItem(label); item.setToolTipText(MessageManager.formatMessage( "label.open_url_seqs_param", - new Object[] - { urlgenerator.getUrl_prefix(), + new Object[] { urlgenerator.getUrl_prefix(), urlgenerator.getNumberInvolved(urlstub) })); // TODO: put in info about what is being sent. - item.addActionListener(new java.awt.event.ActionListener() + item.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) @@ -1080,7 +1026,7 @@ public class PopupMenu extends JPopupMenu try { showLink(urlgenerator.constructFrom(urlstub)); - } catch (UrlStringTooLongException e) + } catch (UrlStringTooLongException e2) { } } @@ -1100,10 +1046,9 @@ public class PopupMenu extends JPopupMenu */ private void jbInit() throws Exception { - groupMenu.setText(MessageManager.getString("label.group")); groupMenu.setText(MessageManager.getString("label.selection")); groupName.setText(MessageManager.getString("label.name")); - groupName.addActionListener(new java.awt.event.ActionListener() + groupName.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) @@ -1114,7 +1059,7 @@ public class PopupMenu extends JPopupMenu sequenceMenu.setText(MessageManager.getString("label.sequence")); sequenceName.setText(MessageManager .getString("label.edit_name_description")); - sequenceName.addActionListener(new java.awt.event.ActionListener() + sequenceName.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) @@ -1123,8 +1068,8 @@ public class PopupMenu extends JPopupMenu } }); chooseAnnotations.setText(MessageManager - .getString("label.choose_annotations") + "..."); - chooseAnnotations.addActionListener(new java.awt.event.ActionListener() + .getString("action.choose_annotations")); + chooseAnnotations.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) @@ -1133,8 +1078,8 @@ public class PopupMenu extends JPopupMenu } }); sequenceDetails.setText(MessageManager - .getString("label.sequence_details") + "..."); - sequenceDetails.addActionListener(new java.awt.event.ActionListener() + .getString("label.sequence_details")); + sequenceDetails.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) @@ -1143,20 +1088,19 @@ public class PopupMenu extends JPopupMenu } }); sequenceSelDetails.setText(MessageManager - .getString("label.sequence_details") + "..."); - sequenceSelDetails - .addActionListener(new java.awt.event.ActionListener() - { - @Override - public void actionPerformed(ActionEvent e) - { - sequenceSelectionDetails_actionPerformed(); - } - }); + .getString("label.sequence_details")); + sequenceSelDetails.addActionListener(new ActionListener() + { + @Override + public void actionPerformed(ActionEvent e) + { + sequenceSelectionDetails_actionPerformed(); + } + }); PIDColour.setFocusPainted(false); unGroupMenuItem .setText(MessageManager.getString("action.remove_group")); - unGroupMenuItem.addActionListener(new java.awt.event.ActionListener() + unGroupMenuItem.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) @@ -1166,18 +1110,17 @@ public class PopupMenu extends JPopupMenu }); createGroupMenuItem.setText(MessageManager .getString("action.create_group")); - createGroupMenuItem - .addActionListener(new java.awt.event.ActionListener() - { - @Override - public void actionPerformed(ActionEvent e) - { - createGroupMenuItem_actionPerformed(); - } - }); + createGroupMenuItem.addActionListener(new ActionListener() + { + @Override + public void actionPerformed(ActionEvent e) + { + createGroupMenuItem_actionPerformed(); + } + }); outline.setText(MessageManager.getString("action.border_colour")); - outline.addActionListener(new java.awt.event.ActionListener() + outline.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) @@ -1282,36 +1225,6 @@ public class PopupMenu extends JPopupMenu changeCase(e); } }); - pdbMenu.setText(MessageManager - .getString("label.associate_structure_with_sequence")); - pdbFromFile.setText(MessageManager.getString("label.from_file")); - pdbFromFile.addActionListener(new ActionListener() - { - @Override - public void actionPerformed(ActionEvent e) - { - pdbFromFile_actionPerformed(); - } - }); - - enterPDB.setText(MessageManager.getString("label.enter_pdb_id")); - enterPDB.addActionListener(new ActionListener() - { - @Override - public void actionPerformed(ActionEvent e) - { - enterPDB_actionPerformed(); - } - }); - discoverPDB.setText(MessageManager.getString("label.discover_pdb_ids")); - discoverPDB.addActionListener(new ActionListener() - { - @Override - public void actionPerformed(ActionEvent e) - { - discoverPDB_actionPerformed(); - } - }); outputMenu.setText(MessageManager.getString("label.out_to_textbox") + "..."); seqShowAnnotationsMenu.setText(MessageManager @@ -1342,15 +1255,14 @@ public class PopupMenu extends JPopupMenu } }); jMenu1.setText(MessageManager.getString("label.group")); - proteinStructureMenu.setText(MessageManager - .getString("label.view_protein_structure")); - proteinStructureMenu.addActionListener(new ActionListener() + pdbStructureDialog.setText(MessageManager + .getString("label.show_pdbstruct_dialog")); + pdbStructureDialog.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent actionEvent) { - SequenceI[] selectedSeqs = new SequenceI[] - { sequence }; + SequenceI[] selectedSeqs = new SequenceI[] { sequence }; if (ap.av.getSelectionGroup() != null) { selectedSeqs = ap.av.getSequenceSelection(); @@ -1377,15 +1289,16 @@ public class PopupMenu extends JPopupMenu .getString("label.mark_as_representative")); makeReferenceSeq.addActionListener(new ActionListener() { - + @Override public void actionPerformed(ActionEvent actionEvent) { makeReferenceSeq_actionPerformed(actionEvent); - + } }); - hideInsertions.setText(MessageManager.getString("label.hide_insertions")); + hideInsertions.setText(MessageManager + .getString("label.hide_insertions")); hideInsertions.addActionListener(new ActionListener() { @@ -1405,8 +1318,8 @@ public class PopupMenu extends JPopupMenu add(groupMenu); add(sequenceMenu); add(rnaStructureMenu); - add(proteinStructureMenu); - if (sequence!=null) + add(pdbStructureDialog); + if (sequence != null) { add(hideInsertions); } @@ -1474,20 +1387,19 @@ public class PopupMenu extends JPopupMenu colourMenu.addSeparator(); colourMenu.add(abovePIDColour); + colourMenu.add(modifyPID); colourMenu.add(conservationMenuItem); + colourMenu.add(modifyConservation); editMenu.add(copy); editMenu.add(cut); editMenu.add(editSequence); editMenu.add(upperCase); editMenu.add(lowerCase); editMenu.add(toggle); - pdbMenu.add(pdbFromFile); // JBPNote: These shouldn't be added here - should appear in a generic // 'apply web service to this sequence menu' // pdbMenu.add(RNAFold); // pdbMenu.add(ContraFold); - pdbMenu.add(enterPDB); - pdbMenu.add(discoverPDB); jMenu1.add(groupName); jMenu1.add(colourMenu); jMenu1.add(showBoxes); @@ -1496,7 +1408,7 @@ public class PopupMenu extends JPopupMenu jMenu1.add(outline); jMenu1.add(displayNonconserved); noColourmenuItem.setText(MessageManager.getString("label.none")); - noColourmenuItem.addActionListener(new java.awt.event.ActionListener() + noColourmenuItem.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) @@ -1507,7 +1419,7 @@ public class PopupMenu extends JPopupMenu clustalColour.setText(MessageManager .getString("label.clustalx_colours")); - clustalColour.addActionListener(new java.awt.event.ActionListener() + clustalColour.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) @@ -1516,7 +1428,7 @@ public class PopupMenu extends JPopupMenu } }); zappoColour.setText(MessageManager.getString("label.zappo")); - zappoColour.addActionListener(new java.awt.event.ActionListener() + zappoColour.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) @@ -1525,7 +1437,7 @@ public class PopupMenu extends JPopupMenu } }); taylorColour.setText(MessageManager.getString("label.taylor")); - taylorColour.addActionListener(new java.awt.event.ActionListener() + taylorColour.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) @@ -1535,17 +1447,16 @@ public class PopupMenu extends JPopupMenu }); hydrophobicityColour.setText(MessageManager .getString("label.hydrophobicity")); - hydrophobicityColour - .addActionListener(new java.awt.event.ActionListener() - { - @Override - public void actionPerformed(ActionEvent e) - { - hydrophobicityColour_actionPerformed(); - } - }); + hydrophobicityColour.addActionListener(new ActionListener() + { + @Override + public void actionPerformed(ActionEvent e) + { + hydrophobicityColour_actionPerformed(); + } + }); helixColour.setText(MessageManager.getString("label.helix_propensity")); - helixColour.addActionListener(new java.awt.event.ActionListener() + helixColour.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) @@ -1555,7 +1466,7 @@ public class PopupMenu extends JPopupMenu }); strandColour.setText(MessageManager .getString("label.strand_propensity")); - strandColour.addActionListener(new java.awt.event.ActionListener() + strandColour.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) @@ -1564,7 +1475,7 @@ public class PopupMenu extends JPopupMenu } }); turnColour.setText(MessageManager.getString("label.turn_propensity")); - turnColour.addActionListener(new java.awt.event.ActionListener() + turnColour.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) @@ -1573,7 +1484,7 @@ public class PopupMenu extends JPopupMenu } }); buriedColour.setText(MessageManager.getString("label.buried_index")); - buriedColour.addActionListener(new java.awt.event.ActionListener() + buriedColour.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) @@ -1581,19 +1492,9 @@ public class PopupMenu extends JPopupMenu buriedColour_actionPerformed(); } }); - abovePIDColour.setText(MessageManager - .getString("label.above_identity_percentage")); - abovePIDColour.addActionListener(new java.awt.event.ActionListener() - { - @Override - public void actionPerformed(ActionEvent e) - { - abovePIDColour_actionPerformed(); - } - }); userDefinedColour.setText(MessageManager .getString("action.user_defined")); - userDefinedColour.addActionListener(new java.awt.event.ActionListener() + userDefinedColour.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) @@ -1603,7 +1504,7 @@ public class PopupMenu extends JPopupMenu }); PIDColour .setText(MessageManager.getString("label.percentage_identity")); - PIDColour.addActionListener(new java.awt.event.ActionListener() + PIDColour.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) @@ -1612,7 +1513,7 @@ public class PopupMenu extends JPopupMenu } }); BLOSUM62Colour.setText(MessageManager.getString("label.blosum62")); - BLOSUM62Colour.addActionListener(new java.awt.event.ActionListener() + BLOSUM62Colour.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) @@ -1622,33 +1523,87 @@ public class PopupMenu extends JPopupMenu }); purinePyrimidineColour.setText(MessageManager .getString("label.purine_pyrimidine")); - purinePyrimidineColour - .addActionListener(new java.awt.event.ActionListener() - { - @Override - public void actionPerformed(ActionEvent e) - { - purinePyrimidineColour_actionPerformed(); - } - }); + purinePyrimidineColour.addActionListener(new ActionListener() + { + @Override + public void actionPerformed(ActionEvent e) + { + purinePyrimidineColour_actionPerformed(); + } + }); /* - * covariationColour.addActionListener(new java.awt.event.ActionListener() { + * covariationColour.addActionListener(new ActionListener() { * public void actionPerformed(ActionEvent e) { * covariationColour_actionPerformed(); } }); */ + abovePIDColour.setText(MessageManager + .getString("label.above_identity_percentage")); + abovePIDColour.addActionListener(new ActionListener() + { + @Override + public void actionPerformed(ActionEvent e) + { + abovePIDColour_actionPerformed(); + } + }); + + modifyPID.setText(MessageManager + .getString("label.modify_identity_threshold")); + modifyPID.addActionListener(new ActionListener() + { + @Override + public void actionPerformed(ActionEvent e) + { + modifyPID_actionPerformed(); + } + }); conservationMenuItem.setText(MessageManager .getString("label.conservation")); - conservationMenuItem - .addActionListener(new java.awt.event.ActionListener() - { - @Override - public void actionPerformed(ActionEvent e) - { - conservationMenuItem_actionPerformed(); - } - }); + conservationMenuItem.addActionListener(new ActionListener() + { + @Override + public void actionPerformed(ActionEvent e) + { + conservationMenuItem_actionPerformed(); + } + }); + + modifyConservation.setText(MessageManager + .getString("label.modify_conservation_threshold")); + modifyConservation.addActionListener(new ActionListener() + { + @Override + public void actionPerformed(ActionEvent e) + { + modifyConservation_actionPerformed(); + } + }); + } + + protected void modifyConservation_actionPerformed() + { + SequenceGroup sg = getGroup(); + if (sg.cs != null) + { + SliderPanel.setConservationSlider(ap, sg.cs, sg.getName()); + SliderPanel.showConservationSlider(); + } + } + + protected void modifyPID_actionPerformed() + { + SequenceGroup sg = getGroup(); + if (sg.cs != null) + { + // int threshold = SliderPanel.setPIDSliderSource(ap, sg.cs, getGroup() + // .getName()); + // sg.cs.setThreshold(threshold, ap.av.isIgnoreGapsConsensus()); + SliderPanel.setPIDSliderSource(ap, sg.cs, getGroup() + .getName()); + SliderPanel.showPIDSlider(); + } } /** @@ -1664,8 +1619,8 @@ public class PopupMenu extends JPopupMenu * @param menuItem * @param forSequences */ - protected void configureReferenceAnnotationsMenu( - JMenuItem menuItem, List forSequences) + protected void configureReferenceAnnotationsMenu(JMenuItem menuItem, + List forSequences) { menuItem.setEnabled(false); @@ -1761,6 +1716,7 @@ public class PopupMenu extends JPopupMenu } refresh(); } + protected void sequenceSelectionDetails_actionPerformed() { createSequenceDetailsReport(ap.av.getSequenceSelection()); @@ -1768,32 +1724,29 @@ public class PopupMenu extends JPopupMenu protected void sequenceDetails_actionPerformed() { - createSequenceDetailsReport(new SequenceI[] - { sequence }); + createSequenceDetailsReport(new SequenceI[] { sequence }); } public void createSequenceDetailsReport(SequenceI[] sequences) { CutAndPasteHtmlTransfer cap = new CutAndPasteHtmlTransfer(); - StringBuffer contents = new StringBuffer(); + StringBuilder contents = new StringBuilder(128); for (SequenceI seq : sequences) { contents.append("

" + MessageManager .formatMessage( "label.create_sequence_details_report_annotation_for", - new Object[] - { seq.getDisplayId(true) }) + "

"); + new Object[] { seq.getDisplayId(true) }) + + "

"); new SequenceAnnotationReport(null) .createSequenceAnnotationReport( contents, seq, true, true, - false, (ap.getSeqPanel().seqCanvas.fr != null) ? ap - .getSeqPanel().seqCanvas.fr - .getMinMax() + .getSeqPanel().seqCanvas.fr.getMinMax() : null); contents.append("

"); } @@ -1801,9 +1754,9 @@ public class PopupMenu extends JPopupMenu Desktop.addInternalFrame(cap, MessageManager.formatMessage( "label.sequence_details_for", - (sequences.length == 1 ? new Object[] - { sequences[0].getDisplayId(true) } : new Object[] - { MessageManager.getString("label.selection") })), 500, 400); + (sequences.length == 1 ? new Object[] { sequences[0] + .getDisplayId(true) } : new Object[] { MessageManager + .getString("label.selection") })), 500, 400); } @@ -1957,7 +1910,8 @@ public class PopupMenu extends JPopupMenu return; } - if (abovePIDColour.isSelected()) + boolean selected = abovePIDColour.isSelected(); + if (selected) { sg.cs.setConsensus(AAFrequency.calculate( sg.getSequences(ap.av.getHiddenRepSequences()), @@ -1974,7 +1928,9 @@ public class PopupMenu extends JPopupMenu // remove PIDColouring { sg.cs.setThreshold(0, ap.av.isIgnoreGapsConsensus()); + SliderPanel.hidePIDSlider(); } + modifyPID.setEnabled(selected); refresh(); } @@ -2076,12 +2032,12 @@ public class PopupMenu extends JPopupMenu return; } - if (conservationMenuItem.isSelected()) + boolean selected = conservationMenuItem.isSelected(); + if (selected) { // JBPNote: Conservation name shouldn't be i18n translated - Conservation c = new Conservation("Group", - ResidueProperties.propHash, 3, sg.getSequences(ap.av - .getHiddenRepSequences()), sg.getStartRes(), + Conservation c = new Conservation("Group", sg.getSequences(ap.av + .getHiddenRepSequences()), sg.getStartRes(), sg.getEndRes() + 1); c.calculate(); @@ -2096,7 +2052,9 @@ public class PopupMenu extends JPopupMenu // remove ConservationColouring { sg.cs.setConservation(null); + SliderPanel.hideConservationSlider(); } + modifyConservation.setEnabled(selected); refresh(); } @@ -2189,14 +2147,14 @@ public class PopupMenu extends JPopupMenu { if (dialog.getName().indexOf(" ") > -1) { - JOptionPane + JvOptionPane .showMessageDialog( ap, MessageManager .getString("label.spaces_converted_to_backslashes"), MessageManager .getString("label.no_spaces_allowed_sequence_name"), - JOptionPane.WARNING_MESSAGE); + JvOptionPane.WARNING_MESSAGE); } sequence.setName(dialog.getName().replace(' ', '_')); @@ -2295,10 +2253,10 @@ public class PopupMenu extends JPopupMenu jalview.util.BrowserLauncher.openURL(url); } catch (Exception ex) { - JOptionPane.showInternalMessageDialog(Desktop.desktop, + JvOptionPane.showInternalMessageDialog(Desktop.desktop, MessageManager.getString("label.web_browser_not_found_unix"), MessageManager.getString("label.web_browser_not_found"), - JOptionPane.WARNING_MESSAGE); + JvOptionPane.WARNING_MESSAGE); ex.printStackTrace(); } @@ -2306,29 +2264,7 @@ public class PopupMenu extends JPopupMenu void hideSequences(boolean representGroup) { - SequenceGroup sg = ap.av.getSelectionGroup(); - if (sg == null || sg.getSize() < 1) - { - ap.av.hideSequence(new SequenceI[] - { sequence }); - return; - } - - ap.av.setSelectionGroup(null); - - if (representGroup) - { - ap.av.hideRepSequences(sequence, sg); - - return; - } - - int gsize = sg.getSize(); - SequenceI[] hseqs = sg.getSequences().toArray(new SequenceI[gsize]); - - ap.av.hideSequence(hseqs); - // refresh(); TODO: ? needed ? - ap.av.sendSelection(); + ap.av.hideSequences(sequence, representGroup); } public void copy_actionPerformed() @@ -2349,8 +2285,7 @@ public class PopupMenu extends JPopupMenu if (sg != null) { List startEnd = ap.av.getVisibleRegionBoundaries( - sg.getStartRes(), - sg.getEndRes() + 1); + sg.getStartRes(), sg.getEndRes() + 1); String description; int caseChange; @@ -2388,8 +2323,8 @@ public class PopupMenu extends JPopupMenu CutAndPasteTransfer cap = new CutAndPasteTransfer(); cap.setForInput(null); Desktop.addInternalFrame(cap, MessageManager.formatMessage( - "label.alignment_output_command", new Object[] - { e.getActionCommand() }), 600, 500); + "label.alignment_output_command", + new Object[] { e.getActionCommand() }), 600, 500); String[] omitHidden = null; @@ -2397,69 +2332,9 @@ public class PopupMenu extends JPopupMenu // or we simply trust the user wants // wysiwig behaviour - cap.setText(new FormatAdapter(ap).formatSequences(e.getActionCommand(), - ap, true)); - } - - public void pdbFromFile_actionPerformed() - { - jalview.io.JalviewFileChooser chooser = new jalview.io.JalviewFileChooser( - jalview.bin.Cache.getProperty("LAST_DIRECTORY")); - chooser.setFileView(new jalview.io.JalviewFileView()); - chooser.setDialogTitle(MessageManager.formatMessage( - "label.select_pdb_file_for", new Object[] - { sequence.getDisplayId(false) })); - chooser.setToolTipText(MessageManager.formatMessage( - "label.load_pdb_file_associate_with_sequence", new Object[] - { sequence.getDisplayId(false) })); - - int value = chooser.showOpenDialog(null); - - if (value == jalview.io.JalviewFileChooser.APPROVE_OPTION) - { - String choice = chooser.getSelectedFile().getPath(); - jalview.bin.Cache.setProperty("LAST_DIRECTORY", choice); - new AssociatePdbFileWithSeq().associatePdbWithSeq(choice, - jalview.io.AppletFormatAdapter.FILE, sequence, true, - Desktop.instance); - } - - } - - - public void enterPDB_actionPerformed() - { - String id = JOptionPane.showInternalInputDialog(Desktop.desktop, - MessageManager.getString("label.enter_pdb_id"), - MessageManager.getString("label.enter_pdb_id"), - JOptionPane.QUESTION_MESSAGE); - - if (id != null && id.length() > 0) - { - PDBEntry entry = new PDBEntry(); - entry.setId(id.toUpperCase()); - sequence.getDatasetSequence().addPDBId(entry); - } - } - - public void discoverPDB_actionPerformed() - { - - final SequenceI[] sequences = ((ap.av.getSelectionGroup() == null) ? new SequenceI[] - { sequence } - : ap.av.getSequenceSelection()); - Thread discpdb = new Thread(new Runnable() - { - @Override - public void run() - { - - new jalview.ws.DBRefFetcher(sequences, ap.alignFrame) - .fetchDBRefs(false); - } - - }); - discpdb.start(); + FileFormatI fileFormat = FileFormats.getInstance().forName( + e.getActionCommand()); + cap.setText(new FormatAdapter(ap).formatSequences(fileFormat, ap, true)); } public void sequenceFeature_actionPerformed()