package jalview.ext.archaeopteryx; import jalview.datamodel.ColumnSelection; import jalview.datamodel.HiddenColumns; import jalview.datamodel.SequenceGroup; import jalview.datamodel.SequenceI; import jalview.gui.PaintRefresher; import jalview.structure.SelectionSource; import jalview.structure.StructureSelectionManager; import jalview.viewmodel.AlignmentViewport; import java.awt.event.ActionEvent; import java.awt.event.InputEvent; import java.awt.event.MouseEvent; import java.util.HashSet; import java.util.Map; import org.forester.archaeopteryx.MainFrame; import org.forester.phylogeny.PhylogenyNode; public class JalviewAptxBinding implements JalviewTreeViewerBindingI { org.forester.archaeopteryx.TreePanel treeView; AlignmentViewport parentAvport; final StructureSelectionManager ssm; Map sequencesBoundToNodes; Map nodesBoundToSequences; public JalviewAptxBinding(final MainFrame archaeopteryx, final AlignmentViewport jalviewAlignmentViewport, final Map alignMappedToNodes, final Map nodesMappedToAlign) { parentAvport = jalviewAlignmentViewport; sequencesBoundToNodes = alignMappedToNodes; nodesBoundToSequences = nodesMappedToAlign; treeView = archaeopteryx.getMainPanel().getCurrentTreePanel(); ssm = parentAvport.getStructureSelectionManager(); ssm.addSelectionListener(this); treeView.addMouseListener(this); PaintRefresher.Register(treeView, parentAvport.getSequenceSetId()); } @Override public void actionPerformed(ActionEvent e) { } @Override public void mouseClicked(MouseEvent e) { } @Override public void mousePressed(final MouseEvent e) { showNodeSelectionOnAlign(e); } @Override public void mouseReleased(MouseEvent e) { } @Override public void mouseEntered(MouseEvent e) { } @Override public void mouseExited(MouseEvent e) { } @Override public void selection(final SequenceGroup seqsel, final ColumnSelection colsel, final HiddenColumns hidden, final SelectionSource source) { if (source == parentAvport) // check if source is alignment from where the // tree originates { treeView.setFoundNodes0( new HashSet(seqsel.getSequences().size())); for (SequenceI selectedSequence : seqsel.getSequences()) { PhylogenyNode matchingNode = sequencesBoundToNodes.get(selectedSequence); if (matchingNode != null) { treeView.getFoundNodes0().add(matchingNode.getId()); } } PaintRefresher.Refresh(treeView, parentAvport.getSequenceSetId()); } } /** * If a node is selected in the tree panel this method highlights the * corresponding sequence in the Jalview alignment view. */ @Override public void showNodeSelectionOnAlign(final MouseEvent e) { final PhylogenyNode node = treeView.findNode(e.getX(), e.getY()); if (node != null) { SequenceI matchingSequence = nodesBoundToSequences.get(node); if (matchingSequence != null) { if ((e.getModifiers() & InputEvent.SHIFT_MASK) != 0) // shift is pressed // (so multiple nodes // can be selected) { // something? } else { parentAvport.setSelectionGroup(null); // reset selection if shift // isn't // pressed } treeSelectionChanged(matchingSequence); parentAvport.sendSelection(); // not actually needed? PaintRefresher.Refresh(treeView, parentAvport.getSequenceSetId()); } } } /** * Refactored from TreeCanvas * * @param sequence */ public void treeSelectionChanged(final SequenceI sequence) { SequenceGroup selected = parentAvport.getSelectionGroup(); if (selected == null) { selected = new SequenceGroup(); parentAvport.setSelectionGroup(selected); } selected.setEndRes(parentAvport.getAlignment().getWidth() - 1); selected.addOrRemove(sequence, true); } public AlignmentViewport getParentAvport() { return parentAvport; } public void setParentAvport(final AlignmentViewport parentAvport) { this.parentAvport = parentAvport; } }