~ubuntu-branches/ubuntu/utopic/figtree/utopic

« back to all changes in this revision

Viewing changes to src/figtree/treeviewer/painters/NodeShapePainter.java

  • Committer: Bazaar Package Importer
  • Author(s): Andreas Tille
  • Date: 2011-02-21 08:17:38 UTC
  • Revision ID: james.westby@ubuntu.com-20110221081738-80pe2ulo8rg7up10
Tags: upstream-1.3.1
ImportĀ upstreamĀ versionĀ 1.3.1

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
package figtree.treeviewer.painters;
 
2
 
 
3
import figtree.treeviewer.TreePane;
 
4
import jebl.evolution.graphs.Node;
 
5
import jebl.evolution.trees.RootedTree;
 
6
import jebl.evolution.trees.Tree;
 
7
 
 
8
import java.awt.*;
 
9
import java.awt.geom.Point2D;
 
10
import java.awt.geom.Rectangle2D;
 
11
import java.util.*;
 
12
 
 
13
/**
 
14
 * @author Andrew Rambaut
 
15
 * @version $Id: NodeShapePainter.java 536 2006-11-21 16:10:24Z rambaut $
 
16
 */
 
17
public class NodeShapePainter extends NodePainter {
 
18
 
 
19
        public static final String AREA_ATTRIBUTE = "area";
 
20
        public static final String RADIUS_ATTRIBUTE = "radius";
 
21
 
 
22
        public static final String WIDTH_ATTRIBUTE = "width";
 
23
        public static final String HEIGHT_ATTRIBUTE = "height";
 
24
 
 
25
    public static final String LOWER_ATTRIBUTE = "lower";
 
26
    public static final String UPPER_ATTRIBUTE = "upper";
 
27
 
 
28
        public enum NodeShape {
 
29
            CIRCLE("Circle"),
 
30
            RECTANGLE("Rectangle");
 
31
 
 
32
            NodeShape(String name) {
 
33
                this.name = name;
 
34
            }
 
35
 
 
36
            public String getName() {
 
37
                return name;
 
38
            }
 
39
 
 
40
            public String toString() {
 
41
                return name;
 
42
            }
 
43
 
 
44
            private final String name;
 
45
        }
 
46
 
 
47
    public NodeShapePainter() {
 
48
 
 
49
        setupAttributes(null);
 
50
    }
 
51
 
 
52
    public void setupAttributes(Tree tree) {
 
53
        java.util.List<String> attributeNames = new ArrayList<String>();
 
54
        if (tree != null) {
 
55
            Set<String> nodeAttributes = new TreeSet<String>();
 
56
            for (Node node : tree.getNodes()) {
 
57
                nodeAttributes.addAll(node.getAttributeNames());
 
58
            }
 
59
            attributeNames.addAll(nodeAttributes);
 
60
        }
 
61
 
 
62
        this.attributes = new String[attributeNames.size()];
 
63
        attributeNames.toArray(this.attributes);
 
64
 
 
65
        firePainterSettingsChanged();
 
66
    }
 
67
 
 
68
    public void setTreePane(TreePane treePane) {
 
69
        this.treePane = treePane;
 
70
    }
 
71
 
 
72
    public Rectangle2D calibrate(Graphics2D g2, Node item) {
 
73
        RootedTree tree = treePane.getTree();
 
74
        Point2D nodePoint = treePane.getTreeLayoutCache().getNodePoint(item);
 
75
 
 
76
        preferredWidth = 20;
 
77
        preferredHeight = 20;
 
78
 
 
79
        return new Rectangle2D.Double(nodePoint.getX() - 10, nodePoint.getY() - 10, preferredWidth, preferredHeight);
 
80
    }
 
81
 
 
82
    public double getPreferredWidth() {
 
83
        return preferredWidth;
 
84
    }
 
85
 
 
86
    public double getPreferredHeight() {
 
87
        return preferredHeight;
 
88
    }
 
89
 
 
90
    public double getHeightBound() {
 
91
        return preferredHeight;
 
92
    }
 
93
 
 
94
    /**
 
95
     * The bounds define the shape of the bar so just draw it
 
96
     * @param g2
 
97
     * @param item
 
98
     * @param justification
 
99
     * @param bounds
 
100
     */
 
101
    public void paint(Graphics2D g2, Node item, Justification justification, Rectangle2D bounds) {
 
102
        if (getBackground() != null) {
 
103
            g2.setPaint(getBackground());
 
104
            g2.fill(bounds);
 
105
        }
 
106
 
 
107
        if (getBorderPaint() != null && getBorderStroke() != null) {
 
108
            g2.setPaint(getBorderPaint());
 
109
            g2.setStroke(getBorderStroke());
 
110
        }
 
111
 
 
112
        g2.draw(bounds);
 
113
    }
 
114
 
 
115
    public String[] getAttributeNames() {
 
116
        return attributes;
 
117
    }
 
118
 
 
119
    public void setDisplayAttribute(String display, String attribute) {
 
120
        displayAttributes.put(display, attribute);
 
121
        firePainterChanged();
 
122
    }
 
123
 
 
124
    public void setDisplayValues(String display, double value) {
 
125
        displayValues.put(display, new Double(value));
 
126
        firePainterChanged();
 
127
    }
 
128
 
 
129
    private double preferredWidth;
 
130
    private double preferredHeight;
 
131
 
 
132
    protected Map<String, String> displayAttributes = new HashMap<String, String>();
 
133
    protected Map<String, Number> displayValues = new HashMap<String, Number>();
 
134
    protected String[] attributes;
 
135
 
 
136
    protected TreePane treePane;
 
137
}