// Copyright 2003, FreeHEP. package org.freehep.graphicsio.exportchooser; import java.awt.Dimension; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import java.text.ParseException; import java.util.Properties; import javax.swing.JComboBox; import javax.swing.JFormattedTextField; import javax.swing.JLabel; import org.freehep.graphics2d.ScreenConstants; import org.freehep.graphicsio.ImageConstants; import org.freehep.swing.layout.TableLayout; import org.freehep.util.UserProperties; /** * * @author Mark Donszelmann * @version $Id: ImageSizePanel.java 8584 2006-08-10 23:06:37Z duns $ */ public class ImageSizePanel extends OptionPanel { final private static String imageSizeList[] = { "ImageSize", "Custom", ScreenConstants.VGA, ScreenConstants.SVGA, ScreenConstants.XGA, ScreenConstants.SXGA, ScreenConstants.SXGA_PLUS, ScreenConstants.UXGA }; private String key; private Dimension initialDimension; private JComboBox imageSizeCombo; private JFormattedTextField imageWidth, imageHeight; public ImageSizePanel(Properties user, String rootKey) { super("Image Size"); key = rootKey + "." + ImageConstants.IMAGE_SIZE; UserProperties options = new UserProperties(user); initialDimension = options.getPropertyDimension(key); imageSizeCombo = new JComboBox(imageSizeList); add(TableLayout.LEFT, new JLabel("Preset Sizes")); add(TableLayout.RIGHT, imageSizeCombo); add(TableLayout.LEFT, new JLabel("Width")); imageWidth = new JFormattedTextField(new TextFieldFormatter()); imageWidth.setColumns(10); add(TableLayout.RIGHT, imageWidth); add(TableLayout.LEFT, new JLabel("Height")); imageHeight = new JFormattedTextField(new TextFieldFormatter()); imageHeight.setColumns(10); add(TableLayout.RIGHT, imageHeight); imageSizeCombo.addItemListener(new ComboListener()); imageWidth.addActionListener(new TextFieldListener()); imageHeight.addActionListener(new TextFieldListener()); // now set the initial values imageWidth.setValue(new Integer(initialDimension.width)); imageHeight.setValue(new Integer(initialDimension.height)); // trigger the changes new TextFieldListener().actionPerformed(null); new ComboListener().itemStateChanged(null); } public boolean applyChangedOptions(Properties options) { boolean changed = false; Dimension size = new Dimension(((Number) imageWidth.getValue()) .intValue(), ((Number) imageHeight.getValue()).intValue()); if (!size.equals(initialDimension)) { options.setProperty(key, size.width + ", " + size.height); changed = true; } return changed; } private class ComboListener implements ItemListener { public void itemStateChanged(ItemEvent e) { int index = imageSizeCombo.getSelectedIndex(); switch (index) { case 0: // ImageSize imageWidth.setEnabled(false); imageHeight.setEnabled(false); imageWidth.setValue(new Integer(0)); imageHeight.setValue(new Integer(0)); break; case 1: // Custom imageWidth.setEnabled(true); imageHeight.setEnabled(true); break; default: // any other preset value imageWidth.setEnabled(true); imageHeight.setEnabled(true); Dimension d = ScreenConstants.getSize(imageSizeList[index]); imageWidth.setValue(new Integer(d.width)); imageHeight.setValue(new Integer(d.height)); break; } } } private class TextFieldListener implements ActionListener { public void actionPerformed(ActionEvent event) { int width = ((Number) imageWidth.getValue()).intValue(); int height = ((Number) imageHeight.getValue()).intValue(); if ((width == 0) && (height == 0)) { imageSizeCombo.setSelectedIndex(0); // ImageSize return; } for (int i = 2; i < imageSizeList.length; i++) { Dimension d = ScreenConstants.getSize(imageSizeList[i]); if ((width == d.width) && (height == d.height)) { imageSizeCombo.setSelectedIndex(i); return; } } imageSizeCombo.setSelectedIndex(1); // Custom } } private class TextFieldFormatter extends JFormattedTextField.AbstractFormatter { JFormattedTextField field; public void install(JFormattedTextField field) { super.install(field); this.field = field; } public void uninstall() { field = null; } // only positive (and zero) integer values public Object stringToValue(String text) throws ParseException { try { Integer value = new Integer(text); if (value.intValue() < 0) throw new NumberFormatException(); return value; } catch (NumberFormatException nfe) { Object value = field.getValue(); field.setValue(value); return value; } } public String valueToString(Object value) throws ParseException { if (value == null) return "0"; return value.toString(); } } }