1
2 package org.freehep.graphicsio.exportchooser;
3
4 import java.awt.Dimension;
5 import java.awt.event.ActionEvent;
6 import java.awt.event.ActionListener;
7 import java.awt.event.ItemEvent;
8 import java.awt.event.ItemListener;
9 import java.text.ParseException;
10 import java.util.Properties;
11
12 import javax.swing.JComboBox;
13 import javax.swing.JFormattedTextField;
14 import javax.swing.JLabel;
15
16 import org.freehep.graphics2d.ScreenConstants;
17 import org.freehep.graphicsio.ImageConstants;
18 import org.freehep.swing.layout.TableLayout;
19 import org.freehep.util.UserProperties;
20
21
22
23
24
25
26 public class ImageSizePanel extends OptionPanel {
27
28 final private static String imageSizeList[] = { "ImageSize", "Custom",
29 ScreenConstants.VGA, ScreenConstants.SVGA, ScreenConstants.XGA,
30 ScreenConstants.SXGA, ScreenConstants.SXGA_PLUS,
31 ScreenConstants.UXGA };
32
33 private String key;
34
35 private Dimension initialDimension;
36
37 private JComboBox imageSizeCombo;
38
39 private JFormattedTextField imageWidth, imageHeight;
40
41 public ImageSizePanel(Properties user, String rootKey) {
42 super("Image Size");
43 key = rootKey + "." + ImageConstants.IMAGE_SIZE;
44
45 UserProperties options = new UserProperties(user);
46 initialDimension = options.getPropertyDimension(key);
47
48 imageSizeCombo = new JComboBox(imageSizeList);
49 add(TableLayout.LEFT, new JLabel("Preset Sizes"));
50 add(TableLayout.RIGHT, imageSizeCombo);
51
52 add(TableLayout.LEFT, new JLabel("Width"));
53 imageWidth = new JFormattedTextField(new TextFieldFormatter());
54 imageWidth.setColumns(10);
55 add(TableLayout.RIGHT, imageWidth);
56
57 add(TableLayout.LEFT, new JLabel("Height"));
58 imageHeight = new JFormattedTextField(new TextFieldFormatter());
59 imageHeight.setColumns(10);
60 add(TableLayout.RIGHT, imageHeight);
61
62 imageSizeCombo.addItemListener(new ComboListener());
63 imageWidth.addActionListener(new TextFieldListener());
64 imageHeight.addActionListener(new TextFieldListener());
65
66
67 imageWidth.setValue(new Integer(initialDimension.width));
68 imageHeight.setValue(new Integer(initialDimension.height));
69
70
71 new TextFieldListener().actionPerformed(null);
72 new ComboListener().itemStateChanged(null);
73 }
74
75 public boolean applyChangedOptions(Properties options) {
76 boolean changed = false;
77
78 Dimension size = new Dimension(((Number) imageWidth.getValue())
79 .intValue(), ((Number) imageHeight.getValue()).intValue());
80
81 if (!size.equals(initialDimension)) {
82 options.setProperty(key, size.width + ", " + size.height);
83 changed = true;
84 }
85
86 return changed;
87 }
88
89 private class ComboListener implements ItemListener {
90 public void itemStateChanged(ItemEvent e) {
91 int index = imageSizeCombo.getSelectedIndex();
92 switch (index) {
93 case 0:
94 imageWidth.setEnabled(false);
95 imageHeight.setEnabled(false);
96 imageWidth.setValue(new Integer(0));
97 imageHeight.setValue(new Integer(0));
98 break;
99 case 1:
100 imageWidth.setEnabled(true);
101 imageHeight.setEnabled(true);
102 break;
103 default:
104 imageWidth.setEnabled(true);
105 imageHeight.setEnabled(true);
106 Dimension d = ScreenConstants.getSize(imageSizeList[index]);
107 imageWidth.setValue(new Integer(d.width));
108 imageHeight.setValue(new Integer(d.height));
109 break;
110 }
111 }
112 }
113
114 private class TextFieldListener implements ActionListener {
115
116 public void actionPerformed(ActionEvent event) {
117 int width = ((Number) imageWidth.getValue()).intValue();
118 int height = ((Number) imageHeight.getValue()).intValue();
119
120 if ((width == 0) && (height == 0)) {
121 imageSizeCombo.setSelectedIndex(0);
122 return;
123 }
124
125 for (int i = 2; i < imageSizeList.length; i++) {
126 Dimension d = ScreenConstants.getSize(imageSizeList[i]);
127 if ((width == d.width) && (height == d.height)) {
128 imageSizeCombo.setSelectedIndex(i);
129 return;
130 }
131 }
132
133 imageSizeCombo.setSelectedIndex(1);
134 }
135 }
136
137 private class TextFieldFormatter extends
138 JFormattedTextField.AbstractFormatter {
139 JFormattedTextField field;
140
141 public void install(JFormattedTextField field) {
142 super.install(field);
143 this.field = field;
144 }
145
146 public void uninstall() {
147 field = null;
148 }
149
150
151 public Object stringToValue(String text) throws ParseException {
152 try {
153 Integer value = new Integer(text);
154 if (value.intValue() < 0)
155 throw new NumberFormatException();
156 return value;
157 } catch (NumberFormatException nfe) {
158 Object value = field.getValue();
159 field.setValue(value);
160 return value;
161 }
162 }
163
164 public String valueToString(Object value) throws ParseException {
165 if (value == null)
166 return "0";
167
168 return value.toString();
169 }
170 }
171 }