X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fext%2Farchaeopteryx%2FJalviewBinding.java;h=d2072cc7d038d67799bf2b915cbade91ecb5f0cb;hb=95f1e2ef53cafe10e25ef5d757781635cd595c19;hp=3f69299cb0f546283548a66248676772d1379a97;hpb=f7ef599318242d5d63dbe1e9679224534f7b6aa3;p=jalview.git diff --git a/src/jalview/ext/archaeopteryx/JalviewBinding.java b/src/jalview/ext/archaeopteryx/JalviewBinding.java index 3f69299..d2072cc 100644 --- a/src/jalview/ext/archaeopteryx/JalviewBinding.java +++ b/src/jalview/ext/archaeopteryx/JalviewBinding.java @@ -16,6 +16,7 @@ import java.awt.event.MouseEvent; import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Set; import javax.swing.JTabbedPane; import javax.swing.SwingUtilities; @@ -23,6 +24,7 @@ import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import org.forester.archaeopteryx.MainFrame; +import org.forester.phylogeny.Phylogeny; import org.forester.phylogeny.PhylogenyMethods; import org.forester.phylogeny.PhylogenyNode; @@ -78,7 +80,7 @@ public final class JalviewBinding treeTabs = archaeopteryx.getMainPanel().getTabbedPane(); ssm = parentAvport.getStructureSelectionManager(); - // archaeopteryx.getMainPanel().getControlPanel().setColorBranches(true); + // archaeopteryx.getMainPanel().getControlPanel().setColorBranches(true); ssm.addSelectionListener(this); treeView.addMouseListener(this); @@ -125,14 +127,45 @@ public final class JalviewBinding @Override public void mouseClicked(MouseEvent e) { + SwingUtilities.invokeLater(new Runnable() { + + @Override + /** + * invokeLater so that this always runs after Forester's mouseClicked + */ + public void run() + { + final PhylogenyNode node = treeView.findNode(e.getX(), e.getY()); + if (node != null) + { + if ((e.getModifiers() & InputEvent.SHIFT_MASK) == 0) // clear previous + // selection if shift + // IS NOT pressed + { + parentAvport.setSelectionGroup(null); + treeView.setFoundNodes0(null); + + } + showNodeSelectionOnAlign(node); + } + else + { + partitionTree(e); + + + } + + } + }); + + } @Override public void mousePressed(final MouseEvent e) { - showNodeSelectionOnAlign(e); - } + } @Override public void mouseReleased(MouseEvent e) { @@ -176,19 +209,42 @@ public final class JalviewBinding } + /** + * Partially refactored from TreeCanvas + */ + public void partitionTree(final MouseEvent e) + { + int x = e.getX(); + + Phylogeny tree = treeView.getPhylogeny(); + double treeHeight = tree.calculateHeight(true); + + + if (treeHeight != 0) + { + int viewWidth = treeView.getWidth(); + + // treeView.validate(); + + // System.out.println("selection"); + // System.out.println(x); + // System.out.println("-------------"); + // System.out.println("width"); + // System.out.println(viewWidth); + + } + + + } + @Override - public void showNodeSelectionOnAlign(final MouseEvent e) + public void showNodeSelectionOnAlign(final PhylogenyNode node) { - final PhylogenyNode node = treeView.findNode(e.getX(), e.getY()); - if (node != null) + if (treeView.getFoundNodes0() == null) { - if ((e.getModifiers() & InputEvent.SHIFT_MASK) == 0) // clear previous - // selection if shift - // IS NOT pressed - { - parentAvport.setSelectionGroup(null); - } + treeView.setFoundNodes0(new HashSet()); + } if (node.isInternal()) { @@ -199,9 +255,10 @@ public final class JalviewBinding { showMatchingSequence(node); } - + treeView.repaint(); + PaintRefresher.Refresh(treeView, parentAvport.getSequenceSetId()); } - } + @@ -212,9 +269,11 @@ public final class JalviewBinding SequenceI matchingSequence = nodesBoundToSequences.get(nodeToMatch); if (matchingSequence != null) { + long nodeId = nodeToMatch.getId(); + addOrRemoveInSet(treeView.getFoundNodes0(), nodeId); treeSelectionChanged(matchingSequence); - parentAvport.sendSelection(); - PaintRefresher.Refresh(treeView, parentAvport.getSequenceSetId()); // redundant? + // parentAvport.sendSelection(); // this shouldn't be needed + } } @@ -224,6 +283,7 @@ public final class JalviewBinding List childNodes = PhylogenyMethods .getAllDescendants(parentNode); + for (PhylogenyNode childNode : childNodes) { // childNode.getBranchData().setBranchColor(new BranchColor(Color.BLUE)); @@ -231,12 +291,17 @@ public final class JalviewBinding SequenceI matchingSequence = nodesBoundToSequences.get(childNode); if (matchingSequence != null) { + long nodeId = childNode.getId(); + addOrRemoveInSet(treeView.getFoundNodes0(), nodeId); + treeSelectionChanged(matchingSequence); } + } - parentAvport.sendSelection(); - PaintRefresher.Refresh(treeView, parentAvport.getSequenceSetId()); // redundant? + // parentAvport.sendSelection(); // this shouldn't be needed + + } /** @@ -248,16 +313,38 @@ public final class JalviewBinding @Override public void treeSelectionChanged(final SequenceI sequence) { - SequenceGroup selected = parentAvport.getSelectionGroup(); - - if (selected == null) + if (!parentAvport.isClosed()) // alignment view could be closed { - selected = new SequenceGroup(); - parentAvport.setSelectionGroup(selected); + SequenceGroup selected = parentAvport.getSelectionGroup(); + + if (selected == null) + { + selected = new SequenceGroup(); + parentAvport.setSelectionGroup(selected); + } + + selected.setEndRes(parentAvport.getAlignment().getWidth() - 1); + selected.addOrRemove(sequence, true); } - selected.setEndRes(parentAvport.getAlignment().getWidth() - 1); - selected.addOrRemove(sequence, true); + } + + /** + * TO BE MOVED + * + * @param set + * @param objectToCheck + */ + public void addOrRemoveInSet(Set set, E objectToCheck) + { + if (set.contains(objectToCheck)) + { + set.remove(objectToCheck); + } + else + { + set.add(objectToCheck); + } }