Java tutorial
//$HeadURL$ /*---------------- FILE HEADER ------------------------------------------ This file is part of deegree. Copyright (C) 2001-2007 by: Department of Geography, University of Bonn http://www.giub.uni-bonn.de/deegree/ lat/lon GmbH http://www.lat-lon.de This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Contact: Andreas Poth lat/lon GmbH Aennchenstr. 19 53177 Bonn Germany E-Mail: poth@lat-lon.de Prof. Dr. Klaus Greve Department of Geography University of Bonn Meckenheimer Allee 166 53115 Bonn Germany E-Mail: greve@giub.uni-bonn.de ---------------------------------------------------------------------------*/ package org.deegree.igeo.views.swing.print; import java.awt.BorderLayout; import java.awt.Container; import java.awt.FlowLayout; 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.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.event.MouseMotionAdapter; import java.awt.event.MouseMotionListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.awt.event.WindowFocusListener; import java.io.File; import java.io.FileOutputStream; import java.net.URI; import java.net.URL; import java.util.ArrayList; import java.util.List; import java.util.Properties; import java.util.prefs.Preferences; import javax.swing.BorderFactory; import javax.swing.DefaultComboBoxModel; import javax.swing.JButton; import javax.swing.JComboBox; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JRadioButton; import javax.swing.JSpinner; import javax.swing.JTextField; import javax.swing.SpinnerNumberModel; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import javax.xml.transform.OutputKeys; import org.deegree.datatypes.QualifiedName; import org.deegree.framework.log.ILogger; import org.deegree.framework.log.LoggerFactory; import org.deegree.framework.util.MapUtils; import org.deegree.framework.util.StringTools; import org.deegree.framework.xml.NamespaceContext; import org.deegree.framework.xml.XMLFragment; import org.deegree.framework.xml.XMLTools; import org.deegree.graphics.transformation.GeoTransform; import org.deegree.igeo.ApplicationContainer; import org.deegree.igeo.ValueChangedEvent; import org.deegree.igeo.commands.VectorPrintCommand; import org.deegree.igeo.commands.VectorPrintCommand.PrintDescriptionBean; import org.deegree.igeo.commands.model.AddMemoryLayerCommand; import org.deegree.igeo.dataadapter.MemoryFeatureAdapter; import org.deegree.igeo.i18n.Messages; import org.deegree.igeo.io.FileSystemAccess; import org.deegree.igeo.io.FileSystemAccessFactory; import org.deegree.igeo.mapmodel.Layer; import org.deegree.igeo.mapmodel.MapModel; import org.deegree.igeo.modules.DefaultMapModule; import org.deegree.igeo.modules.IModule; import org.deegree.igeo.state.mapstate.MapTool; import org.deegree.igeo.views.DialogFactory; import org.deegree.igeo.views.HelpManager; import org.deegree.igeo.views.swing.ButtonGroup; import org.deegree.igeo.views.swing.HelpFrame; import org.deegree.igeo.views.swing.map.LayerComponent; import org.deegree.igeo.views.swing.util.GenericFileChooser; import org.deegree.igeo.views.swing.util.GenericFileChooser.FILECHOOSERTYPE; import org.deegree.igeo.views.swing.util.IGeoFileFilter; import org.deegree.igeo.views.swing.util.IconRegistry; import org.deegree.model.feature.Feature; import org.deegree.model.feature.FeatureCollection; import org.deegree.model.feature.FeatureProperty; import org.deegree.model.spatialschema.Envelope; import org.deegree.model.spatialschema.Geometry; import org.deegree.model.spatialschema.GeometryFactory; import org.deegree.model.spatialschema.Point; import org.deegree.ogcbase.CommonNamespaces; import org.w3c.dom.Document; import org.w3c.dom.Element; import com.lowagie.text.PageSize; import com.lowagie.text.Rectangle; /** * * Dialog for printing a map as vector pdf document via iText * * @author <a href="mailto:name@deegree.org">Andreas Poth</a> * @author last edited by: $Author$ * * @version $Revision$, $Date$ */ public class VectorPrintDialog extends javax.swing.JDialog implements org.deegree.igeo.ChangeListener { private static final long serialVersionUID = -3920635540202430586L; private static final ILogger LOG = LoggerFactory.getLogger(VectorPrintDialog.class); private JButton btPrint; private JTextField tfOutputFile; private JButton btOutputFile; private JPanel pnOutput; private JComboBox cbDPI; private JPanel pnDPI; private JComboBox cbScale; private JRadioButton rbVariable; private JRadioButton rbConst; private JLabel lbPageSize; private JComboBox cbPageFormat; private JLabel lbPageWidth; private JSpinner tfPageWidth; private JLabel lbPageUnitW; private JLabel lbPageHeight; private JSpinner tfPageHeight; private JLabel lbPageUnitH; private JPanel pnFormat; private JSpinner spMapBottom; private JSpinner spMapLeft; private JLabel lbMapBottom; private JLabel lbMapLeft; private JLabel lbHeight; private JLabel lbWidth; private JLabel lbTop; private JLabel lbLeft; private JSpinner spHeight; private JSpinner spWidth; private JSpinner spTop; private JSpinner spLeft; private JLabel lb4; private JLabel lb3; private JLabel lb2; private JLabel lb1; private JPanel pnScale; private JPanel pnMapCoord; private JPanel pnLayoutPosition; private JButton btSave; private JButton btLoad; private JPanel pnFile; private PreviewPanel pnPreview; private JPanel pnPrint; private JButton btHelp; private JPanel pnHelp; private JButton btCancel; private JPanel pnButtons; private ButtonGroup bg = new ButtonGroup(); private ApplicationContainer<?> appContainer; private MapModel mapModel; private Layer previewLayer; private PrintSizeListener printSizeListener = new PrintSizeListener(); private MouseListener ml = new PrintMouseListener(); private MouseMotionListener mml = new PrintMouseMotionListener(); private Point pressPoint; private boolean isActive = false; /** * * @param frame */ public VectorPrintDialog(JFrame frame, ApplicationContainer<?> appContainer) { super(frame); this.appContainer = appContainer; this.mapModel = appContainer.getMapModel(null); MapTool<Container> mt = getAssignedMapModule().getMapTool(); mt.resetState(); addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { disposeListenerAndLayer(); } @Override public void windowClosed(WindowEvent e) { disposeListenerAndLayer(); } }); initGUI(); addPreviewLayer(); toFront(); setAlwaysOnTop(true); } private void disposeListenerAndLayer() { DefaultMapModule<Container> mapModule = getAssignedMapModule(); MapTool<Container> mt = mapModule.getMapTool(); removePreviewLayer(); Container jco = mapModule.getMapContainer(); jco.removeMouseListener(ml); jco.removeMouseMotionListener(mml); mt.removeChangeListener(VectorPrintDialog.this); } private void initGUI() { try { { GridBagLayout thisLayout = new GridBagLayout(); thisLayout.rowWeights = new double[] { 0.0, 0.0 }; thisLayout.rowHeights = new int[] { 531, 16 }; thisLayout.columnWeights = new double[] { 0.1, 0.1 }; thisLayout.columnWidths = new int[] { 7, 20 }; getContentPane().setLayout(thisLayout); { pnButtons = new JPanel(); FlowLayout pnButtonsLayout = new FlowLayout(); pnButtonsLayout.setAlignment(FlowLayout.LEFT); pnButtons.setLayout(pnButtonsLayout); getContentPane().add(pnButtons, new GridBagConstraints(0, 1, 1, 1, 0.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(0, 0, 0, 0), 0, 0)); { btPrint = new JButton(Messages.getMessage(getLocale(), "$MD11785"), IconRegistry.getIcon("accept.png")); pnButtons.add(btPrint); btPrint.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { if (tfOutputFile.getText().trim().length() < 3) { DialogFactory.openWarningDialog(appContainer.getViewPlatform(), VectorPrintDialog.this, Messages.get("$MD11817"), Messages.get("$MD11818")); } else { doPrint(); } } }); } { btCancel = new JButton(Messages.getMessage(getLocale(), "$MD11786"), IconRegistry.getIcon("cancel.png")); btCancel.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { VectorPrintDialog.this.dispose(); } }); pnButtons.add(btCancel); } } { pnHelp = new JPanel(); FlowLayout pnHelpLayout = new FlowLayout(); pnHelpLayout.setAlignment(FlowLayout.RIGHT); pnHelp.setLayout(pnHelpLayout); getContentPane().add(pnHelp, new GridBagConstraints(1, 1, 1, 1, 0.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(0, 0, 0, 0), 0, 0)); { btHelp = new JButton(Messages.getMessage(getLocale(), "$MD11787"), IconRegistry.getIcon("help.png")); pnHelp.add(btHelp); btHelp.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { HelpFrame hf = HelpFrame.getInstance(new HelpManager(appContainer)); hf.setVisible(true); hf.gotoModule("Print"); } }); } } { pnPrint = new JPanel(); GridBagLayout pnPrintLayout = new GridBagLayout(); getContentPane().add(pnPrint, new GridBagConstraints(0, 0, 2, 1, 0.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(0, 0, 0, 0), 0, 0)); pnPrint.setBorder( BorderFactory.createTitledBorder(Messages.getMessage(getLocale(), "$MD11788"))); pnPrintLayout.rowWeights = new double[] { 0.0, 0.0, 0.0, 0.0, 0.0, 0.1 }; pnPrintLayout.rowHeights = new int[] { 78, 111, 126, 65, 60, 7 }; pnPrintLayout.columnWeights = new double[] { 0.0, 0.0, 0.0, 0.1 }; pnPrintLayout.columnWidths = new int[] { 117, 158, 151, 7 }; pnPrint.setLayout(pnPrintLayout); { pnPreview = new PreviewPanel(); pnPreview.setLayout(new BorderLayout()); pnPrint.add(pnPreview, new GridBagConstraints(0, 0, 2, 3, 0.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(0, 0, 0, 0), 0, 0)); pnPreview.setBorder( BorderFactory.createTitledBorder(Messages.getMessage(getLocale(), "$MD11789"))); { lbPageSize = new JLabel(); pnPreview.add(lbPageSize, BorderLayout.SOUTH); lbPageSize.setText(Messages.getMessage(getLocale(), "$MD11790")); } } { pnFile = new JPanel(); FlowLayout pnFileLayout = new FlowLayout(); pnFileLayout.setAlignment(FlowLayout.LEFT); pnFile.setLayout(pnFileLayout); pnPrint.add(pnFile, new GridBagConstraints(0, 5, 2, 1, 0.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(0, 0, 0, 0), 0, 0)); pnFile.setBorder( BorderFactory.createTitledBorder(Messages.getMessage(getLocale(), "$MD11791"))); { btLoad = new JButton(Messages.getMessage(getLocale(), "$MD11792"), IconRegistry.getIcon("open.gif")); pnFile.add(btLoad); btLoad.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { doLoadSettings(); } }); } { btSave = new JButton(Messages.getMessage(getLocale(), "$MD11793"), IconRegistry.getIcon("save.gif")); pnFile.add(btSave); btSave.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { doSaveSettings(); } }); } } { pnLayoutPosition = new JPanel(); GridBagLayout pnLayoutPositionLayout = new GridBagLayout(); pnLayoutPositionLayout.rowWeights = new double[] { 0.0, 0.1, 0.1, 0.1 }; pnLayoutPositionLayout.rowHeights = new int[] { 39, 7, 7, 7 }; pnLayoutPositionLayout.columnWeights = new double[] { 0.0, 0.0, 0.1 }; pnLayoutPositionLayout.columnWidths = new int[] { 69, 95, 7 }; pnLayoutPosition.setLayout(pnLayoutPositionLayout); pnPrint.add(pnLayoutPosition, new GridBagConstraints(2, 0, 2, 2, 0.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(0, 0, 0, 0), 0, 0)); pnLayoutPosition.setBorder( BorderFactory.createTitledBorder(Messages.getMessage(getLocale(), "$MD11848"))); { lb1 = new JLabel(Messages.getMessage(getLocale(), "$MD11794")); pnLayoutPosition.add(lb1, new GridBagConstraints(2, 0, 1, 1, 0.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL, new Insets(0, 9, 0, 0), 0, 0)); } { lb2 = new JLabel(Messages.getMessage(getLocale(), "$MD11794")); pnLayoutPosition.add(lb2, new GridBagConstraints(2, 1, 1, 1, 0.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL, new Insets(0, 9, 0, 0), 0, 0)); } { lb3 = new JLabel(Messages.getMessage(getLocale(), "$MD11794")); pnLayoutPosition.add(lb3, new GridBagConstraints(2, 2, 1, 1, 0.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL, new Insets(0, 9, 0, 0), 0, 0)); } { lb4 = new JLabel(Messages.getMessage(getLocale(), "$MD11794")); pnLayoutPosition.add(lb4, new GridBagConstraints(2, 3, 1, 1, 0.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL, new Insets(0, 9, 0, 0), 0, 0)); } { spLeft = new JSpinner(new SpinnerNumberModel(20, 0, 100000, 1)); pnLayoutPosition.add(spLeft, new GridBagConstraints(1, 0, 1, 1, 0.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL, new Insets(0, 0, 0, 0), 0, 0)); spLeft.addChangeListener(printSizeListener); } { spTop = new JSpinner(new SpinnerNumberModel(20, 0, 100000, 1)); pnLayoutPosition.add(spTop, new GridBagConstraints(1, 1, 1, 1, 0.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL, new Insets(0, 0, 0, 0), 0, 0)); spTop.addChangeListener(printSizeListener); } { spWidth = new JSpinner(new SpinnerNumberModel(150, 10, 100000, 1)); pnLayoutPosition.add(spWidth, new GridBagConstraints(1, 2, 1, 1, 0.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL, new Insets(0, 0, 0, 0), 0, 0)); spWidth.addChangeListener(printSizeListener); } { spHeight = new JSpinner(new SpinnerNumberModel(200, 10, 100000, 1)); pnLayoutPosition.add(spHeight, new GridBagConstraints(1, 3, 1, 1, 0.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL, new Insets(0, 0, 0, 0), 0, 0)); spHeight.addChangeListener(printSizeListener); } { lbLeft = new JLabel(Messages.getMessage(getLocale(), "$MD11795")); pnLayoutPosition.add(lbLeft, new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL, new Insets(0, 9, 0, 0), 0, 0)); } { lbTop = new JLabel(Messages.getMessage(getLocale(), "$MD11796")); pnLayoutPosition.add(lbTop, new GridBagConstraints(0, 1, 1, 1, 0.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL, new Insets(0, 9, 0, 0), 0, 0)); } { lbWidth = new JLabel(Messages.getMessage(getLocale(), "$MD11797")); pnLayoutPosition.add(lbWidth, new GridBagConstraints(0, 2, 1, 1, 0.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL, new Insets(0, 9, 0, 0), 0, 0)); } { lbHeight = new JLabel(Messages.getMessage(getLocale(), "$MD11798")); pnLayoutPosition.add(lbHeight, new GridBagConstraints(0, 3, 1, 1, 0.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL, new Insets(0, 9, 0, 0), 0, 0)); } } { pnMapCoord = new JPanel(); GridBagLayout pnMapCoordLayout = new GridBagLayout(); pnPrint.add(pnMapCoord, new GridBagConstraints(2, 2, 2, 1, 0.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(0, 0, 0, 0), 0, 0)); pnMapCoord.setBorder( BorderFactory.createTitledBorder(Messages.getMessage(getLocale(), "$MD11799"))); pnMapCoordLayout.rowWeights = new double[] { 0.1, 0.1 }; pnMapCoordLayout.rowHeights = new int[] { 7, 7 }; pnMapCoordLayout.columnWeights = new double[] { 0.0, 0.1, 0.1 }; pnMapCoordLayout.columnWidths = new int[] { 68, 7, 7 }; pnMapCoord.setLayout(pnMapCoordLayout); { lbMapLeft = new JLabel(Messages.getMessage(getLocale(), "$MD11800")); pnMapCoord.add(lbMapLeft, new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL, new Insets(0, 9, 0, 0), 0, 0)); } { lbMapBottom = new JLabel(Messages.getMessage(getLocale(), "$MD11801")); pnMapCoord.add(lbMapBottom, new GridBagConstraints(0, 1, 1, 1, 0.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL, new Insets(0, 9, 0, 0), 0, 0)); } { spMapLeft = new JSpinner(new SpinnerNumberModel(0, -9E9, 9E9, 0.5)); spMapLeft.setValue(mapModel.getEnvelope().getMin().getX()); pnMapCoord.add(spMapLeft, new GridBagConstraints(1, 0, 2, 1, 0.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL, new Insets(0, 0, 0, 9), 0, 0)); spMapLeft.addChangeListener(printSizeListener); } { spMapBottom = new JSpinner(new SpinnerNumberModel(0, -9E9, 9E9, 0.5)); spMapBottom.setValue(mapModel.getEnvelope().getMin().getY()); pnMapCoord.add(spMapBottom, new GridBagConstraints(1, 1, 2, 1, 0.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL, new Insets(0, 0, 0, 9), 0, 0)); spMapBottom.addChangeListener(printSizeListener); } } { pnScale = new JPanel(); GridBagLayout pnScaleLayout = new GridBagLayout(); pnPrint.add(pnScale, new GridBagConstraints(2, 3, 2, 2, 0.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(0, 0, 0, 0), 0, 0)); pnScale.setBorder( BorderFactory.createTitledBorder(Messages.getMessage(getLocale(), "$MD11802"))); pnScaleLayout.rowWeights = new double[] { 0.1, 0.1 }; pnScaleLayout.rowHeights = new int[] { 7, 7 }; pnScaleLayout.columnWeights = new double[] { 0.1, 0.1 }; pnScaleLayout.columnWidths = new int[] { 7, 7 }; pnScale.setLayout(pnScaleLayout); { rbConst = new JRadioButton(Messages.getMessage(getLocale(), "$MD11803")); pnScale.add(rbConst, new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL, new Insets(0, 9, 0, 0), 0, 0)); rbConst.setSelected(true); bg.add(rbConst); } { rbVariable = new JRadioButton(Messages.getMessage(getLocale(), "$MD11804")); pnScale.add(rbVariable, new GridBagConstraints(1, 0, 1, 1, 0.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL, new Insets(0, 9, 0, 0), 0, 0)); bg.add(rbVariable); } { int[] sc = StringTools.toArrayInt(Messages.getMessage(getLocale(), "$MD11805"), ",; "); ListEntry[] le = new ListEntry[sc.length]; for (int i = 0; i < sc.length; i++) { le[i] = new ListEntry("1:" + sc[i], sc[i]); } cbScale = new JComboBox(new DefaultComboBoxModel(le)); cbScale.setSelectedIndex(6); pnScale.add(cbScale, new GridBagConstraints(0, 1, 2, 1, 0.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL, new Insets(0, 9, 0, 9), 0, 0)); cbScale.setEditable(true); cbScale.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { Object o = cbScale.getSelectedItem(); if (o instanceof String) { try { // handle use defined scales ListEntry le = null; if (((String) o).indexOf(":") > 0) { String[] t = StringTools.toArray((String) o, ":", false); le = new ListEntry((String) o, Integer.parseInt(t[1].trim())); } else { le = new ListEntry("1:" + o, Integer.parseInt((String) o)); } ((DefaultComboBoxModel) cbScale.getModel()).addElement(le); cbScale.setSelectedItem(le); } catch (Exception ex) { DialogFactory.openWarningDialog(appContainer.getViewPlatform(), VectorPrintDialog.this, Messages.get("$MD11821"), Messages.get("$MD11822")); return; } } updatePreview(); } }); } } { pnFormat = new JPanel(); GridBagLayout pnFormatLayout = new GridBagLayout(); pnPrint.add(pnFormat, new GridBagConstraints(0, 3, 2, 1, 0.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(0, 0, 0, 0), 0, 0)); pnFormat.setBorder( BorderFactory.createTitledBorder(Messages.getMessage(getLocale(), "$MD11806"))); pnFormatLayout.rowWeights = new double[] { 0.1 }; pnFormatLayout.rowHeights = new int[] { 7 }; pnFormatLayout.columnWeights = new double[] { 0.1 }; pnFormatLayout.columnWidths = new int[] { 7 }; pnFormat.setLayout(pnFormatLayout); { String[] tmp = StringTools.toArray(Messages.getMessage(getLocale(), "$MD11807"), ",;", true); ListEntry[] le = new ListEntry[tmp.length / 2 + 1]; le[0] = new ListEntry(Messages.getMessage(getLocale(), "$MD11829"), null); for (int i = 0; i < tmp.length; i += 2) { le[i / 2 + 1] = new ListEntry(tmp[i], tmp[i + 1]); } cbPageFormat = new JComboBox(new DefaultComboBoxModel(le)); cbPageFormat.setSelectedIndex(2); pnFormat.add(cbPageFormat, new GridBagConstraints(0, 0, 3, 1, 0.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL, new Insets(0, 9, 0, 9), 0, 0)); // width lbPageWidth = new JLabel(Messages.getMessage(getLocale(), "$MD11831")); pnFormat.add(lbPageWidth, new GridBagConstraints(0, 1, 1, 1, 0.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL, new Insets(0, 15, 0, 0), 0, 0)); tfPageWidth = new JSpinner( new SpinnerNumberModel(inMM(PageSize.A4.getWidth()), 0, 6080, 1)); pnFormat.add(tfPageWidth, new GridBagConstraints(1, 1, 1, 1, 0.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL, new Insets(5, 0, 0, 0), 0, 0)); tfPageWidth.setEnabled(false); lbPageUnitW = new JLabel(Messages.getMessage(getLocale(), "$MD11832")); pnFormat.add(lbPageUnitW, new GridBagConstraints(2, 1, 1, 1, 0.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(0, 9, 0, 15), 0, 0)); // height lbPageHeight = new JLabel(Messages.getMessage(getLocale(), "$MD11830")); pnFormat.add(lbPageHeight, new GridBagConstraints(0, 2, 1, 1, 0.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL, new Insets(0, 15, 0, 0), 0, 0)); tfPageHeight = new JSpinner( new SpinnerNumberModel(inMM(PageSize.A4.getHeight()), 0, 6080, 1)); pnFormat.add(tfPageHeight, new GridBagConstraints(1, 2, 1, 1, 0.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL, new Insets(5, 0, 0, 0), 0, 0)); tfPageHeight.setEnabled(false); lbPageUnitH = new JLabel(Messages.getMessage(getLocale(), "$MD11832")); pnFormat.add(lbPageUnitH, new GridBagConstraints(2, 2, 1, 1, 0.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL, new Insets(0, 9, 0, 15), 0, 0)); cbPageFormat.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { int width; int height; ListEntry le = (ListEntry) ((JComboBox) e.getSource()).getSelectedItem(); if (le.value != null) { String value = (String) le.value; Rectangle rect = PageSize.getRectangle(value); width = (int) Math.round(rect.getWidth() / 72 * 25.4); height = (int) Math.round(rect.getHeight() / 72 * 25.4); tfPageWidth.setEnabled(false); tfPageHeight.setEnabled(false); } else { tfPageWidth.setEnabled(true); tfPageHeight.setEnabled(true); width = ((Number) tfPageWidth.getValue()).intValue(); height = ((Number) tfPageHeight.getValue()).intValue(); } // if page format has been changed max size of printed map must be changed // for new map size (millimeter) left and top border must be considered to // ensure that printed map does not overlap paper at the right and at the bottom width -= (((Number) spLeft.getValue()).intValue() * 2); height -= (((Number) spTop.getValue()).intValue() * 2); spWidth.setValue(width); spHeight.setValue(height); // preview of printed area must be updated updatePreview(); } }); } } { pnDPI = new JPanel(); GridBagLayout pnDPILayout = new GridBagLayout(); pnPrint.add(pnDPI, new GridBagConstraints(0, 4, 2, 1, 0.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(0, 0, 0, 0), 0, 0)); pnDPI.setBorder( BorderFactory.createTitledBorder(Messages.getMessage(getLocale(), "$MD11808"))); pnDPILayout.rowWeights = new double[] { 0.1 }; pnDPILayout.rowHeights = new int[] { 7 }; pnDPILayout.columnWeights = new double[] { 0.1 }; pnDPILayout.columnWidths = new int[] { 7 }; pnDPI.setLayout(pnDPILayout); { final DefaultComboBoxModel cbDPIModel = new DefaultComboBoxModel( new Integer[] { 72, 96, 150, 300, 600, 1200, 2400 }); cbDPI = new JComboBox(); pnDPI.add(cbDPI, new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL, new Insets(0, 9, 0, 9), 0, 0)); cbDPI.setModel(cbDPIModel); cbDPI.setEditable(true); cbDPI.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { Object o = cbDPI.getSelectedItem(); if (o instanceof String) { try { Integer i = Integer.parseInt(o.toString()); cbDPIModel.addElement(i); cbDPI.setSelectedItem(i); } catch (Exception ex) { DialogFactory.openWarningDialog(appContainer.getViewPlatform(), VectorPrintDialog.this, Messages.get("$MD11819"), Messages.get("$MD11820")); } } } }); } } { pnOutput = new JPanel(); GridBagLayout pnOutputLayout = new GridBagLayout(); pnOutputLayout.rowWeights = new double[] { 0.1 }; pnOutputLayout.rowHeights = new int[] { 7 }; pnOutputLayout.columnWeights = new double[] { 0.1, 0.0, 0.1 }; pnOutputLayout.columnWidths = new int[] { 7, 94, 7 }; pnOutput.setLayout(pnOutputLayout); pnPrint.add(pnOutput, new GridBagConstraints(2, 5, 2, 1, 0.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(0, 0, 0, 0), 0, 0)); pnOutput.setBorder( BorderFactory.createTitledBorder(Messages.getMessage(getLocale(), "$MD11809"))); { btOutputFile = new JButton(Messages.get("$MD11823")); btOutputFile.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { Preferences prefs = Preferences.userNodeForPackage(VectorPrintDialog.class); File file = GenericFileChooser.showSaveDialog(FILECHOOSERTYPE.externalResource, appContainer, VectorPrintDialog.this, prefs, "print definition", IGeoFileFilter.PDF); tfOutputFile.setText(file.getAbsolutePath()); } }); pnOutput.add(btOutputFile, new GridBagConstraints(2, 0, 1, 1, 0.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL, new Insets(0, 9, 0, 9), 0, 0)); } { tfOutputFile = new JTextField(); pnOutput.add(tfOutputFile, new GridBagConstraints(0, 0, 2, 1, 0.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL, new Insets(0, 9, 0, 0), 0, 0)); } } } } pnPreview.setAreaLeft(((Number) spLeft.getValue()).intValue()); pnPreview.setAreaTop(((Number) spTop.getValue()).intValue()); pnPreview.setAreaWidth(((Number) spWidth.getValue()).intValue()); pnPreview.setAreaHeight(((Number) spHeight.getValue()).intValue()); Rectangle rect; ListEntry le = (ListEntry) cbPageFormat.getSelectedItem(); if (le.value != null) { rect = PageSize.getRectangle((String) le.value); } else { rect = new Rectangle(inPt(((Number) tfPageWidth.getValue()).intValue()), inPt(((Number) tfPageHeight.getValue()).intValue())); } pnPreview.setPageSize(rect); this.setBounds(300, 200, 530, 609); } catch (Exception e) { e.printStackTrace(); } DefaultMapModule<Container> mapModule = getAssignedMapModule(); final Container jco = mapModule.getMapContainer(); jco.addMouseListener(ml); jco.addMouseMotionListener(mml); isActive = true; final MapTool<Container> mapTool = mapModule.getMapTool(); mapTool.addChangeListener(this); addWindowFocusListener(new WindowFocusListener() { @Override public void windowLostFocus(WindowEvent e) { } @Override public void windowGainedFocus(WindowEvent e) { mapTool.resetState(); // it is required to add the listeners again, cause it seems some other module removes all... jco.addMouseListener(ml); jco.addMouseMotionListener(mml); isActive = true; } }); } private int inPt(int inMM) { return (int) Math.round(((double) inMM / 25.4 * 72)); } private int inMM(float inPt) { return (int) Math.round(inPt / 72 * 25.4); } private void doPrint() { PrintDescriptionBean pdb = new PrintDescriptionBean(); pdb.setAreaHeight(((Number) spHeight.getValue()).intValue()); pdb.setAreaWidth(((Number) spWidth.getValue()).intValue()); pdb.setAreaLeft(((Number) spLeft.getValue()).intValue()); pdb.setAreaTop(((Number) spTop.getValue()).intValue()); pdb.setDpi((Integer) cbDPI.getSelectedItem()); pdb.setMapBottom(((Number) spMapBottom.getValue()).doubleValue()); pdb.setMapLeft(((Number) spMapLeft.getValue()).doubleValue()); ListEntry le = (ListEntry) cbPageFormat.getSelectedItem(); if (le.value != null) { pdb.setPageFormat((String) le.value); } else { pdb.setPageWidth(inPt(((Number) tfPageWidth.getValue()).intValue())); pdb.setPageHeight(inPt(((Number) tfPageHeight.getValue()).intValue())); } if (rbConst.isSelected()) { pdb.setScale((Integer) ((ListEntry) cbScale.getSelectedItem()).value); } else { pdb.setScale(-1); } pdb.setTargetFile(tfOutputFile.getText()); VectorPrintCommand cmd = new VectorPrintCommand(); cmd.setApplicationContainer(appContainer); cmd.setPrintDefinition(pdb); try { appContainer.getCommandProcessor().executeSychronously(cmd, false); } catch (Exception e) { DialogFactory.openErrorDialog(appContainer.getViewPlatform(), this, Messages.getMessage(getLocale(), "$MD11810"), Messages.getMessage(getLocale(), "$MD11811"), e); } DialogFactory.openInformationDialog(appContainer.getViewPlatform(), this, Messages.getMessage(getLocale(), "$MD11824"), "INFORMATION"); } /** * <pre> * <PrintDefinition xmlns="http://www.deegree.org/print"> * <AreaHeight>180</AreaHeight> * <AreaWidth>270</AreaWidth> * <AreaLeft>10</AreaLeft> * <AreaTop>10</AreaTop> * <DPI>300</DPI> * <MapLeft>2597678</MapLeft> * <MapBottom>5697438</MapBottom> * <PageFormat> * <Named label="Din A4">A4</Named> * <!-- or --> * <Extent> * <width unit="pt">300.0</width> * <height unit="pt">500.0</height> * <Extent> * </PageFormat> * <Scale>25000</Scale> * <TargetFile>e:/temp/test.pdf</TargetFile> * </PrintDefinition> * </pre> */ private void doSaveSettings() { Preferences prefs = Preferences.userNodeForPackage(VectorPrintDialog.class); File file = GenericFileChooser.showSaveDialog(FILECHOOSERTYPE.externalResource, appContainer, this, prefs, "print definition", IGeoFileFilter.XML); if (file == null) { // cancel has been pressed return; } XMLFragment xml = new XMLFragment( new QualifiedName("PrintDefinition", URI.create("http://www.deegree.org/print"))); Document doc = xml.getRootElement().getOwnerDocument(); Element root = xml.getRootElement(); try { // fill XML document Element el = doc.createElementNS("http://www.deegree.org/print", "AreaHeight"); XMLTools.setNodeValue(el, spHeight.getValue().toString()); root.appendChild(el); el = doc.createElementNS("http://www.deegree.org/print", "AreaWidth"); XMLTools.setNodeValue(el, spWidth.getValue().toString()); root.appendChild(el); el = doc.createElementNS("http://www.deegree.org/print", "AreaLeft"); XMLTools.setNodeValue(el, spLeft.getValue().toString()); root.appendChild(el); el = doc.createElementNS("http://www.deegree.org/print", "AreaTop"); XMLTools.setNodeValue(el, spTop.getValue().toString()); root.appendChild(el); el = doc.createElementNS("http://www.deegree.org/print", "DPI"); XMLTools.setNodeValue(el, cbDPI.getSelectedItem().toString()); root.appendChild(el); el = doc.createElementNS("http://www.deegree.org/print", "MapLeft"); XMLTools.setNodeValue(el, spMapLeft.getValue().toString()); root.appendChild(el); el = doc.createElementNS("http://www.deegree.org/print", "MapBottom"); XMLTools.setNodeValue(el, spMapBottom.getValue().toString()); root.appendChild(el); el = doc.createElementNS("http://www.deegree.org/print", "PageFormat"); Element subEl; ListEntry le = (ListEntry) cbPageFormat.getSelectedItem(); if (le.value != null) { subEl = doc.createElementNS("http://www.deegree.org/print", "Named"); XMLTools.setNodeValue(subEl, le.value.toString()); subEl.setAttribute("label", le.title); } else { subEl = doc.createElementNS("http://www.deegree.org/print", "Extent"); Element w = doc.createElementNS("http://www.deegree.org/print", "width"); XMLTools.setNodeValue(w, Integer.toString(((Number) tfPageWidth.getValue()).intValue())); w.setAttribute("unit", "mm"); subEl.appendChild(w); Element h = doc.createElementNS("http://www.deegree.org/print", "height"); XMLTools.setNodeValue(h, Integer.toString(((Number) tfPageHeight.getValue()).intValue())); h.setAttribute("unit", "mm"); subEl.appendChild(h); } el.appendChild(subEl); root.appendChild(el); el = doc.createElementNS("http://www.deegree.org/print", "Scale"); if (rbConst.isSelected()) { XMLTools.setNodeValue(el, ((ListEntry) cbScale.getSelectedItem()).value.toString()); } else { XMLTools.setNodeValue(el, "-1"); } el.setAttribute("label", ((ListEntry) cbScale.getSelectedItem()).title); root.appendChild(el); el = doc.createElementNS("http://www.deegree.org/print", "TargetFile"); XMLTools.setNodeValue(el, tfOutputFile.getText()); root.appendChild(el); // write to file FileOutputStream fos = new FileOutputStream(file); Properties props = new Properties(); props.put(OutputKeys.ENCODING, "UTF-8"); xml.write(fos, props); fos.close(); } catch (Exception e) { LOG.logError(e); DialogFactory.openErrorDialog(appContainer.getViewPlatform(), this, Messages.getMessage(getLocale(), "$MD11812"), Messages.getMessage(getLocale(), "$MD11813"), e); } } /** * <pre> * <PrintDefinition xmlns="http://www.deegree.org/print"> * <AreaHeight>180</AreaHeight> * <AreaWidth>270</AreaWidth> * <AreaLeft>10</AreaLeft> * <AreaTop>10</AreaTop> * <DPI>300</DPI> * <MapLeft>2597678</MapLeft> * <MapBottom>5697438</MapBottom> * <PageFormat> * <Named label="Din A4">A4</Named> * <!-- or --> * <Extent> * <width unit="pt">300</width> * <height unit="pt">500</height> * <Extent> * </PageFormat> * <Scale label="1:25000">25000</Scale> * <TargetFile>e:/temp/test.pdf</TargetFile> * </PrintDefinition> * </pre> */ private void doLoadSettings() { Preferences prefs = Preferences.userNodeForPackage(VectorPrintDialog.class); File file = GenericFileChooser.showOpenDialog(FILECHOOSERTYPE.externalResource, appContainer, this, prefs, "print definition", IGeoFileFilter.XML); if (file == null) { // cancel has been pressed return; } FileSystemAccessFactory fsaf = FileSystemAccessFactory.getInstance(appContainer); try { FileSystemAccess fsa = fsaf.getFileSystemAccess(FILECHOOSERTYPE.externalResource); URL url = fsa.getFileURL(file.getAbsolutePath()); XMLFragment xml = new XMLFragment(url); NamespaceContext nsc = CommonNamespaces.getNamespaceContext(); nsc.addNamespace("prnt", URI.create("http://www.deegree.org/print")); int ah = XMLTools.getRequiredNodeAsInt(xml.getRootElement(), "prnt:AreaHeight", nsc); int aw = XMLTools.getRequiredNodeAsInt(xml.getRootElement(), "prnt:AreaWidth", nsc); int al = XMLTools.getRequiredNodeAsInt(xml.getRootElement(), "prnt:AreaLeft", nsc); int at = XMLTools.getRequiredNodeAsInt(xml.getRootElement(), "prnt:AreaTop", nsc); int dpi = XMLTools.getRequiredNodeAsInt(xml.getRootElement(), "prnt:DPI", nsc); double ml = XMLTools.getRequiredNodeAsDouble(xml.getRootElement(), "prnt:MapLeft", nsc); double mb = XMLTools.getRequiredNodeAsDouble(xml.getRootElement(), "prnt:MapBottom", nsc); String pageFormatName = XMLTools.getNodeAsString(xml.getRootElement(), "prnt:PageFormat/prnt:Named", nsc, null); String pageFormatLabel = XMLTools.getNodeAsString(xml.getRootElement(), "prnt:PageFormat/prnt:Named/@label", nsc, null); int pageFormatWidth = XMLTools.getNodeAsInt(xml.getRootElement(), "prnt:PageFormat/prnt:Extent/prnt:width", nsc, -1); int pageFormatHeight = XMLTools.getNodeAsInt(xml.getRootElement(), "prnt:PageFormat/prnt:Extent/prnt:height", nsc, -1); int sc = XMLTools.getNodeAsInt(xml.getRootElement(), "prnt:Scale", nsc, -1); String scl = XMLTools.getNodeAsString(xml.getRootElement(), "prnt:Scale/@label", nsc, null); String tf = XMLTools.getNodeAsString(xml.getRootElement(), "prnt:TargetFilet", nsc, ""); // set pageFormat first, to avoid that spHeight and spWidth from the imported file are overwritten! if (pageFormatName != null) { cbPageFormat.setSelectedItem(new ListEntry(pageFormatLabel, pageFormatName)); } else if (pageFormatWidth < 0) { cbPageFormat.setSelectedIndex(2); } else { cbPageFormat.setSelectedIndex(0); tfPageHeight.setValue(pageFormatHeight); tfPageHeight.setEnabled(true); tfPageWidth.setValue(pageFormatWidth); tfPageWidth.setEnabled(true); } spHeight.setValue(ah); spWidth.setValue(aw); spLeft.setValue(al); spTop.setValue(at); cbDPI.setSelectedItem(new Integer(dpi)); spMapLeft.setValue(new Double(ml)); spMapBottom.setValue(new Double(mb)); if (sc > -1) { rbConst.setSelected(true); cbScale.setSelectedItem(new ListEntry(scl, sc)); } else { rbVariable.setSelected(true); } tfOutputFile.setText(tf); } catch (Exception e) { LOG.logError(e); DialogFactory.openErrorDialog(appContainer.getViewPlatform(), this, Messages.getMessage(getLocale(), "$MD11814"), Messages.getMessage(getLocale(), "$MD11815"), e); } } private void updatePreview() { if (isVisible()) { movePreviewRectangle(); Rectangle r; int pw; int ph; ListEntry le = (ListEntry) cbPageFormat.getSelectedItem(); if (le.value != null) { tfPageWidth.setEnabled(false); tfPageHeight.setEnabled(false); r = PageSize.getRectangle((String) le.value); pw = (int) Math.round(r.getWidth() / 72 * 25.4); ph = (int) Math.round(r.getHeight() / 72 * 25.4); } else { tfPageWidth.setEnabled(true); tfPageHeight.setEnabled(true); pw = ((Number) tfPageWidth.getValue()).intValue(); ph = ((Number) tfPageHeight.getValue()).intValue(); r = new Rectangle(inPt(pw), inPt(ph)); } lbPageSize.setText(Messages.getMessage(getLocale(), "$MD11816", pw, ph)); pnPreview.setAreaLeft(((Number) spLeft.getValue()).intValue()); pnPreview.setAreaTop(((Number) spTop.getValue()).intValue()); pnPreview.setAreaWidth(((Number) spWidth.getValue()).intValue()); pnPreview.setAreaHeight(((Number) spHeight.getValue()).intValue()); pnPreview.setPageSize(r); pnPreview.repaint(); } } private void movePreviewRectangle() { java.awt.Rectangle rect = getCanvasSize(); Envelope extent = mapModel.getEnvelope(); extent = MapUtils.ensureAspectRatio(extent, (Integer) spWidth.getValue(), (Integer) spHeight.getValue()); if (rbConst.isSelected()) { // use scale selected by used double currentScale = MapUtils.calcScale(rect.width, rect.height, extent, extent.getCoordinateSystem(), 0.0254 / (Integer) cbDPI.getSelectedItem()); extent = MapUtils.scaleEnvelope(extent, currentScale, (Integer) ((ListEntry) cbScale.getSelectedItem()).value); } // move rectangle to defined lower left coordinates double dx = ((Number) spMapLeft.getValue()).doubleValue() - extent.getMin().getX(); double dy = ((Number) spMapBottom.getValue()).doubleValue() - extent.getMin().getY(); extent.translate(dx, dy); try { Geometry geom = GeometryFactory.createSurface(extent, mapModel.getCoordinateSystem()); MemoryFeatureAdapter adapter = (MemoryFeatureAdapter) previewLayer.getDataAccess().get(0); FeatureCollection fc = adapter.getFeatureCollection(); Feature f = fc.getFeature(0); FeatureProperty prop = f.getProperties()[1]; prop.setValue(geom); adapter.updateFeature(f); adapter.commitChanges(); } catch (Exception e) { LOG.logError(e); } } private void addPreviewLayer() { java.awt.Rectangle rect = getCanvasSize(); Envelope extent = mapModel.getEnvelope(); extent = MapUtils.ensureAspectRatio(extent, (Integer) spWidth.getValue(), (Integer) spHeight.getValue()); if (rbConst.isSelected()) { // use scale selected by used double currentScale = MapUtils.calcScale(rect.width, rect.height, extent, extent.getCoordinateSystem(), 0.0254 / (Integer) cbDPI.getSelectedItem()); extent = MapUtils.scaleEnvelope(extent, currentScale, (Integer) ((ListEntry) cbScale.getSelectedItem()).value); } // move rectangle to defined lower left coordinates double dx = ((Number) spMapLeft.getValue()).doubleValue() - extent.getMin().getX(); double dy = ((Number) spMapBottom.getValue()).doubleValue() - extent.getMin().getY(); extent.translate(dx, dy); try { Geometry geom = GeometryFactory.createSurface(extent, mapModel.getCoordinateSystem()); List<Geometry> list = new ArrayList<Geometry>(); list.add(geom); AddMemoryLayerCommand cmd = new AddMemoryLayerCommand(); cmd.setApplicationContainer(appContainer); cmd.setTitle("deegree:PrintBorder"); cmd.setGeometries(list); cmd.execute(); previewLayer = (Layer) cmd.getResult(); } catch (Exception e) { LOG.logError(e); } } /** * Fetches and returns the active map module * * @return the active map module */ @SuppressWarnings("unchecked") DefaultMapModule<Container> getAssignedMapModule() { List<?> modules = appContainer.getModules(); MapModel mapModel = appContainer.getMapModel(null); DefaultMapModule<Container> mapModule = null; for (Object module : modules) { if (module instanceof DefaultMapModule<?>) { String t = ((IModule<?>) module).getInitParameter("assignedMapModel"); if (t != null && mapModel != null && t.equals(mapModel.getIdentifier().getValue())) { return (DefaultMapModule<Container>) module; } else { if (mapModule == null) mapModule = (DefaultMapModule<Container>) module; } } } return mapModule; } private int convert(double millimeter) { return (int) Math.round(millimeter * (Integer) cbDPI.getSelectedItem() / 25.4); } private java.awt.Rectangle getCanvasSize() { int w = convert((Integer) spWidth.getValue()); int h = convert((Integer) spHeight.getValue()); int x = convert((Integer) spLeft.getValue()); int y = convert((Integer) spTop.getValue()); return new java.awt.Rectangle(x, y, w, h); } private void removePreviewLayer() { if (previewLayer != null && mapModel.exists(previewLayer.getIdentifier())) { mapModel.remove(previewLayer); } if (previewLayer != null) { previewLayer.destroy(); previewLayer = null; } } @Override public void valueChanged(ValueChangedEvent event) { isActive = false; } // ///////////////////////////////////////////////////////////////////////////////////////////////////// // inner classes // ///////////////////////////////////////////////////////////////////////////////////////////////////// /** * * TODO add class documentation here * * @author <a href="mailto:name@deegree.org">Andreas Poth</a> * @author last edited by: $Author$ * * @version $Revision$, $Date$ */ private class PrintSizeListener implements ChangeListener { /* * (non-Javadoc) * * @see javax.swing.event.ChangeListener#stateChanged(javax.swing.event.ChangeEvent) */ public void stateChanged(ChangeEvent arg0) { updatePreview(); } } /** * * TODO add class documentation here * * @author <a href="mailto:name@deegree.org">Andreas Poth</a> * @author last edited by: $Author$ * * @version $Revision$, $Date$ */ private static class ListEntry { String title; Object value; /** * @param title * @param value */ public ListEntry(String title, Object value) { this.title = title; this.value = value; } @Override public String toString() { return title; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((title == null) ? 0 : title.hashCode()); result = prime * result + ((value == null) ? 0 : value.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (!(obj instanceof ListEntry)) return false; ListEntry other = (ListEntry) obj; if (title == null) { if (other.title != null) return false; } else if (!title.equals(other.title)) return false; if (value == null) { if (other.value != null) return false; } else if (!value.equals(other.value)) return false; return true; } } /** * * TODO add class documentation here * * @author <a href="mailto:name@deegree.org">Andreas Poth</a> * @author last edited by: $Author$ * * @version $Revision$, $Date$ */ private class PrintMouseListener extends MouseAdapter { @Override public void mousePressed(MouseEvent e) { GeoTransform gt = mapModel.getToTargetDeviceTransformation(); double x = gt.getSourceX(e.getX()); double y = gt.getSourceY(e.getY()); pressPoint = GeometryFactory.createPoint(x, y, mapModel.getCoordinateSystem()); LayerComponent.vectorPrintDialogPreviewHack = true; } @Override public void mouseReleased(MouseEvent e) { GeoTransform gt = mapModel.getToTargetDeviceTransformation(); double x = gt.getSourceX(e.getX()); double y = gt.getSourceY(e.getY()); Point releasePoint = GeometryFactory.createPoint(x, y, mapModel.getCoordinateSystem()); double dx = releasePoint.getX() - pressPoint.getX(); double dy = releasePoint.getY() - pressPoint.getY(); spMapLeft.setValue(((Number) spMapLeft.getValue()).doubleValue() + dx); spMapBottom.setValue(((Number) spMapBottom.getValue()).doubleValue() + dy); LayerComponent.vectorPrintDialogPreviewHack = false; } } private class PrintMouseMotionListener extends MouseMotionAdapter { @Override public void mouseDragged(MouseEvent e) { if (isActive) { GeoTransform gt = mapModel.getToTargetDeviceTransformation(); double x = gt.getSourceX(e.getX()); double y = gt.getSourceY(e.getY()); Point dragPoint = GeometryFactory.createPoint(x, y, mapModel.getCoordinateSystem()); double dx = dragPoint.getX() - pressPoint.getX(); double dy = dragPoint.getY() - pressPoint.getY(); spMapLeft.setValue(((Number) spMapLeft.getValue()).doubleValue() + dx); spMapBottom.setValue(((Number) spMapBottom.getValue()).doubleValue() + dy); pressPoint = dragPoint; } } } }