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

« back to all changes in this revision

Viewing changes to src/figtree/treeviewer/painters/ScaleBarPainterController.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 jam.controlpalettes.AbstractController;
 
4
import jam.panels.OptionsPanel;
 
5
 
 
6
import javax.swing.*;
 
7
import javax.swing.event.ChangeEvent;
 
8
import javax.swing.event.ChangeListener;
 
9
import java.awt.*;
 
10
import java.text.NumberFormat;
 
11
import java.text.DecimalFormat;
 
12
import java.util.Map;
 
13
import java.util.prefs.Preferences;
 
14
 
 
15
import figtree.treeviewer.ControllerOptionsPanel;
 
16
import figtree.treeviewer.TreeViewer;
 
17
import figtree.ui.components.RealNumberField;
 
18
 
 
19
/**
 
20
 * @author Andrew Rambaut
 
21
 * @version $Id: ScaleBarPainterController.java 760 2007-08-21 00:05:45Z rambaut $
 
22
 */
 
23
public class ScaleBarPainterController extends AbstractController {
 
24
 
 
25
    public static Preferences PREFS = Preferences.userNodeForPackage(TreeViewer.class);
 
26
 
 
27
    public static final String CONTROLLER_KEY = "scaleBar";
 
28
 
 
29
    public static final String FONT_NAME_KEY = "fontName";
 
30
    public static final String FONT_SIZE_KEY = "fontSize";
 
31
    public static final String FONT_STYLE_KEY = "fontStyle";
 
32
 
 
33
    public static final String NUMBER_FORMATTING_KEY = "numberFormatting";
 
34
 
 
35
 
 
36
    public static final String AUTOMATIC_SCALE_KEY = "automaticScale";
 
37
    public static final String SCALE_RANGE_KEY = "scaleRange";
 
38
    public static final String LINE_WIDTH_KEY = "lineWidth";
 
39
 
 
40
    public static final String SIGNIFICANT_DIGITS_KEY = "significantDigits";
 
41
 
 
42
    // The defaults if there is nothing in the preferences
 
43
    public static String DEFAULT_FONT_NAME = "sansserif";
 
44
    public static int DEFAULT_FONT_SIZE = 10;
 
45
    public static int DEFAULT_FONT_STYLE = Font.PLAIN;
 
46
 
 
47
    public static String DEFAULT_NUMBER_FORMATTING = "#.####";
 
48
    public static float DEFAULT_LINE_WIDTH = 1.0f;
 
49
 
 
50
    public ScaleBarPainterController(final ScaleBarPainter scaleBarPainter) {
 
51
        this.scaleBarPainter = scaleBarPainter;
 
52
 
 
53
        final String defaultFontName = PREFS.get(CONTROLLER_KEY + "." + FONT_NAME_KEY, DEFAULT_FONT_NAME);
 
54
        final int defaultFontStyle = PREFS.getInt(CONTROLLER_KEY + "." + FONT_STYLE_KEY, DEFAULT_FONT_STYLE);
 
55
        final int defaultFontSize = PREFS.getInt(CONTROLLER_KEY + "." + FONT_SIZE_KEY, DEFAULT_FONT_SIZE);
 
56
        final String defaultNumberFormatting = PREFS.get(CONTROLLER_KEY + "." + NUMBER_FORMATTING_KEY, DEFAULT_NUMBER_FORMATTING);
 
57
 
 
58
        float lineWidth = PREFS.getFloat(LINE_WIDTH_KEY, DEFAULT_LINE_WIDTH);
 
59
 
 
60
        scaleBarPainter.setFont(new Font(defaultFontName, defaultFontStyle, defaultFontSize));
 
61
        scaleBarPainter.setNumberFormat(new DecimalFormat(defaultNumberFormatting));
 
62
        scaleBarPainter.setScaleBarStroke(new BasicStroke(lineWidth, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND));
 
63
 
 
64
            optionsPanel = new ControllerOptionsPanel(2, 2);
 
65
 
 
66
        titleCheckBox = new JCheckBox(getTitle());
 
67
 
 
68
        titleCheckBox.setSelected(scaleBarPainter.isVisible());
 
69
 
 
70
        autoScaleCheck = new JCheckBox("Automatic scale");
 
71
        autoScaleCheck.setSelected(true);
 
72
        optionsPanel.addSpanningComponent(autoScaleCheck);
 
73
 
 
74
        scaleRangeText = new RealNumberField(0.0, Double.MAX_VALUE);
 
75
        scaleRangeText.setValue(0.0);
 
76
 
 
77
        final JLabel label1 = optionsPanel.addComponentWithLabel("Scale Range:", scaleRangeText, true);
 
78
        label1.setEnabled(false);
 
79
        scaleRangeText.setEnabled(false);
 
80
 
 
81
        Font font = scaleBarPainter.getFont();
 
82
        fontSizeSpinner = new JSpinner(new SpinnerNumberModel(font.getSize(), 0.01, 48, 1));
 
83
 
 
84
        final JLabel label2 = optionsPanel.addComponentWithLabel("Font Size:", fontSizeSpinner);
 
85
 
 
86
        fontSizeSpinner.addChangeListener(new ChangeListener() {
 
87
            public void stateChanged(ChangeEvent changeEvent) {
 
88
                final float size = ((Double) fontSizeSpinner.getValue()).floatValue();
 
89
                Font font = scaleBarPainter.getFont().deriveFont(size);
 
90
                scaleBarPainter.setFont(font);
 
91
            }
 
92
        });
 
93
 
 
94
        NumberFormat format = this.scaleBarPainter.getNumberFormat();
 
95
        int digits = format.getMaximumFractionDigits();
 
96
        digitsSpinner = new JSpinner(new SpinnerNumberModel(digits, 2, 14, 1));
 
97
        final JLabel label3 = optionsPanel.addComponentWithLabel("Sig. Digits:", digitsSpinner);
 
98
 
 
99
        digitsSpinner.addChangeListener(new ChangeListener() {
 
100
            public void stateChanged(ChangeEvent changeEvent) {
 
101
                final int digits = (Integer)digitsSpinner.getValue();
 
102
                NumberFormat format = scaleBarPainter.getNumberFormat();
 
103
                format.setMaximumFractionDigits(digits);
 
104
                scaleBarPainter.setNumberFormat(format);
 
105
            }
 
106
        });
 
107
 
 
108
        lineWeightSpinner = new JSpinner(new SpinnerNumberModel(1.0, 0.01, 48.0, 1.0));
 
109
 
 
110
        lineWeightSpinner.addChangeListener(new ChangeListener() {
 
111
            public void stateChanged(ChangeEvent changeEvent) {
 
112
                float weight = ((Double) lineWeightSpinner.getValue()).floatValue();
 
113
                scaleBarPainter.setScaleBarStroke(new BasicStroke(weight, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL));
 
114
            }
 
115
        });
 
116
        final JLabel label4 = optionsPanel.addComponentWithLabel("Line Weight:", lineWeightSpinner);
 
117
 
 
118
        final boolean isSelected1 = titleCheckBox.isSelected();
 
119
        final boolean isSelected2 = autoScaleCheck.isSelected();
 
120
        label1.setEnabled(isSelected1 && !isSelected2);
 
121
        scaleRangeText.setEnabled(isSelected1 && !isSelected2);
 
122
        label2.setEnabled(isSelected1);
 
123
        fontSizeSpinner.setEnabled(isSelected1);
 
124
        label3.setEnabled(isSelected1);
 
125
        digitsSpinner.setEnabled(isSelected1);
 
126
        label4.setEnabled(isSelected1);
 
127
        lineWeightSpinner.setEnabled(isSelected1);
 
128
 
 
129
        titleCheckBox.addChangeListener(new ChangeListener() {
 
130
            public void stateChanged(ChangeEvent changeEvent) {
 
131
                final boolean isSelected1 = titleCheckBox.isSelected();
 
132
                final boolean isSelected2 = autoScaleCheck.isSelected();
 
133
 
 
134
                autoScaleCheck.setEnabled(isSelected1);
 
135
                label1.setEnabled(isSelected1 && !isSelected2);
 
136
                scaleRangeText.setEnabled(isSelected1 && !isSelected2);
 
137
                label2.setEnabled(isSelected1);
 
138
                fontSizeSpinner.setEnabled(isSelected1);
 
139
                label3.setEnabled(isSelected1);
 
140
                digitsSpinner.setEnabled(isSelected1);
 
141
                label4.setEnabled(isSelected1);
 
142
                lineWeightSpinner.setEnabled(isSelected1);
 
143
 
 
144
                scaleBarPainter.setVisible(isSelected1);
 
145
            }
 
146
        });
 
147
 
 
148
        autoScaleCheck.addChangeListener(new ChangeListener() {
 
149
            public void stateChanged(ChangeEvent changeEvent) {
 
150
                if (autoScaleCheck.isSelected()) {
 
151
                    scaleBarPainter.setAutomaticScale(true);
 
152
                    double range = scaleBarPainter.getScaleRange();
 
153
                    scaleRangeText.setValue(range);
 
154
                    label1.setEnabled(false);
 
155
                    scaleRangeText.setEnabled(false);
 
156
                } else {
 
157
                    label1.setEnabled(true);
 
158
                    scaleRangeText.setEnabled(true);
 
159
                    scaleBarPainter.setAutomaticScale(false);
 
160
                }
 
161
            }
 
162
        });
 
163
 
 
164
        scaleRangeText.addChangeListener(new ChangeListener() {
 
165
            public void stateChanged(ChangeEvent changeEvent) {
 
166
                Double value = scaleRangeText.getValue();
 
167
                if (value != null) {
 
168
                    scaleBarPainter.setScaleRange(value);
 
169
                }
 
170
            }
 
171
        });
 
172
    }
 
173
 
 
174
    public JComponent getTitleComponent() {
 
175
        return titleCheckBox;
 
176
    }
 
177
 
 
178
    public JPanel getPanel() {
 
179
        return optionsPanel;
 
180
    }
 
181
 
 
182
    public boolean isInitiallyVisible() {
 
183
        return false;
 
184
    }
 
185
 
 
186
    public void initialize() {
 
187
        // force a toggle of the checkbox
 
188
        autoScaleCheck.setSelected(false);
 
189
        autoScaleCheck.setSelected(true);
 
190
    }
 
191
 
 
192
    public void setSettings(Map<String,Object> settings) {
 
193
            titleCheckBox.setSelected((Boolean)settings.get(CONTROLLER_KEY + "." + IS_SHOWN));
 
194
        autoScaleCheck.setSelected((Boolean)settings.get(CONTROLLER_KEY + "." + AUTOMATIC_SCALE_KEY));
 
195
        scaleRangeText.setValue((Double)settings.get(CONTROLLER_KEY + "." + SCALE_RANGE_KEY));
 
196
        fontSizeSpinner.setValue((Double)settings.get(CONTROLLER_KEY + "." + FONT_SIZE_KEY));
 
197
        digitsSpinner.setValue((Integer)settings.get(CONTROLLER_KEY + "." + SIGNIFICANT_DIGITS_KEY));
 
198
        lineWeightSpinner.setValue((Double)settings.get(CONTROLLER_KEY + "." + LINE_WIDTH_KEY));
 
199
    }
 
200
 
 
201
    public void getSettings(Map<String, Object> settings) {
 
202
            settings.put(CONTROLLER_KEY + "." + IS_SHOWN, titleCheckBox.isSelected());
 
203
        settings.put(CONTROLLER_KEY + "." + AUTOMATIC_SCALE_KEY, autoScaleCheck.isSelected());
 
204
        settings.put(CONTROLLER_KEY + "." + SCALE_RANGE_KEY, scaleRangeText.getValue());
 
205
        settings.put(CONTROLLER_KEY + "." + FONT_SIZE_KEY, fontSizeSpinner.getValue());
 
206
        settings.put(CONTROLLER_KEY + "." + SIGNIFICANT_DIGITS_KEY, digitsSpinner.getValue());
 
207
        settings.put(CONTROLLER_KEY + "." + LINE_WIDTH_KEY, lineWeightSpinner.getValue());
 
208
    }
 
209
 
 
210
    private final JCheckBox titleCheckBox;
 
211
    private final OptionsPanel optionsPanel;
 
212
 
 
213
    private final JCheckBox autoScaleCheck;
 
214
    private final RealNumberField scaleRangeText;
 
215
    private final JSpinner fontSizeSpinner;
 
216
    private final JSpinner digitsSpinner;
 
217
    private final JSpinner lineWeightSpinner;
 
218
 
 
219
    public String getTitle() {
 
220
        return "Scale Bar";
 
221
    }
 
222
 
 
223
    private final ScaleBarPainter scaleBarPainter;
 
224
}