/******************************************************************************* * Copyright 2010 Simon Mieth * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. ******************************************************************************/ package org.kabeja.svg.ui; import java.awt.BorderLayout; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.Insets; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import javax.swing.AbstractAction; import javax.swing.BorderFactory; import javax.swing.ButtonGroup; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JCheckBox; import javax.swing.JComboBox; import javax.swing.JDialog; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JRadioButton; import javax.swing.JTextField; import javax.swing.SwingUtilities; import org.kabeja.batik.tools.AbstractSAXSerializer; import org.kabeja.svg.SVGGenerator; import org.kabeja.tools.Component; import org.kabeja.ui.ApplicationToolBar; import org.kabeja.ui.ServiceManager; import org.kabeja.ui.Serviceable; import org.kabeja.ui.impl.AbstractPropertiesEditor; import de.miethxml.toolkit.gui.JGoodiesSeparator; import de.miethxml.toolkit.ui.UIUtils; public class OutputSettingsUI extends AbstractPropertiesEditor implements Serviceable, Component { private String[] papers = new String[] { "NoPapper", "A0", "A1", "A2", "A3", "A4", "A5", "A6", "Letter" }; private String[] units = new String[] { "inch", "mm", "px" }; private String[] layout = new String[] { SVGGenerator.PROPERTY_DOCUMENT_BOUNDS_RULE_MODELSPACE_VALUE, SVGGenerator.PROPERTY_DOCUMENT_BOUNDS_RULE_MODELSPACE_LIMITS_VALUE, SVGGenerator.PROPERTY_DOCUMENT_BOUNDS_RULE_PAPERSPACE_VALUE, SVGGenerator.PROPERTY_DOCUMENT_BOUNDS_RULE_PAPERSPACE_LIMITS_VALUE }; // the ui stuff private JDialog dialog; protected JCheckBox customPaper; protected JTextField widthField; protected JTextField heightField; protected JComboBox unitSelection; protected JComboBox paperSelection; protected JComboBox layoutSelection; protected JRadioButton landscapeSelection; protected boolean initialized = false; public void setServiceManager(ServiceManager manager) { Object[] objects = manager.getServiceComponents(ApplicationToolBar.SERVICE); for (int i = 0; i < objects.length; i++) { ((ApplicationToolBar) objects[i]).addAction(new AbstractAction( "Output Settings", new ImageIcon(UIUtils.resourceToBytes(this.getClass(), "/icons/paper_settings.gif"))) { public void actionPerformed(ActionEvent e) { showDialog(); } }); } } protected void init() { if (!this.initialized) { JPanel panel = new JPanel(new GridBagLayout()); panel.setBorder(BorderFactory.createEmptyBorder(10, 15, 10, 15)); panel.add(new JGoodiesSeparator("Paper Size"), createConstraints(0, 0, 3, 1, GridBagConstraints.HORIZONTAL, GridBagConstraints.CENTER, new Insets(0, 0, 8, 5))); panel.add(new JLabel("Paper"), createConstraints(0, 1, 1, 1, GridBagConstraints.NONE, GridBagConstraints.EAST)); paperSelection = new JComboBox(papers); panel.add(paperSelection, createConstraints(1, 1, 2, 1, GridBagConstraints.HORIZONTAL, GridBagConstraints.WEST)); panel.add(new JLabel("Custom Paper"), createConstraints(0, 2, 1, 1, GridBagConstraints.NONE, GridBagConstraints.EAST, new Insets(8, 0, 1, 0))); customPaper = new JCheckBox(); customPaper.addItemListener(new ItemListener() { public void itemStateChanged(ItemEvent e) { enableCustomPaper(e.getStateChange() == ItemEvent.SELECTED); } }); panel.add(customPaper, createConstraints(1, 2, 1, 1, GridBagConstraints.NONE, GridBagConstraints.WEST, new Insets(8, 0, 1, 0))); panel.add(new JLabel("Unit"), createConstraints(0, 3, 1, 1, GridBagConstraints.NONE, GridBagConstraints.EAST)); unitSelection = new JComboBox(units); panel.add(unitSelection, createConstraints(1, 3, 2, 1, GridBagConstraints.HORIZONTAL, GridBagConstraints.WEST)); panel.add(new JLabel("Width"), createConstraints(0, 4, 1, 1, GridBagConstraints.NONE, GridBagConstraints.EAST)); widthField = new JTextField(20); panel.add(widthField, createConstraints(1, 4, 2, 1, GridBagConstraints.BOTH, GridBagConstraints.WEST)); panel.add(new JLabel("Height"), createConstraints(0, 5, 1, 1, GridBagConstraints.NONE, GridBagConstraints.EAST)); heightField = new JTextField(20); panel.add(heightField, createConstraints(1, 5, 2, 1, GridBagConstraints.HORIZONTAL, GridBagConstraints.WEST)); panel.add(new JGoodiesSeparator("Orientation"), createConstraints(0, 6, 3, 1, GridBagConstraints.HORIZONTAL, GridBagConstraints.CENTER, new Insets(25, 0, 1, 5))); ButtonGroup group = new ButtonGroup(); landscapeSelection = new JRadioButton("Landscape"); group.add(landscapeSelection); panel.add(landscapeSelection, createConstraints(1, 7, 2, 1, GridBagConstraints.HORIZONTAL, GridBagConstraints.WEST)); JRadioButton b = new JRadioButton("Portrait"); b.setSelected(true); group.add(b); panel.add(b, createConstraints(1, 8, 2, 1, GridBagConstraints.HORIZONTAL, GridBagConstraints.WEST)); panel.add(new JGoodiesSeparator("Layout"), createConstraints(0, 9, 3, 1, GridBagConstraints.HORIZONTAL, GridBagConstraints.CENTER, new Insets(25, 0, 1, 5))); layoutSelection = new JComboBox(layout); panel.add(layoutSelection, createConstraints(1, 10, 2, 1, GridBagConstraints.HORIZONTAL, GridBagConstraints.WEST)); JButton button = new JButton("OK"); button.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { SwingUtilities.invokeLater(new Runnable() { public void run() { dialog.setVisible(false); updateProperties(); } }); } }); panel.add(button, createConstraints(2, 11, 1, 1, GridBagConstraints.NONE, GridBagConstraints.EAST, new Insets(12, 0, 1, 0))); enableCustomPaper(false); this.dialog = new JDialog(); this.dialog.setTitle("Paper Selection"); this.dialog.getContentPane().add(panel, BorderLayout.NORTH); this.dialog.pack(); this.initialized = true; } } public void showDialog() { this.init(); this.dialog.setVisible(true); } protected GridBagConstraints createConstraints(int x, int y, int width, int height, int fill, int anchor) { return createConstraints(x, y, width, height, fill, anchor, new Insets(1, 0, 1, 0)); } protected GridBagConstraints createConstraints(int x, int y, int width, int height, int fill, int anchor, Insets insets) { GridBagConstraints gbc = new GridBagConstraints(); gbc.gridx = x; gbc.gridy = y; gbc.gridwidth = width; gbc.gridheight = height; gbc.fill = fill; gbc.anchor = anchor; gbc.ipadx = 9; gbc.ipady = 6; if (fill != GridBagConstraints.NONE) { gbc.weightx = 100; } gbc.weighty = 0; gbc.insets = insets; return gbc; } protected void updateProperties() { if (this.customPaper.isSelected()) { // custom paper this.properties.put(AbstractSAXSerializer.PROPERTY_PAPER, "NoPaper"); this.properties.put(AbstractSAXSerializer.PROPERTY_WIDTH, this.widthField.getText() + unitSelection.getSelectedItem()); this.properties.put(AbstractSAXSerializer.PROPERTY_HEIGHT, this.heightField.getText() + unitSelection.getSelectedItem()); } else { this.properties.put(AbstractSAXSerializer.PROPERTY_PAPER, this.paperSelection.getSelectedItem()); } // the orientation if (this.landscapeSelection.isSelected()) { this.properties.put(AbstractSAXSerializer.PROPERTY_ORIENTATION, "landscape"); } else { this.properties.put(AbstractSAXSerializer.PROPERTY_ORIENTATION, "portait"); } this.properties.put(SVGGenerator.PROPERTY_DOCUMENT_BOUNDS_RULE, this.layoutSelection.getSelectedItem().toString()); firePropertiesChangedEvent(); } protected void enableCustomPaper(boolean b) { this.paperSelection.setEnabled(!b); this.unitSelection.setEnabled(b); this.widthField.setEnabled(b); this.heightField.setEnabled(b); } }