/*************************************************** * * cismet GmbH, Saarbruecken, Germany * * ... and it just works. * ****************************************************/ /* * StatusBar.java * * Created on 23. März 2006, 14:23 */ package de.cismet.cismap.commons.gui.statusbar; import com.vividsolutions.jts.geom.Coordinate; import com.vividsolutions.jts.geom.Geometry; import org.openide.util.NbBundle; import java.awt.BorderLayout; import java.awt.EventQueue; import java.awt.Graphics; import java.awt.RenderingHints; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.image.BufferedImage; import java.text.DecimalFormat; import java.text.DecimalFormatSymbols; import java.util.Collection; import java.util.HashSet; import javax.swing.ImageIcon; import javax.swing.JMenuItem; import javax.swing.JPanel; import de.cismet.cismap.commons.Crs; import de.cismet.cismap.commons.CrsTransformer; import de.cismet.cismap.commons.ServiceLayer; import de.cismet.cismap.commons.features.DefaultFeatureServiceFeature; import de.cismet.cismap.commons.features.Feature; import de.cismet.cismap.commons.features.FeatureCollectionEvent; import de.cismet.cismap.commons.features.FeatureCollectionListener; import de.cismet.cismap.commons.features.XStyledFeature; import de.cismet.cismap.commons.gui.MappingComponent; import de.cismet.cismap.commons.gui.piccolo.PFeature; import de.cismet.cismap.commons.gui.printing.Scale; import de.cismet.cismap.commons.interaction.ActiveLayerListener; import de.cismet.cismap.commons.interaction.CismapBroker; import de.cismet.cismap.commons.interaction.StatusListener; import de.cismet.cismap.commons.interaction.events.ActiveLayerEvent; import de.cismet.cismap.commons.interaction.events.StatusEvent; import de.cismet.tools.Static2DTools; import de.cismet.tools.StaticDebuggingTools; import de.cismet.tools.StaticDecimalTools; import de.cismet.tools.gui.exceptionnotification.DefaultExceptionHandlerListener; /** * DOCUMENT ME! * * @author thorsten.hell@cismet.de * @version $Revision$, $Date$ */ public class StatusBar extends javax.swing.JPanel implements StatusListener, FeatureCollectionListener, ActiveLayerListener { //~ Instance fields -------------------------------------------------------- String mode; ImageIcon defaultIcon = new javax.swing.ImageIcon(getClass().getResource( "/de/cismet/cismap/commons/gui/res/map.png")); // NOI18N MappingComponent mappingComponent; private final org.apache.log4j.Logger log = org.apache.log4j.Logger.getLogger(this.getClass()); private CrsTransformer transformer = null; private DecimalFormat df = new DecimalFormat("0.000000"); // NOI18N private int servicesCounter = 0; private int servicesErroneousCounter = 0; private Collection<ServiceLayer> services = new HashSet<ServiceLayer>(); private Collection<ServiceLayer> erroneousServices = new HashSet<ServiceLayer>(); private JPanel servicesBusyPanel = new ServicesBusyPanel(); private JPanel servicesRetrievedPanel = new ServicesRetrievedPanel(); private JPanel servicesErrorPanel = new ServicesErrorPanel(); private JPanel mapExtentFixedPanel = new MapExtentFixedPanel(); private JPanel mapExtentUnfixedPanel = new MapExtentUnfixedPanel(); private JPanel mapScaleFixedPanel = new MapScaleFixedPanel(); private JPanel mapScaleUnfixedPanel = new MapScaleUnfixedPanel(); private boolean developerMode = false; // Variables declaration - do not modify//GEN-BEGIN:variables private de.cismet.tools.gui.exceptionnotification.ExceptionNotificationStatusPanel exceptionNotificationStatusPanel; private javax.swing.Box.Filler gluFiller; private javax.swing.JSeparator jSeparator1; private javax.swing.JLabel lblCoordinates; private javax.swing.JLabel lblCrs; private javax.swing.JLabel lblMeasurement; private javax.swing.JLabel lblScale; private javax.swing.JLabel lblStatus; private javax.swing.JLabel lblStatusImage; private javax.swing.JLabel lblWgs84Coordinates; private javax.swing.JPanel pnlFixMapExtent; private javax.swing.JPanel pnlFixMapScale; private javax.swing.JPanel pnlServicesStatus; private javax.swing.JPopupMenu pomCrs; private javax.swing.JPopupMenu pomScale; private javax.swing.JSeparator sepCoordinates; private javax.swing.JSeparator sepCrs; private javax.swing.JSeparator sepExcNotStat; private javax.swing.JSeparator sepFeedbackIcons; private javax.swing.JSeparator sepMeasurement; private javax.swing.JSeparator sepScale; private de.cismet.cismap.commons.gui.statusbar.ServicesRetrievedPanel servicesRetrievedPanel1; // End of variables declaration//GEN-END:variables //~ Constructors ----------------------------------------------------------- /** * Creates new form StatusBar. * * @param mappingComponent DOCUMENT ME! */ public StatusBar(final MappingComponent mappingComponent) { initComponents(); this.mappingComponent = mappingComponent; lblStatusImage.setText(""); // NOI18N lblCoordinates.setText(""); // NOI18N lblStatusImage.setIcon(defaultIcon); lblCrs.setText(CismapBroker.getInstance().getSrs().getCode()); final DecimalFormatSymbols dfs = new DecimalFormatSymbols(); dfs.setDecimalSeparator('.'); df.setDecimalFormatSymbols(dfs); pnlFixMapExtent.add(mapExtentUnfixedPanel, BorderLayout.CENTER); pnlFixMapScale.add(mapScaleUnfixedPanel, BorderLayout.CENTER); try { // initialises the geo transformer that transforms the coordinates from the current // coordinate system to EPSG:4326 this.transformer = new CrsTransformer("EPSG:4326"); } catch (Exception e) { log.error("cannot create a transformer for EPSG:4326.", e); } developerMode = StaticDebuggingTools.checkHomeForFile("cismetDeveloper"); } //~ Methods ---------------------------------------------------------------- /** * DOCUMENT ME! */ public void addCrsPopups() { for (final Crs c : mappingComponent.getCrsList()) { if (!c.isHideInCrsSwitcher()) { addCrsPopup(c); } } } /** * DOCUMENT ME! */ public void addScalePopups() { for (final Scale s : mappingComponent.getScales()) { if (s.getDenominator() > 0) { addScalePopupMenu(s.getText(), s.getDenominator()); } } } /** * DOCUMENT ME! * * @param e DOCUMENT ME! */ @Override public void statusValueChanged(final StatusEvent e) { final Runnable modifyControls = new Runnable() { @Override public void run() { if (e.getName().equals(StatusEvent.COORDINATE_STRING)) { final Coordinate c = (Coordinate)e.getValue(); final Crs crs = CismapBroker.getInstance().getSrs(); final boolean showAdditionalWSG84Coords = !crs.getCode().equalsIgnoreCase("epsg:4326"); if (crs.isMetric()) { lblCoordinates.setText(MappingComponent.getCoordinateString(c.x, c.y)); } else { lblCoordinates.setText(transformToWGS84Coords(c)); } if (showAdditionalWSG84Coords) { lblWgs84Coordinates.setText(transformToWGS84Coords(c)); } lblWgs84Coordinates.setVisible(showAdditionalWSG84Coords); sepCoordinates.setVisible(showAdditionalWSG84Coords); } else if (e.getName().equals(StatusEvent.MEASUREMENT_INFOS)) { lblStatus.setText(e.getValue().toString()); } else if (e.getName().equals(StatusEvent.MAPPING_MODE)) { lblStatus.setText(""); // NOI18N } else if (e.getName().equals(StatusEvent.OBJECT_INFOS)) { if ((e.getValue() != null) && (e.getValue() instanceof PFeature) && (((PFeature)e.getValue()).getFeature() != null) && (((PFeature)e.getValue()).getFeature() instanceof XStyledFeature)) { lblStatus.setText(((XStyledFeature)((PFeature)e.getValue()).getFeature()).getName()); final ImageIcon ico = ((XStyledFeature)((PFeature)e.getValue()).getFeature()) .getIconImage(); if ((ico != null) && (ico.getIconWidth() > 0) && (ico.getIconHeight() > 0)) { final BufferedImage imageToScale = new BufferedImage(ico.getIconWidth(), ico.getIconHeight(), BufferedImage.TYPE_INT_ARGB); final Graphics g = imageToScale.createGraphics(); g.drawImage(ico.getImage(), 0, 0, ico.getImageObserver()); g.dispose(); lblStatusImage.setIcon(new ImageIcon( Static2DTools.getFasterScaledInstance( imageToScale, lblStatusImage.getWidth(), lblStatusImage.getHeight(), RenderingHints.VALUE_INTERPOLATION_BILINEAR, true))); } else { lblStatusImage.setIcon(defaultIcon); } } else if ((e.getValue() != null) && (e.getValue() instanceof PFeature) && (((PFeature)e.getValue()).getFeature() != null) && (((PFeature)e.getValue()).getFeature() instanceof DefaultFeatureServiceFeature)) { if ( ((DefaultFeatureServiceFeature)((PFeature)e.getValue()).getFeature()) .getSecondaryAnnotation() != null) { lblStatus.setText(((DefaultFeatureServiceFeature)((PFeature)e.getValue()).getFeature()) .getSecondaryAnnotation()); } else { lblStatus.setText(""); // NOI18N } } else { lblStatus.setText(""); // NOI18N lblStatusImage.setIcon(defaultIcon); } } else if (e.getName().equals(StatusEvent.SCALE)) { final int sd = (int)(mappingComponent.getScaleDenominator() + 0.5); if (e.getValue().equals(StatusEvent.WINDOW_REMOVED) || (mappingComponent.getWidth() == 0)) { lblScale.setText(NbBundle.getMessage( StatusBar.class, "StatusBar.statusValueChanged(StatusEvent).mapHidden")); // NOI18N } else if (mappingComponent.getWidth() < 1) { lblScale.setText(NbBundle.getMessage( StatusBar.class, "StatusBar.statusValueChanged(StatusEvent).mapMinimized")); // NOI18N } else { if (developerMode) { lblScale.setText("OGC: " + mappingComponent.getCurrentOGCScale() + " 1:" + sd); // NOI18N } else { lblScale.setText("1:" + sd); // NOI18N } } } else if (e.getName().equals(StatusEvent.CRS)) { lblCrs.setText(((Crs)e.getValue()).getShortname()); lblCoordinates.setToolTipText(((Crs)e.getValue()).getShortname()); } else if (e.getName().equals(StatusEvent.RETRIEVAL_STARTED)) { if ((pnlServicesStatus.getComponentCount() > 0) && !pnlServicesStatus.getComponent(0).equals(servicesBusyPanel)) { pnlServicesStatus.removeAll(); pnlServicesStatus.add(servicesBusyPanel, BorderLayout.CENTER); pnlServicesStatus.revalidate(); pnlServicesStatus.repaint(); } } else if (e.getName().equals(StatusEvent.RETRIEVAL_COMPLETED) || e.getName().equals(StatusEvent.RETRIEVAL_ABORTED) || e.getName().equals(StatusEvent.RETRIEVAL_REMOVED)) { if (servicesCounter == 0) { pnlServicesStatus.removeAll(); if (servicesErroneousCounter == 0) { pnlServicesStatus.add(servicesRetrievedPanel, BorderLayout.CENTER); } else { pnlServicesStatus.add(servicesErrorPanel, BorderLayout.CENTER); } pnlServicesStatus.revalidate(); pnlServicesStatus.repaint(); } } else if (e.getName().equals(StatusEvent.RETRIEVAL_ERROR)) { if ((pnlServicesStatus.getComponentCount() > 0) && !pnlServicesStatus.getComponent(0).equals(servicesErrorPanel)) { pnlServicesStatus.removeAll(); pnlServicesStatus.add(servicesErrorPanel, BorderLayout.CENTER); pnlServicesStatus.revalidate(); pnlServicesStatus.repaint(); } } else if (e.getName().equals(StatusEvent.MAP_EXTEND_FIXED)) { if (e.getValue() instanceof Boolean) { pnlFixMapExtent.removeAll(); if ((Boolean)e.getValue()) { pnlFixMapExtent.add(mapExtentFixedPanel, BorderLayout.CENTER); } else { pnlFixMapExtent.add(mapExtentUnfixedPanel, BorderLayout.CENTER); } pnlFixMapExtent.revalidate(); pnlFixMapExtent.repaint(); } } else if (e.getName().equals(StatusEvent.MAP_SCALE_FIXED)) { if (e.getValue() instanceof Boolean) { pnlFixMapScale.removeAll(); if ((Boolean)e.getValue()) { pnlFixMapScale.add(mapScaleFixedPanel, BorderLayout.CENTER); } else { pnlFixMapScale.add(mapScaleUnfixedPanel, BorderLayout.CENTER); } pnlFixMapScale.revalidate(); pnlFixMapScale.repaint(); } } } }; if (e.getName().equals(StatusEvent.MAPPING_MODE)) { mode = ((String)e.getValue()); } else if (e.getName().equals(StatusEvent.RETRIEVAL_STARTED)) { if (log.isDebugEnabled()) { log.debug("Entered RETRIEVAL_STARTED: " + e.getValue() + " (" + System.currentTimeMillis() + ")"); } if (e.getValue() instanceof ServiceLayer) { final ServiceLayer service = (ServiceLayer)e.getValue(); if (erroneousServices.contains(service)) { erroneousServices.remove(service); servicesErroneousCounter--; } if (!services.contains(service)) { services.add(service); servicesCounter++; } } if (log.isDebugEnabled()) { log.debug("RETRIEVAL_STARTED (" + e.getValue() + ", " + System.currentTimeMillis() + ") - services started: " + servicesCounter + ", erroneous services: " + servicesErroneousCounter); } } else if (e.getName().equals(StatusEvent.RETRIEVAL_COMPLETED)) { if (log.isDebugEnabled()) { log.debug("Entered RETRIEVAL_COMPLETED: " + e.getValue() + " (" + System.currentTimeMillis() + ")"); } if (e.getValue() instanceof ServiceLayer) { final ServiceLayer service = (ServiceLayer)e.getValue(); if (services.contains(service)) { services.remove(service); servicesCounter--; } } if (log.isDebugEnabled()) { log.debug("RETRIEVAL_COMPLETED (" + e.getValue() + ", " + System.currentTimeMillis() + ") - services started: " + servicesCounter + ", erroneous services: " + servicesErroneousCounter); } } else if (e.getName().equals(StatusEvent.RETRIEVAL_ABORTED)) { if (log.isDebugEnabled()) { log.debug("Entered RETRIEVAL_ABORTED: " + e.getValue() + " (" + System.currentTimeMillis() + ")"); } if (e.getValue() instanceof ServiceLayer) { final ServiceLayer service = (ServiceLayer)e.getValue(); if (services.contains(service)) { services.remove(service); servicesCounter--; } } if (log.isDebugEnabled()) { log.debug("RETRIEVAL_ABORTED (" + e.getValue() + ", " + System.currentTimeMillis() + ") - services started: " + servicesCounter + ", erroneous services: " + servicesErroneousCounter); } } else if (e.getName().equals(StatusEvent.RETRIEVAL_ERROR)) { if (log.isDebugEnabled()) { log.debug("Entered RETRIEVAL_ERROR: " + e.getValue() + " (" + System.currentTimeMillis() + ")"); } if (e.getValue() instanceof ServiceLayer) { final ServiceLayer service = (ServiceLayer)e.getValue(); if (services.contains(service)) { services.remove(service); servicesCounter--; erroneousServices.add(service); servicesErroneousCounter++; } } if (log.isDebugEnabled()) { log.debug("RETRIEVAL_ERROR (" + e.getValue() + ", " + System.currentTimeMillis() + ") - services started: " + servicesCounter + ", erroneous services: " + servicesErroneousCounter); } } else if (e.getName().equals(StatusEvent.RETRIEVAL_REMOVED)) { if (log.isDebugEnabled()) { log.debug("Entered RETRIEVAL_REMOVED: " + e.getValue() + " (" + System.currentTimeMillis() + ")"); } if (e.getValue() instanceof ServiceLayer) { final ServiceLayer service = (ServiceLayer)e.getValue(); if (services.contains(service)) { services.remove(service); servicesCounter--; } if (erroneousServices.contains(service)) { erroneousServices.remove(service); servicesErroneousCounter--; } } if (log.isDebugEnabled()) { log.debug("RETRIEVAL_REMOVED (" + e.getValue() + ", " + System.currentTimeMillis() + ") - services started: " + servicesCounter + ", erroneous services: " + servicesErroneousCounter); } } else if (e.getName().equals(StatusEvent.RETRIEVAL_RESET)) { if (log.isDebugEnabled()) { log.debug("Entered RETRIEVAL_RESET: " + e.getValue() + " (" + System.currentTimeMillis() + ")"); } if (e.getValue() instanceof ServiceLayer) { final ServiceLayer service = (ServiceLayer)e.getValue(); if (services.contains(service)) { services.remove(service); servicesCounter--; } if (erroneousServices.contains(service)) { erroneousServices.remove(service); servicesErroneousCounter--; } } services.clear(); erroneousServices.clear(); servicesCounter = 0; servicesErroneousCounter = 0; if (log.isDebugEnabled()) { log.debug("RETRIEVAL_RESET (" + e.getValue() + ", " + System.currentTimeMillis() + ") - services started: " + servicesCounter + ", erroneous services: " + servicesErroneousCounter); } } if (EventQueue.isDispatchThread()) { modifyControls.run(); } else { EventQueue.invokeLater(modifyControls); } } /** * This method is called from within the constructor to initialize the form. WARNING: Do NOT modify this code. The * content of this method is always regenerated by the Form Editor. */ // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents private void initComponents() { java.awt.GridBagConstraints gridBagConstraints; jSeparator1 = new javax.swing.JSeparator(); pomScale = new javax.swing.JPopupMenu(); pomCrs = new javax.swing.JPopupMenu(); pnlServicesStatus = new javax.swing.JPanel(); servicesRetrievedPanel1 = new de.cismet.cismap.commons.gui.statusbar.ServicesRetrievedPanel(); pnlFixMapExtent = new javax.swing.JPanel(); pnlFixMapScale = new javax.swing.JPanel(); sepFeedbackIcons = new javax.swing.JSeparator(); lblMeasurement = new javax.swing.JLabel(); sepMeasurement = new javax.swing.JSeparator(); lblStatusImage = new javax.swing.JLabel(); lblStatus = new javax.swing.JLabel(); gluFiller = new javax.swing.Box.Filler(new java.awt.Dimension(0, 0), new java.awt.Dimension(0, 0), new java.awt.Dimension(0, 0)); lblScale = new javax.swing.JLabel(); sepScale = new javax.swing.JSeparator(); lblCrs = new javax.swing.JLabel(); sepCrs = new javax.swing.JSeparator(); lblCoordinates = new javax.swing.JLabel(); sepCoordinates = new javax.swing.JSeparator(); lblWgs84Coordinates = new javax.swing.JLabel(); exceptionNotificationStatusPanel = new de.cismet.tools.gui.exceptionnotification.ExceptionNotificationStatusPanel(); sepExcNotStat = new javax.swing.JSeparator(); jSeparator1.setOrientation(javax.swing.SwingConstants.VERTICAL); setLayout(new java.awt.GridBagLayout()); pnlServicesStatus.setLayout(new java.awt.BorderLayout()); pnlServicesStatus.add(servicesRetrievedPanel1, java.awt.BorderLayout.CENTER); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 0; gridBagConstraints.insets = new java.awt.Insets(0, 0, 0, 2); add(pnlServicesStatus, gridBagConstraints); pnlFixMapExtent.setMinimumSize(new java.awt.Dimension(16, 16)); pnlFixMapExtent.setLayout(new java.awt.BorderLayout()); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.insets = new java.awt.Insets(0, 2, 0, 2); add(pnlFixMapExtent, gridBagConstraints); pnlFixMapScale.setMinimumSize(new java.awt.Dimension(16, 16)); pnlFixMapScale.setLayout(new java.awt.BorderLayout()); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 2; gridBagConstraints.insets = new java.awt.Insets(0, 2, 0, 0); add(pnlFixMapScale, gridBagConstraints); sepFeedbackIcons.setOrientation(javax.swing.SwingConstants.VERTICAL); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 3; gridBagConstraints.gridy = 0; gridBagConstraints.fill = java.awt.GridBagConstraints.VERTICAL; gridBagConstraints.insets = new java.awt.Insets(0, 2, 0, 2); add(sepFeedbackIcons, gridBagConstraints); lblMeasurement.setMinimumSize(new java.awt.Dimension(300, 17)); lblMeasurement.setPreferredSize(new java.awt.Dimension(300, 17)); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 4; gridBagConstraints.gridy = 0; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; add(lblMeasurement, gridBagConstraints); sepMeasurement.setOrientation(javax.swing.SwingConstants.VERTICAL); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 5; gridBagConstraints.gridy = 0; gridBagConstraints.fill = java.awt.GridBagConstraints.VERTICAL; gridBagConstraints.insets = new java.awt.Insets(0, 2, 0, 2); add(sepMeasurement, gridBagConstraints); lblStatusImage.setMaximumSize(new java.awt.Dimension(17, 17)); lblStatusImage.setMinimumSize(new java.awt.Dimension(17, 17)); lblStatusImage.setPreferredSize(new java.awt.Dimension(17, 17)); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 6; gridBagConstraints.gridy = 0; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; add(lblStatusImage, gridBagConstraints); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 7; gridBagConstraints.gridy = 0; gridBagConstraints.insets = new java.awt.Insets(0, 2, 0, 2); add(lblStatus, gridBagConstraints); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 8; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.weightx = 1.0; add(gluFiller, gridBagConstraints); lblScale.setComponentPopupMenu(pomScale); lblScale.addMouseListener(new java.awt.event.MouseAdapter() { @Override public void mousePressed(final java.awt.event.MouseEvent evt) { lblScaleMousePressed(evt); } }); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 9; gridBagConstraints.gridy = 0; add(lblScale, gridBagConstraints); sepScale.setOrientation(javax.swing.SwingConstants.VERTICAL); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 10; gridBagConstraints.gridy = 0; gridBagConstraints.fill = java.awt.GridBagConstraints.VERTICAL; gridBagConstraints.insets = new java.awt.Insets(0, 2, 0, 2); add(sepScale, gridBagConstraints); lblCrs.setComponentPopupMenu(pomCrs); lblCrs.addMouseListener(new java.awt.event.MouseAdapter() { @Override public void mousePressed(final java.awt.event.MouseEvent evt) { lblCrsMousePressed(evt); } }); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 11; gridBagConstraints.gridy = 0; add(lblCrs, gridBagConstraints); sepCrs.setOrientation(javax.swing.SwingConstants.VERTICAL); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 12; gridBagConstraints.gridy = 0; gridBagConstraints.fill = java.awt.GridBagConstraints.VERTICAL; gridBagConstraints.insets = new java.awt.Insets(0, 2, 0, 2); add(sepCrs, gridBagConstraints); lblCoordinates.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 13; gridBagConstraints.gridy = 0; gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST; add(lblCoordinates, gridBagConstraints); sepCoordinates.setOrientation(javax.swing.SwingConstants.VERTICAL); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 14; gridBagConstraints.gridy = 0; gridBagConstraints.fill = java.awt.GridBagConstraints.VERTICAL; gridBagConstraints.insets = new java.awt.Insets(0, 2, 0, 2); add(sepCoordinates, gridBagConstraints); lblWgs84Coordinates.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT); lblWgs84Coordinates.setToolTipText(org.openide.util.NbBundle.getMessage( StatusBar.class, "StatusBar.lblWgs84Coordinates.toolTipText")); // NOI18N gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 15; gridBagConstraints.gridy = 0; gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST; add(lblWgs84Coordinates, gridBagConstraints); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 17; gridBagConstraints.gridy = 0; add(exceptionNotificationStatusPanel, gridBagConstraints); sepExcNotStat.setOrientation(javax.swing.SwingConstants.VERTICAL); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 16; gridBagConstraints.gridy = 0; gridBagConstraints.fill = java.awt.GridBagConstraints.VERTICAL; gridBagConstraints.insets = new java.awt.Insets(0, 2, 0, 2); add(sepExcNotStat, gridBagConstraints); } // </editor-fold>//GEN-END:initComponents /** * DOCUMENT ME! * * @param evt DOCUMENT ME! */ private void lblScaleMousePressed(final java.awt.event.MouseEvent evt) { //GEN-FIRST:event_lblScaleMousePressed if (evt.isPopupTrigger()) { pomScale.setVisible(true); } } //GEN-LAST:event_lblScaleMousePressed /** * DOCUMENT ME! * * @param evt DOCUMENT ME! */ private void lblCrsMousePressed(final java.awt.event.MouseEvent evt) { //GEN-FIRST:event_lblCrsMousePressed if (evt.isPopupTrigger()) { pomCrs.setVisible(true); } } //GEN-LAST:event_lblCrsMousePressed /** * DOCUMENT ME! * * @param crs DOCUMENT ME! */ private void addCrsPopup(final Crs crs) { final JMenuItem jmi = new JMenuItem(crs.getShortname()); if (crs.isSelected()) { // the default srs should be bold jmi.setText("<html><b>" + crs.getShortname() + "</b></html>"); } jmi.setToolTipText(crs.getName()); jmi.addActionListener(new ActionListener() { @Override public void actionPerformed(final ActionEvent e) { CismapBroker.getInstance().setSrs(crs); } }); pomCrs.add(jmi); } /** * DOCUMENT ME! * * @param text DOCUMENT ME! * @param scaleDenominator DOCUMENT ME! */ private void addScalePopupMenu(final String text, final double scaleDenominator) { final JMenuItem jmi = new JMenuItem(text); jmi.addActionListener(new ActionListener() { @Override public void actionPerformed(final ActionEvent e) { mappingComponent.gotoBoundingBoxWithHistory( mappingComponent.getBoundingBoxFromScale(scaleDenominator)); } }); pomScale.add(jmi); } /** * DOCUMENT ME! */ private void refreshMeasurementsInStatus() { try { final Collection<Feature> cf = mappingComponent.getFeatureCollection().getSelectedFeatures(); refreshMeasurementsInStatus(cf); } catch (NullPointerException ex) { log.error("Error while refreshing measurements", ex); // NOI18N } } /** * DOCUMENT ME! * * @param cf DOCUMENT ME! */ private void refreshMeasurementsInStatus(final Collection<Feature> cf) { double umfang = 0.0; double area = 0.0; for (final Feature f : cf) { if ((f != null) && (f.getGeometry() != null)) { final Geometry geo = CrsTransformer.transformToMetricCrs(f.getGeometry()); area += geo.getArea(); umfang += geo.getLength(); } } if (((area == 0.0) && (umfang == 0.0)) || (cf.size() == 0)) { lblMeasurement.setText(""); // NOI18N } else { lblMeasurement.setText( org.openide.util.NbBundle.getMessage( StatusBar.class, "StatusBar.lblMeasurement.text", new Object[] { StaticDecimalTools.round(area), StaticDecimalTools.round(umfang) })); // NOI18N } } /** * DOCUMENT ME! * * @param fce DOCUMENT ME! */ @Override public void featuresRemoved(final FeatureCollectionEvent fce) { } /** * DOCUMENT ME! * * @param fce DOCUMENT ME! */ @Override public void featuresChanged(final FeatureCollectionEvent fce) { if (log.isDebugEnabled()) { log.debug("FeatureChanged"); // NOI18N } if (mappingComponent.getInteractionMode().equals(MappingComponent.NEW_POLYGON)) { refreshMeasurementsInStatus(fce.getEventFeatures()); } else { refreshMeasurementsInStatus(); } } /** * DOCUMENT ME! * * @param fce DOCUMENT ME! */ @Override public void featuresAdded(final FeatureCollectionEvent fce) { } /** * DOCUMENT ME! * * @param fce DOCUMENT ME! */ @Override public void featureSelectionChanged(final FeatureCollectionEvent fce) { refreshMeasurementsInStatus(); } /** * DOCUMENT ME! * * @param fce DOCUMENT ME! */ @Override public void featureReconsiderationRequested(final FeatureCollectionEvent fce) { } /** * DOCUMENT ME! * * @param fce DOCUMENT ME! */ @Override public void allFeaturesRemoved(final FeatureCollectionEvent fce) { } /** * DOCUMENT ME! * * @return DOCUMENT ME! */ public javax.swing.JPopupMenu getPomScale() { return pomScale; } /** * DOCUMENT ME! */ @Override public void featureCollectionChanged() { } /** * DOCUMENT ME! * * @param p coords DOCUMENT ME! * * @return DOCUMENT ME! */ private String transformToWGS84Coords(final Coordinate p) { String result = ""; try { if (transformer != null) { final Coordinate[] wgs84Coord = transformer.transformGeometry(CismapBroker.getInstance().getSrs() .getCode(), p); result = "(" + df.format(wgs84Coord[0].x) + "," + df.format(wgs84Coord[0].y) + ")"; // NOI18N } else { log.error("Cannot transform the current coordinates: " + p); } } catch (Exception e) { log.error("Cannot transform the current coordinates: " + p, e); } return result; } /** * DOCUMENT ME! * * @param e DOCUMENT ME! */ @Override public void layerAdded(final ActiveLayerEvent e) { // TODO: Use this for counting starting retrievals? } /** * DOCUMENT ME! * * @param e DOCUMENT ME! */ @Override public void layerRemoved(final ActiveLayerEvent e) { if (e.getLayer() instanceof ServiceLayer) { statusValueChanged(new StatusEvent(StatusEvent.RETRIEVAL_REMOVED, (ServiceLayer)e.getLayer())); } } /** * DOCUMENT ME! * * @param e DOCUMENT ME! */ @Override public void layerPositionChanged(final ActiveLayerEvent e) { // NOP } /** * DOCUMENT ME! * * @param e DOCUMENT ME! */ @Override public void layerVisibilityChanged(final ActiveLayerEvent e) { // NOP } /** * DOCUMENT ME! * * @param e DOCUMENT ME! */ @Override public void layerAvailabilityChanged(final ActiveLayerEvent e) { if (e.getLayer() instanceof ServiceLayer) { final ServiceLayer layer = (ServiceLayer)e.getLayer(); if (!layer.isEnabled()) { statusValueChanged(new StatusEvent(StatusEvent.RETRIEVAL_REMOVED, layer)); } } } /** * DOCUMENT ME! * * @param e DOCUMENT ME! */ @Override public void layerInformationStatusChanged(final ActiveLayerEvent e) { // NOP } /** * DOCUMENT ME! * * @param e DOCUMENT ME! */ @Override public void layerSelectionChanged(final ActiveLayerEvent e) { // NOP } /** * DOCUMENT ME! * * @return DOCUMENT ME! */ public DefaultExceptionHandlerListener getExceptionHandlerListener() { return exceptionNotificationStatusPanel; } }