Load in a thread
[jalview.git] / src / jalview / gui / TreeCanvas.java
index 2f5ddf4..672d200 100755 (executable)
@@ -74,19 +74,15 @@ public class TreeCanvas extends JPanel implements MouseListener, Runnable,
      * @param scroller DOCUMENT ME!\r
      * @param label DOCUMENT ME!\r
      */\r
-    public TreeCanvas(AlignViewport av, NJTree tree, JScrollPane scroller,\r
-        String label)\r
+    public TreeCanvas(AlignViewport av, JScrollPane scroller)\r
     {\r
         this.av = av;\r
-        this.tree = tree;\r
         scrollPane = scroller;\r
         addMouseListener(this);\r
-        tree.findHeight(tree.getTopNode());\r
-        longestName = label;\r
-\r
         PaintRefresher.Register(this, av.alignment);\r
     }\r
 \r
+\r
     /**\r
      * DOCUMENT ME!\r
      *\r
@@ -118,6 +114,30 @@ public class TreeCanvas extends JPanel implements MouseListener, Runnable,
     {\r
         this.tree = tree;\r
         tree.findHeight(tree.getTopNode());\r
+\r
+        // Now have to calculate longest name based on the leaves\r
+        Vector leaves = tree.findLeaves(tree.getTopNode(), new Vector());\r
+        boolean has_placeholders = false;\r
+        longestName = "";\r
+\r
+        for (int i = 0; i < leaves.size(); i++)\r
+        {\r
+          SequenceNode lf = (SequenceNode) leaves.elementAt(i);\r
+\r
+          if (lf.isPlaceholder())\r
+          {\r
+            has_placeholders = true;\r
+          }\r
+\r
+          if (longestName.length() < ( (Sequence) lf.element()).getName()\r
+              .length())\r
+          {\r
+            longestName = TreeCanvas.PLACEHOLDER +\r
+                ( (Sequence) lf.element()).getName();\r
+          }\r
+        }\r
+\r
+        setMarkPlaceholders(has_placeholders);\r
     }\r
 \r
     /**\r
@@ -503,32 +523,41 @@ public class TreeCanvas extends JPanel implements MouseListener, Runnable,
     public void paintComponent(Graphics g)\r
     {\r
         super.paintComponent(g);\r
-        font = new Font("Verdana", Font.PLAIN, fontSize);\r
-        g.setFont(font);\r
+        if(tree==null)\r
+        {\r
+          g.setFont(new Font("Verdana", Font.PLAIN, 18));\r
+          g.drawString("Calculating tree....", 20, getHeight()/2);\r
+        }\r
+        else\r
+        {\r
 \r
-        FontMetrics fm = g.getFontMetrics(font);\r
+          font = new Font("Verdana", Font.PLAIN, fontSize);\r
+          g.setFont(font);\r
 \r
-        if (nameHash.size() == 0)\r
-        {\r
+          FontMetrics fm = g.getFontMetrics(font);\r
+\r
+          if (nameHash.size() == 0)\r
+          {\r
             repaint();\r
-        }\r
+          }\r
 \r
-        if (fitToWindow ||\r
-                (!fitToWindow &&\r
-                (scrollPane.getHeight() > ((fm.getHeight() * nameHash.size()) +\r
-                offy))))\r
-        {\r
+          if (fitToWindow ||\r
+              (!fitToWindow &&\r
+               (scrollPane.getHeight() > ( (fm.getHeight() * nameHash.size()) +\r
+                                          offy))))\r
+          {\r
             draw(g, scrollPane.getWidth(), scrollPane.getHeight());\r
             setPreferredSize(null);\r
-        }\r
-        else\r
-        {\r
+          }\r
+          else\r
+          {\r
             setPreferredSize(new Dimension(scrollPane.getWidth(),\r
-                    fm.getHeight() * nameHash.size()));\r
+                                           fm.getHeight() * nameHash.size()));\r
             draw(g, scrollPane.getWidth(), fm.getHeight() * nameHash.size());\r
-        }\r
+          }\r
 \r
-        scrollPane.revalidate();\r
+          scrollPane.revalidate();\r
+        }\r
     }\r
 \r
     /**\r