JAL-2844 mouse press code rearranged to prepare for tree partitioning
[jalview.git] / src / jalview / ext / archaeopteryx / JalviewBinding.java
index ee349b6..53078cf 100644 (file)
@@ -17,6 +17,11 @@ import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
 
+import javax.swing.JTabbedPane;
+import javax.swing.SwingUtilities;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
+
 import org.forester.archaeopteryx.MainFrame;
 import org.forester.phylogeny.PhylogenyMethods;
 import org.forester.phylogeny.PhylogenyNode;
@@ -36,6 +41,8 @@ public final class JalviewBinding
 
   private AlignmentViewport parentAvport;
 
+  private JTabbedPane treeTabs;
+
   private final StructureSelectionManager ssm;
 
   private Map<SequenceI, PhylogenyNode> sequencesBoundToNodes;
@@ -66,12 +73,48 @@ public final class JalviewBinding
     parentAvport = jalviewAlignmentViewport;
     sequencesBoundToNodes = alignMappedToNodes;
     nodesBoundToSequences = nodesMappedToAlign;
+
     treeView = archaeopteryx.getMainPanel().getCurrentTreePanel();
+    treeTabs = archaeopteryx.getMainPanel().getTabbedPane();
     ssm = parentAvport.getStructureSelectionManager();
+
+   // archaeopteryx.getMainPanel().getControlPanel().setColorBranches(true);
+    
     ssm.addSelectionListener(this);
     treeView.addMouseListener(this);
     PaintRefresher.Register(treeView, parentAvport.getSequenceSetId());
 
+
+    treeTabs.addChangeListener(new ChangeListener()
+    {
+
+      @Override
+      public void stateChanged(ChangeEvent e)
+      {
+
+        SwingUtilities.invokeLater(new Runnable()
+        {
+
+          @Override
+          /**
+           * Resend the selection to the tree view when tabs get switched, this
+           * has to be buried in invokeLater as Forester first resets the tree
+           * view on switching tabs, without invokeLater this would get called
+           * before Forester resets which would nullify the selection.
+           */
+          public void run()
+          {
+            parentAvport.sendSelection();
+            // PaintRefresher.Refresh(treeView,
+            // parentAvport.getSequenceSetId());
+
+          }
+        });
+
+      }
+      
+    });
+
   }
 
   @Override
@@ -87,9 +130,23 @@ public final class JalviewBinding
   @Override
   public void mousePressed(final MouseEvent e)
   {
-    showNodeSelectionOnAlign(e);
-  }
+    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);
 
+      }
+      showNodeSelectionOnAlign(node);
+    }
+    else
+    {
+      partitionTree();
+    }
+  }
   @Override
   public void mouseReleased(MouseEvent e)
   {
@@ -133,20 +190,15 @@ public final class JalviewBinding
 
   }
 
+  public void partitionTree()
+  {
+
+  }
+
 
   @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 ((e.getModifiers() & InputEvent.SHIFT_MASK) == 0) // clear previous
-                                                           // selection if shift
-                                                           // IS NOT pressed
-      {
-        parentAvport.setSelectionGroup(null);
-      }
-
       if (node.isInternal())
       {
         showMatchingChildSequences(node);
@@ -158,7 +210,7 @@ public final class JalviewBinding
       }
 
     }
-  }
+
 
 
 
@@ -171,7 +223,7 @@ public final class JalviewBinding
     {
       treeSelectionChanged(matchingSequence);
       parentAvport.sendSelection();
-      PaintRefresher.Refresh(treeView, parentAvport.getSequenceSetId());
+      PaintRefresher.Refresh(treeView, parentAvport.getSequenceSetId()); // redundant?
     }
   }
 
@@ -183,6 +235,7 @@ public final class JalviewBinding
 
     for (PhylogenyNode childNode : childNodes)
     {
+      // childNode.getBranchData().setBranchColor(new BranchColor(Color.BLUE));
 
       SequenceI matchingSequence = nodesBoundToSequences.get(childNode);
       if (matchingSequence != null)
@@ -191,9 +244,8 @@ public final class JalviewBinding
 
       }
     }
-
     parentAvport.sendSelection();
-    PaintRefresher.Refresh(treeView, parentAvport.getSequenceSetId());
+    PaintRefresher.Refresh(treeView, parentAvport.getSequenceSetId()); // redundant?
   }
 
   /**
@@ -227,79 +279,6 @@ public final class JalviewBinding
   {
     this.parentAvport = parentAvport;
   }
-  // av.setCurrentTree(tree);
-  //
-  // /*
-  // * isPopupTrigger is set for mousePressed (Mac)
-  // * or mouseReleased (Windows)
-  // */
-  // if (e.isPopupTrigger())
-  // {
-  // if (highlightNode != null)
-  // {
-  // chooseSubtreeColour();
-  // }
-  // return;
-  // }
-  //
-  // /*
-  // * defer right-click handling on Windows to
-  // * mouseClicked; note isRightMouseButton
-  // * also matches Cmd-click on Mac which should do
-  // * nothing here
-  // */
-  // if (SwingUtilities.isRightMouseButton(e))
-  // {
-  // return;
-  // }
-  //
-  // int x = e.getX();
-  // int y = e.getY();
-  //
-  // Object ob = findElement(x, y);
-  //
-  // if (ob instanceof SequenceI)
-  // {
-  // treeSelectionChanged((Sequence) ob);
-  // PaintRefresher.Refresh(tp, ap.av.getSequenceSetId());
-  // repaint();
-  // av.sendSelection();
-  // return;
-  // }
-  // else if (!(ob instanceof SequenceNode))
-  // {
-  // // Find threshold
-  // if (tree.getMaxHeight() != 0)
-  // {
-  // threshold = (float) (x - offx)
-  // / (float) (getWidth() - labelLength - (2 * offx));
-  //
-  // List<SequenceNode> groups = tree.groupNodes(threshold);
-  // setColor(tree.getTopNode(), Color.black);
-  //
-  // AlignmentPanel[] aps = getAssociatedPanels();
-  //
-  // // TODO push calls below into a single AlignViewportI method?
-  // // see also AlignViewController.deleteGroups
-  // for (int a = 0; a < aps.length; a++)
-  // {
-  // aps[a].av.setSelectionGroup(null);
-  // aps[a].av.getAlignment().deleteAllGroups();
-  // aps[a].av.clearSequenceColours();
-  // if (aps[a].av.getCodingComplement() != null)
-  // {
-  // aps[a].av.getCodingComplement().setSelectionGroup(null);
-  // aps[a].av.getCodingComplement().getAlignment()
-  // .deleteAllGroups();
-  // aps[a].av.getCodingComplement().clearSequenceColours();
-  // }
-  // }
-  // colourGroups(groups);
-  // }
-  //
-  // PaintRefresher.Refresh(tp, ap.av.getSequenceSetId());
-  // repaint();
-  // }
 }