View Javadoc

1   // Copyright 2003, FreeHEP.
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   * @author Mark Donszelmann
24   * @version $Id: ImageSizePanel.java 8584 2006-08-10 23:06:37Z duns $
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          // now set the initial values
67          imageWidth.setValue(new Integer(initialDimension.width));
68          imageHeight.setValue(new Integer(initialDimension.height));
69  
70          // trigger the changes
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: // ImageSize
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: // Custom
100                 imageWidth.setEnabled(true);
101                 imageHeight.setEnabled(true);
102                 break;
103             default: // any other preset value
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); // ImageSize
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); // Custom
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         // only positive (and zero) integer values
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 }