package jalview.ext.archaeopteryx; import jalview.datamodel.ColumnSelection; import jalview.datamodel.HiddenColumns; import jalview.datamodel.SequenceGroup; import jalview.datamodel.SequenceI; 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; StructureSelectionManager ssm; Map sequencesBelongingToNodes; public JalviewAptxBinding(MainFrame archaeopteryx, AlignmentViewport jalviewAlignmentViewport, Map alignMappedToNodes) { parentAvport = jalviewAlignmentViewport; sequencesBelongingToNodes = alignMappedToNodes; treeView = archaeopteryx.getMainPanel().getCurrentTreePanel(); ssm = parentAvport.getStructureSelectionManager(); ssm.addSelectionListener(this); treeView.addMouseListener(this); } @Override public void actionPerformed(ActionEvent e) { } @Override public void mouseClicked(MouseEvent e) { } @Override public void mousePressed(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(SequenceGroup seqsel, ColumnSelection colsel, HiddenColumns hidden, SelectionSource source) { if (source == parentAvport) // check if source is alignment from where the // tree originates { treeView.setFoundNodes0( new HashSet(seqsel.getSequences().size())); for (SequenceI sequence : seqsel.getSequences()) { PhylogenyNode matchingNode = sequencesBelongingToNodes.get(sequence); treeView.getFoundNodes0().add(matchingNode.getId()); } treeView.repaint(); } } @Override public void showNodeSelectionOnAlign(MouseEvent e) { final PhylogenyNode node = treeView.findNode(e.getX(), e.getY()); if (node != null && node.isExternal()) { if ((e.getModifiers() & InputEvent.SHIFT_MASK) != 0) // shift is pressed // (so multiple nodes // can be selected) { System.out.println(treeView.getFoundNodes0().toString()); } } } }