import jalview.commands.EditCommand;
import jalview.commands.EditCommand.Action;
import jalview.datamodel.AlignmentAnnotation;
+import jalview.datamodel.AlignmentI;
import jalview.datamodel.Annotation;
+import jalview.datamodel.ColumnSelection;
import jalview.datamodel.DBRefEntry;
import jalview.datamodel.PDBEntry;
import jalview.datamodel.Sequence;
JMenuItem sequenceDetails = new JMenuItem();
JMenuItem sequenceSelDetails = new JMenuItem();
+
+ JMenuItem makeReferenceSeq = new JMenuItem();
JMenuItem chooseAnnotations = new JMenuItem();
JMenu jMenu1 = new JMenu();
- JMenu structureMenu = new JMenu();
+ JMenuItem structureMenu = new JMenuItem();
JMenu viewStructureMenu = new JMenu();
JMenu groupLinksMenu;
+ JMenuItem hideInsertions = new JMenuItem();
+
/**
* Creates a new PopupMenu object.
*
if (seq != null)
{
sequenceMenu.setText(sequence.getName());
+ if (seq == ap.av.getAlignment().getSeqrep())
+ {
+ makeReferenceSeq.setText("Unmark representative");
+ } else {
+ makeReferenceSeq.setText("Mark as representative");
+ }
if (seq.getDatasetSequence().getPDBId() != null
&& seq.getDatasetSequence().getPDBId().size() > 0)
}
// structureMenu.remove(colStructureMenu);
}
-
if (ap.av.getAlignment().isNucleotide() == true)
{
AlignmentAnnotation[] aa = ap.av.getAlignment()
}
}
}
-
}
menuItem = new JMenuItem(
new PDBEntry[pdbe.size()]), pr = reppdb.values().toArray(
new PDBEntry[reppdb.size()]);
final JMenuItem gpdbview, rpdbview;
- if (pdbe.size() == 1)
- {
- structureMenu.add(gpdbview = new JMenuItem(MessageManager
- .formatMessage("label.view_structure_for", new String[]
- { sqass.getDisplayId(false) })));
- }
- else
- {
- structureMenu.add(gpdbview = new JMenuItem(MessageManager
- .formatMessage("label.view_all_structures", new String[]
- { new Integer(pdbe.size()).toString() })));
- }
- gpdbview.setToolTipText(MessageManager
- .getString("label.open_new_jmol_view_with_all_structures_associated_current_selection_superimpose_using_alignment"));
- gpdbview.addActionListener(new ActionListener()
- {
-
- @Override
- public void actionPerformed(ActionEvent e)
- {
- new StructureViewer(ap.getStructureSelectionManager())
- .viewStructures(ap, pe, ap.av.collateForPDB(pe));
- }
- });
- if (reppdb.size() > 1 && reppdb.size() < pdbe.size())
- {
- structureMenu.add(rpdbview = new JMenuItem(MessageManager
- .formatMessage(
- "label.view_all_representative_structures",
- new String[]
- { new Integer(reppdb.size()).toString() })));
- rpdbview.setToolTipText(MessageManager
- .getString("label.open_new_jmol_view_with_all_representative_structures_associated_current_selection_superimpose_using_alignment"));
- rpdbview.addActionListener(new ActionListener()
- {
-
- @Override
- public void actionPerformed(ActionEvent e)
- {
- new StructureViewer(ap.getStructureSelectionManager())
- .viewStructures(ap, pr, ap.av.collateForPDB(pr));
- }
- });
- }
+ // if (pdbe.size() == 1)
+ // {
+ // structureMenu.add(gpdbview = new JMenuItem(MessageManager
+ // .formatMessage("label.view_structure_for", new String[]
+ // { sqass.getDisplayId(false) })));
+ // }
+ // else
+ // {
+ // structureMenu.add(gpdbview = new JMenuItem(MessageManager
+ // .formatMessage("label.view_all_structures", new String[]
+ // { new Integer(pdbe.size()).toString() })));
+ // }
+ // gpdbview.setToolTipText(MessageManager
+ // .getString("label.open_new_jmol_view_with_all_structures_associated_current_selection_superimpose_using_alignment"));
+ // gpdbview.addActionListener(new ActionListener()
+ // {
+ //
+ // @Override
+ // public void actionPerformed(ActionEvent e)
+ // {
+ // new StructureViewer(ap.getStructureSelectionManager())
+ // .viewStructures(ap, pe, ap.av.collateForPDB(pe));
+ // }
+ // });
+ // if (reppdb.size() > 1 && reppdb.size() < pdbe.size())
+ // {
+ // structureMenu.add(rpdbview = new JMenuItem(MessageManager
+ // .formatMessage(
+ // "label.view_all_representative_structures",
+ // new String[]
+ // { new Integer(reppdb.size()).toString() })));
+ // rpdbview.setToolTipText(MessageManager
+ // .getString("label.open_new_jmol_view_with_all_representative_structures_associated_current_selection_superimpose_using_alignment"));
+ // rpdbview.addActionListener(new ActionListener()
+ // {
+ //
+ // @Override
+ // public void actionPerformed(ActionEvent e)
+ // {
+ // new StructureViewer(ap.getStructureSelectionManager())
+ // .viewStructures(ap, pr, ap.av.collateForPDB(pr));
+ // }
+ // });
+ // }
}
}
else
}
});
jMenu1.setText(MessageManager.getString("label.group"));
- structureMenu.setText(MessageManager.getString("label.structure"));
+ // structureMenu.setText(MessageManager.getString("label.structure"));
+ structureMenu.setText(MessageManager.getString("label.view_structure"));
+ structureMenu.addActionListener(new ActionListener()
+ {
+ @Override
+ public void actionPerformed(ActionEvent actionEvent)
+ {
+ SequenceI[] selectedSeqs = new SequenceI[]
+ { sequence };
+ if (ap.av.getSelectionGroup() != null)
+ {
+ selectedSeqs = ap.av.getSequenceSelection();
+ }
+ new StructureChooser(selectedSeqs, sequence, ap);
+ }
+ });
+
viewStructureMenu.setText(MessageManager
.getString("label.view_structure"));
// colStructureMenu.setText("Colour By Structure");
editSequence_actionPerformed(actionEvent);
}
});
+ makeReferenceSeq.setText(MessageManager
+ .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.addActionListener(new ActionListener()
+ {
+ @Override
+ public void actionPerformed(ActionEvent e)
+ {
+ hideInsertions_actionPerformed(e);
+ }
+ });
/*
* annotationMenuItem.setText("By Annotation");
* annotationMenuItem.addActionListener(new ActionListener() { public void
groupMenu.add(sequenceSelDetails);
add(groupMenu);
add(sequenceMenu);
- this.add(structureMenu);
+ add(structureMenu);
+ if (sequence!=null)
+ {
+ add(hideInsertions);
+ }
// annotations configuration panel suppressed for now
// groupMenu.add(chooseAnnotations);
groupMenu.add(jMenu1);
sequenceMenu.add(sequenceName);
sequenceMenu.add(sequenceDetails);
+ sequenceMenu.add(makeReferenceSeq);
colourMenu.add(textColour);
colourMenu.add(noColourmenuItem);
colourMenu.add(clustalColour);
jMenu1.add(showColourText);
jMenu1.add(outline);
jMenu1.add(displayNonconserved);
- structureMenu.add(pdbMenu);
- structureMenu.add(viewStructureMenu);
+ // structureMenu.add(pdbMenu);
+ // structureMenu.add(viewStructureMenu);
// structureMenu.add(colStructureMenu);
noColourmenuItem.setText(MessageManager.getString("label.none"));
noColourmenuItem.addActionListener(new java.awt.event.ActionListener()
/**
* Check for any annotations on the underlying dataset sequences (for the
- * current selection group) which are not on the alignment annotations for the
- * sequence. If any are found, enable the option to add them to the alignment.
- * The criteria for 'on the alignment' is finding an alignment annotation on
- * the sequence, that matches on calcId and label. A tooltip is also
- * constructed that displays the source (calcId) and type (label) of the
- * annotations that can be added.
+ * current selection group) which are not 'on the alignment'.If any are found,
+ * enable the option to add them to the alignment. The criteria for 'on the
+ * alignment' is finding an alignment annotation on the alignment, matched on
+ * calcId, label and sequenceRef.
+ *
+ * A tooltip is also constructed that displays the source (calcId) and type
+ * (label) of the annotations that can be added.
*
* @param menuItem
* @param forSequences
/*
* For each sequence selected in the alignment, make a list of any
* annotations on the underlying dataset sequence which are not already on
- * the sequence in the alignment.
+ * the alignment.
*
* Build a map of { alignmentSequence, <List of annotations to add> }
*/
+ AlignmentI al = this.ap.av.getAlignment();
final Map<SequenceI, List<AlignmentAnnotation>> candidates = new LinkedHashMap<SequenceI, List<AlignmentAnnotation>>();
for (SequenceI seq : forSequences)
{
for (AlignmentAnnotation dsann : datasetAnnotations)
{
/*
- * If the sequence has no annotation that matches this one, then add
- * this one to the results list.
+ * Find matching annotations on the alignment.
*/
- if (seq.getAlignmentAnnotations(dsann.getCalcId(), dsann.label)
- .isEmpty())
+ final Iterable<AlignmentAnnotation> matchedAlignmentAnnotations = al
+ .findAnnotations(seq, dsann.getCalcId(),
+ dsann.label);
+ if (!matchedAlignmentAnnotations.iterator().hasNext())
{
result.add(dsann);
tipEntries.put(dsann.getCalcId(), dsann.label);
}
copyAnn.restrict(startRes, endRes);
- // add to the sequence (sets copyAnn.datasetSequence)
- seq.addAlignmentAnnotation(copyAnn);
+ /*
+ * Add to the sequence (sets copyAnn.datasetSequence), unless the
+ * original annotation is already on the sequence.
+ */
+ if (!seq.hasAnnotation(ann))
+ {
+ seq.addAlignmentAnnotation(copyAnn);
+ }
// adjust for gaps
copyAnn.adjustForAlignment();
// add to the alignment and set visible
refresh();
}
+ protected void makeReferenceSeq_actionPerformed(ActionEvent actionEvent)
+ {
+ if (!ap.av.getAlignment().hasSeqrep())
+ {
+ // initialise the display flags so the user sees something happen
+ ap.av.setDisplayReferenceSeq(true);
+ ap.av.setColourByReferenceSeq(true);
+ ap.av.getAlignment().setSeqrep(sequence);
+ }
+ else
+ {
+ if (ap.av.getAlignment().getSeqrep() == sequence)
+ {
+ ap.av.getAlignment().setSeqrep(null);
+ }
+ else
+ {
+ ap.av.getAlignment().setSeqrep(sequence);
+ }
+ }
+ refresh();
+ }
+
+ protected void hideInsertions_actionPerformed(ActionEvent actionEvent)
+ {
+ if (sequence != null)
+ {
+ ColumnSelection cs = ap.av.getColumnSelection();
+ if (cs == null)
+ {
+ cs = new ColumnSelection();
+ }
+ cs.hideInsertionsFor(sequence);
+ ap.av.setColumnSelection(cs);
+ }
+ refresh();
+ }
protected void sequenceSelectionDetails_actionPerformed()
{
createSequenceDetailsReport(ap.av.getSequenceSelection());
true,
true,
false,
- (ap.getSeqPanel().seqCanvas.fr != null) ? ap.getSeqPanel().seqCanvas.fr.minmax
+ (ap.getSeqPanel().seqCanvas.fr != null) ? ap
+ .getSeqPanel().seqCanvas.fr
+ .getMinMax()
: null);
contents.append("</p>");
}
cap.setText("<html>" + contents.toString() + "</html>");
- Desktop.instance.addInternalFrame(cap, MessageManager.formatMessage(
- "label.sequece_details_for",
- (sequences.length == 1 ? new String[]
- { sequences[0].getDisplayId(true) } : new String[]
+ 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);
}