added tree node property for sequence placeholders.
[jalview.git] / src / jalview / appletgui / TreePanel.java
1 package jalview.appletgui;
2
3 import jalview.datamodel.*;
4 import jalview.io.NewickFile;
5 import jalview.analysis.*;
6 import jalview.jbappletgui.GTreePanel;
7 import java.awt.event.*;
8 import java.util.*;
9 import jalview.io.NewickFile;
10
11
12 public class TreePanel extends GTreePanel
13 {
14   SequenceI[] seq;
15   String type;
16   String pwtype;
17   AlignViewport av;
18   int start;
19   int end;
20   TreeCanvas treeCanvas;
21   NJTree tree;
22
23   public NJTree getTree()
24   {
25     return tree;
26   }
27
28   public TreePanel(AlignViewport av, Vector seqVector, String type, String pwtype, int s, int e)
29   {
30     super();
31
32     this.type = type;
33     this.pwtype = pwtype;
34
35     start = s;
36     end = e;
37
38     String longestName = "";
39     seq = new Sequence [seqVector.size()];
40     for (int i=0;i < seqVector.size();i++)
41     {
42       seq[i] = (Sequence) seqVector.elementAt(i);
43       if(seq[i].getName().length()>longestName.length())
44         longestName = seq[i].getName();
45     }
46
47     tree = new NJTree(seq, type, pwtype, start, end);
48
49     treeCanvas = new TreeCanvas(av, tree, scrollPane, longestName);
50
51     tree.reCount(tree.getTopNode());
52     tree.findHeight(tree.getTopNode());
53     scrollPane.add(treeCanvas);
54
55   }
56   public TreePanel(AlignViewport av, Vector seqVector, NewickFile newtree,
57                    String type, String pwtype)
58     {
59       super();
60       // These are probably only  arbitrary strings reflecting source of tree
61       this.type = type;
62       this.pwtype = pwtype;
63
64       start = 0;
65       end = seqVector.size();
66
67       String longestName = "";
68       seq = new Sequence [seqVector.size()];
69       for (int i=0;i < seqVector.size();i++)
70       {
71         seq[i] = (Sequence) seqVector.elementAt(i);
72       }
73       // This constructor matches sequence names to treenodes and sets up the tree layouts.
74       tree = new NJTree(seq, newtree);
75       // Now have to calculate longest name based on the leaves
76       Vector leaves = tree.findLeaves(tree.getTopNode(),new Vector());
77
78       for (int i=0;i < leaves.size();i++)
79         if (longestName.length()<((Sequence) ((SequenceNode) leaves.elementAt(i)).element()).getName().length())
80           longestName = TreeCanvas.PLACEHOLDER+((Sequence) ((SequenceNode) leaves.elementAt(i)).element()).getName();
81
82       tree.reCount(tree.getTopNode());
83       tree.findHeight(tree.getTopNode());
84
85       treeCanvas = new TreeCanvas(av, tree, scrollPane, longestName);
86       treeCanvas.setShowBootstrap(newtree.HasBootstrap());
87       treeCanvas.setShowDistances(newtree.HasDistances());
88       distanceMenu.setState(newtree.HasDistances());
89       bootstrapMenu.setState(newtree.HasBootstrap());
90       if (true) // JBPNote TODO: preference for always marking placeholders in new associated tree
91         placeholdersMenu.setState(treeCanvas.markPlaceholders);
92       scrollPane.add(treeCanvas);
93
94     }
95
96 public String getText(String format) {
97   return null;
98 }
99
100   protected void fitToWindow_actionPerformed(ActionEvent e)
101   {
102     treeCanvas.fitToWindow = fitToWindow.getState();
103     repaint();
104   }
105
106   public void newickOutput_actionPerformed(ActionEvent actionEvent)
107   {
108     jalview.io.NewickFile fout = new jalview.io.NewickFile(tree.getTopNode());
109     String output = fout.print(false, true);
110     CutAndPasteTransfer cap = new CutAndPasteTransfer(false);
111     cap.setText(output);
112     java.awt.Frame frame = new java.awt.Frame();
113     frame.add(cap);
114     jalview.bin.JalviewLite.addFrame(frame, type+" "+pwtype, 500,500);
115   }
116
117
118
119   protected void fontSize_actionPerformed(ActionEvent e)
120   {
121  /*   if( treeCanvas==null )
122      return;
123
124    String size = fontSize.getLabel().substring( fontSize.getLabel().indexOf("-")+1);
125
126    Object selection = JOptionPane.showInternalInputDialog(Desktop.desktop,
127                                "Select font size",
128                                "Font size",
129                                JOptionPane.QUESTION_MESSAGE,
130                                null, new String[]{"1","2","4","6","8","10","12","14","16","18","20"}
131                                ,"Font Size - "+size);
132    if(selection!=null)
133    {
134      fontSize.setText("Font Size - " + selection);
135
136      int i = Integer.parseInt(selection.toString());
137      treeCanvas.setFontSize(i);
138    }
139     scrollPane.setViewportView(treeCanvas);
140 */
141   }
142
143   protected void distanceMenu_actionPerformed(ActionEvent e)
144   {
145     treeCanvas.setShowDistances(distanceMenu.getState());
146   }
147
148   protected void bootstrapMenu_actionPerformed(ActionEvent e)
149   {
150     treeCanvas.setShowBootstrap(bootstrapMenu.getState());
151   }
152
153   protected void placeholdersMenu_actionPerformed(ActionEvent e)
154   {
155       treeCanvas.setMarkPlaceholders(placeholdersMenu.getState());
156   }
157
158 }