From 8a5c39442bced20fc95272efe6d3176719ca3f15 Mon Sep 17 00:00:00 2001 From: amwaterhouse Date: Thu, 8 Sep 2005 15:47:23 +0000 Subject: [PATCH] Load in a thread --- src/jalview/appletgui/TreeCanvas.java | 30 +++++++-- src/jalview/appletgui/TreePanel.java | 115 +++++++++++++++++--------------- src/jalview/gui/TreeCanvas.java | 75 ++++++++++++++------- src/jalview/gui/TreePanel.java | 117 ++++++++++++++------------------- 4 files changed, 189 insertions(+), 148 deletions(-) diff --git a/src/jalview/appletgui/TreeCanvas.java b/src/jalview/appletgui/TreeCanvas.java index 9483436..47bebbe 100755 --- a/src/jalview/appletgui/TreeCanvas.java +++ b/src/jalview/appletgui/TreeCanvas.java @@ -59,15 +59,11 @@ public class TreeCanvas Hashtable nameHash = new Hashtable(); Hashtable nodeHash = new Hashtable(); - public TreeCanvas(AlignViewport av, NJTree tree, ScrollPane scroller, - String label) + public TreeCanvas(AlignViewport av, ScrollPane scroller) { this.av = av; - this.tree = tree; scrollPane = scroller; addMouseListener(this); - tree.findHeight(tree.getTopNode()); - longestName = label; setLayout(null); PaintRefresher.Register(this, av.alignment); @@ -93,6 +89,30 @@ public class TreeCanvas { this.tree = tree; tree.findHeight(tree.getTopNode()); + + // Now have to calculate longest name based on the leaves + Vector leaves = tree.findLeaves(tree.getTopNode(), new Vector()); + boolean has_placeholders = false; + longestName = ""; + + for (int i = 0; i < leaves.size(); i++) + { + SequenceNode lf = (SequenceNode) leaves.elementAt(i); + + if (lf.isPlaceholder()) + { + has_placeholders = true; + } + + if (longestName.length() < ( (Sequence) lf.element()).getName() + .length()) + { + longestName = TreeCanvas.PLACEHOLDER + + ( (Sequence) lf.element()).getName(); + } + } + + setMarkPlaceholders(has_placeholders); } public void drawNode(Graphics g, SequenceNode node, float chunk, float scale, diff --git a/src/jalview/appletgui/TreePanel.java b/src/jalview/appletgui/TreePanel.java index 1785961..51ec4a0 100755 --- a/src/jalview/appletgui/TreePanel.java +++ b/src/jalview/appletgui/TreePanel.java @@ -45,87 +45,96 @@ public class TreePanel return tree; } - public TreePanel(AlignmentPanel ap, Vector seqVector, String type, + /** + * Creates a new TreePanel object. + * + * @param av DOCUMENT ME! + * @param seqVector DOCUMENT ME! + * @param type DOCUMENT ME! + * @param pwtype DOCUMENT ME! + * @param s DOCUMENT ME! + * @param e DOCUMENT ME! + */ + public TreePanel(AlignViewport av, Vector seqVector, String type, String pwtype, int s, int e) { super(); + initTreePanel(av, seqVector, type, pwtype, s, e, null); + + // We know this tree has distances. JBPNote TODO: prolly should add this as a userdefined default + treeCanvas.setShowDistances(true); + } + + /** + * Creates a new TreePanel object. + * + * @param av DOCUMENT ME! + * @param seqVector DOCUMENT ME! + * @param newtree DOCUMENT ME! + * @param type DOCUMENT ME! + * @param pwtype DOCUMENT ME! + */ + public TreePanel(AlignViewport av, Vector seqVector, NewickFile newtree, + String type, String pwtype) + { + super(); + initTreePanel(av, seqVector, type, pwtype, 0, seqVector.size(), newtree); + } + + + void initTreePanel(AlignViewport av, Vector seqVector, String type, + String pwtype, int s, int e, NewickFile newTree) + { - this.ap = ap; this.type = type; this.pwtype = pwtype; start = s; end = e; - String longestName = ""; seq = new Sequence[seqVector.size()]; - for (int i = 0; i < seqVector.size(); i++) - { - seq[i] = (Sequence) seqVector.elementAt(i); - if (seq[i].getName().length() > longestName.length()) - { - longestName = seq[i].getName(); - } - } + for(int i=0; i ((fm.getHeight() * nameHash.size()) + - offy)))) - { + if (fitToWindow || + (!fitToWindow && + (scrollPane.getHeight() > ( (fm.getHeight() * nameHash.size()) + + offy)))) + { draw(g, scrollPane.getWidth(), scrollPane.getHeight()); setPreferredSize(null); - } - else - { + } + else + { setPreferredSize(new Dimension(scrollPane.getWidth(), - fm.getHeight() * nameHash.size())); + fm.getHeight() * nameHash.size())); draw(g, scrollPane.getWidth(), fm.getHeight() * nameHash.size()); - } + } - scrollPane.revalidate(); + scrollPane.revalidate(); + } } /** diff --git a/src/jalview/gui/TreePanel.java b/src/jalview/gui/TreePanel.java index ff02d49..8d13e93 100755 --- a/src/jalview/gui/TreePanel.java +++ b/src/jalview/gui/TreePanel.java @@ -68,37 +68,13 @@ public class TreePanel extends GTreePanel * @param e DOCUMENT ME! */ public TreePanel(AlignViewport av, Vector seqVector, String type, - String pwtype, int s, int e) + String pwtype, int s, int e) { - super(); + super(); + initTreePanel(av, seqVector, type, pwtype, s, e, null); - this.type = type; - this.pwtype = pwtype; - - start = s; - end = e; - - String longestName = ""; - seq = new Sequence[seqVector.size()]; - - for (int i = 0; i < seqVector.size(); i++) - { - seq[i] = (Sequence) seqVector.elementAt(i); - - if (seq[i].getName().length() > longestName.length()) - { - longestName = seq[i].getName(); - } - } - - tree = new NJTree(seq, type, pwtype, start, end); - - treeCanvas = new TreeCanvas(av, tree, scrollPane, longestName); - treeCanvas.setShowDistances(true); // We know this tree has distances. JBPNote TODO: prolly should add this as a userdefined default - setViewStateFromTreeCanvas(treeCanvas); - tree.reCount(tree.getTopNode()); - tree.findHeight(tree.getTopNode()); - scrollPane.setViewportView(treeCanvas); + // We know this tree has distances. JBPNote TODO: prolly should add this as a userdefined default + treeCanvas.setShowDistances(true); } /** @@ -111,62 +87,69 @@ public class TreePanel extends GTreePanel * @param pwtype DOCUMENT ME! */ public TreePanel(AlignViewport av, Vector seqVector, NewickFile newtree, - String type, String pwtype) + String type, String pwtype) { - super(); + super(); + initTreePanel(av, seqVector, type, pwtype, 0, seqVector.size(), newtree); + } - // These are probably only arbitrary strings reflecting source of tree - this.type = type; - this.pwtype = pwtype; - start = 0; - end = seqVector.size(); + void initTreePanel(AlignViewport av, Vector seqVector, String type, + String pwtype, int s, int e, NewickFile newTree) + { - String longestName = ""; - seq = new Sequence[seqVector.size()]; + this.type = type; + this.pwtype = pwtype; - for (int i = 0; i < seqVector.size(); i++) - { - seq[i] = (Sequence) seqVector.elementAt(i); - } + start = s; + end = e; - // This constructor matches sequence names to treenodes and sets up the tree layouts. - tree = new NJTree(seq, newtree); + seq = new Sequence[seqVector.size()]; + seqVector.toArray(seq); - // Now have to calculate longest name based on the leaves - Vector leaves = tree.findLeaves(tree.getTopNode(), new Vector()); - boolean has_placeholders = false; - for (int i = 0; i < leaves.size(); i++) - { - SequenceNode lf = (SequenceNode) leaves.elementAt(i); + treeCanvas = new TreeCanvas(av, scrollPane); + scrollPane.setViewportView(treeCanvas); - if (lf.isPlaceholder()) - { - has_placeholders = true; - } + TreeLoader tl = new TreeLoader(newTree); + tl.start(); - if (longestName.length() < ((Sequence) lf.element()).getName() - .length()) - { - longestName = TreeCanvas.PLACEHOLDER + - ((Sequence) lf.element()).getName(); - } - } + } + + class TreeLoader extends Thread + { + NewickFile newtree; + + public TreeLoader(NewickFile newtree) + { + this.newtree = newtree; + } + + public void run() + { + NJTree tree; + if(newtree!=null) + tree = new NJTree(seq, newtree); + else + tree = new NJTree(seq, type, pwtype, start, end); tree.reCount(tree.getTopNode()); tree.findHeight(tree.getTopNode()); + treeCanvas.setTree(tree); + if(newtree!=null) + { + treeCanvas.setShowBootstrap(newtree.HasBootstrap()); + treeCanvas.setShowDistances(newtree.HasDistances()); + } - treeCanvas = new TreeCanvas(av, tree, scrollPane, longestName); - treeCanvas.setShowBootstrap(newtree.HasBootstrap()); - treeCanvas.setShowDistances(newtree.HasDistances()); - scrollPane.setViewportView(treeCanvas); - treeCanvas.setMarkPlaceholders(has_placeholders); setViewStateFromTreeCanvas(treeCanvas); - // JBPNote TODO: preference for always marking placeholders in new associated tree + treeCanvas.repaint(); + + } } + /** * DOCUMENT ME! * -- 1.7.10.2