/* * Copyright 2013 Serdar. * * 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 de.fub.agg2graphui; import de.fub.agg2graph.structs.DoubleRect; import de.fub.agg2graphui.controller.AbstractLayer; import de.fub.agg2graphui.controller.LayerManager; import de.fub.mapviewer.shapes.WaypointMarker; import de.fub.utilsmodule.text.MessageFormatter; import java.awt.Point; import java.awt.geom.Point2D; import java.util.HashSet; import java.util.Locale; import javax.swing.JPanel; import org.jdesktop.swingx.mapviewer.GeoPosition; import org.jdesktop.swingx.mapviewer.TileFactory; import org.jdesktop.swingx.mapviewer.Waypoint; import org.jdesktop.swingx.mapviewer.WaypointPainter; import org.openide.util.NbBundle; import org.openide.util.NbBundle.Messages; /** * Top component which displays something. */ @Messages({ "CTL_AggAction=Agg", "CTL_AggTopComponent=Agg Window", "HINT_AggTopComponent=This is a Agg window" }) public final class AggTopComponent extends JPanel { private static final long serialVersionUID = 1L; private final transient MapViewListener mouseListener = new MapViewListener(this); private final HashSet<Waypoint> hashSet = new HashSet<Waypoint>(); public AggTopComponent() { initComponents(); setName(Bundle.CTL_AggTopComponent()); setToolTipText(Bundle.HINT_AggTopComponent()); init(); } private void init() { mapViewer.addMouseListener(mouseListener); mapViewer.addMouseMotionListener(mouseListener); mapViewer.addMouseWheelListener(mouseListener); mapViewer.addComponentListener(mouseListener); WaypointPainter<Waypoint> waypointPainter = new WaypointPainter<Waypoint>(); waypointPainter.setWaypoints(hashSet); mapViewer.setOverlayPainter(waypointPainter); } public void showArea(DoubleRect area) { HashSet<GeoPosition> set = new HashSet<GeoPosition>(); set.add(new GeoPosition(area.getMinX(), area.getMinY())); set.add(new GeoPosition(area.getWidth(), area.getHeight())); mapViewer.calculateZoomFrom(set); updateZoomLevel(); updateBoundingBox(); } public void setDisplayToFitMapMarkers() { mapViewer.setDisplayToFitMapMarkers(); updateZoomLevel(); updateBoundingBox(); mapViewer.repaint(); } public void setDisplayToFitMapRectangle() { setDisplayToFitMapMarkers(); } public synchronized void addMapMarker(WaypointMarker marker) { mapViewer.addWaypoint(marker); setDisplayToFitMapMarkers(); } public synchronized void removeMapMarker(WaypointMarker marker) { mapViewer.removeWaypoint(marker); setDisplayToFitMapMarkers(); } public synchronized void removeAllMarkers() { hashSet.clear(); setDisplayToFitMapMarkers(); } public void updateLonLat(Point point) { GeoPosition position = mapViewer.convertPointToGeoPosition(point); setLatitude(position.getLatitude()); setLongitude(position.getLongitude()); } public void updateZoomLevel() { setZoomLevel(mapViewer.getZoom()); } public void updateBoundingBox() { GeoPosition leftLongBottomLat = mapViewer.convertPointToGeoPosition(new Point2D.Double(getLocation().x, getLocation().y + getHeight())); GeoPosition rigtLongTopLat = mapViewer.convertPointToGeoPosition(new Point2D.Double(getLocation().x + getWidth(), getLocation().y)); boundingBox.setText(MessageFormatter.format(Locale.ENGLISH, NbBundle.getMessage(this.getClass(), "AggTopComponent.boundingBox.text"), leftLongBottomLat.getLongitude(), rigtLongTopLat.getLatitude(), rigtLongTopLat.getLongitude(), leftLongBottomLat.getLatitude())); } public void setLatitude(double lat) { latitude.setText(MessageFormatter.format(Locale.ENGLISH, NbBundle.getMessage(this.getClass(), "AggTopComponent.latitude.text"), lat)); } public void setLongitude(double lon) { longitude.setText(MessageFormatter.format(Locale.ENGLISH, NbBundle.getMessage(this.getClass(), "AggTopComponent.longitude.text"), lon).replaceAll(",", "\\.")); } public void setZoomLevel(int zoomLevel) { this.zoomLevel.setText(MessageFormatter.format(Locale.ENGLISH, NbBundle.getMessage(this.getClass(), "AggTopComponent.zoomLevel.text"), zoomLevel)); } public void setLabelsVisible(boolean labelsVisible) { mapViewer.setLabelsVisible(labelsVisible); } public LayerManager getLayerManager() { return mapViewer.getLayerManager(); } public void addLayer(AbstractLayer<?> layer) { mapViewer.addLayer(layer); } public void removeLayer(AbstractLayer<?> layer) { mapViewer.removeLayer(layer); } public void clear() { mapViewer.removeAllLayers(); } public void setTileFactory(TileFactory tileFactory) { if (tileFactory.getInfo().getMaximumZoomLevel() < mapViewer.getZoom()) { mapViewer.setZoom(tileFactory.getInfo().getMaximumZoomLevel()); } mapViewer.setTileFactory(tileFactory); } public TileFactory getTileFactory() { return mapViewer.getTileFactory(); } public void setStatusBarVisible(boolean visible) { if (this.statusbar.isVisible() != visible) { this.statusbar.setVisible(visible); } } public boolean isStatusBarVisible() { return this.statusbar.isVisible(); } /** * * 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() { statusbar = new javax.swing.JPanel(); filler6 = new javax.swing.Box.Filler(new java.awt.Dimension(2, 0), new java.awt.Dimension(2, 0), new java.awt.Dimension(2, 32767)); jLabel4 = new javax.swing.JLabel(); filler8 = new javax.swing.Box.Filler(new java.awt.Dimension(4, 0), new java.awt.Dimension(4, 0), new java.awt.Dimension(4, 32767)); zoomLevel = new javax.swing.JLabel(); filler9 = new javax.swing.Box.Filler(new java.awt.Dimension(8, 8), new java.awt.Dimension(0, 8), new java.awt.Dimension(8, 222222)); jLabel1 = new javax.swing.JLabel(); filler2 = new javax.swing.Box.Filler(new java.awt.Dimension(4, 0), new java.awt.Dimension(4, 0), new java.awt.Dimension(4, 32767)); latitude = new javax.swing.JLabel(); filler1 = new javax.swing.Box.Filler(new java.awt.Dimension(8, 0), new java.awt.Dimension(8, 0), new java.awt.Dimension(8, 32767)); jLabel2 = new javax.swing.JLabel(); filler3 = new javax.swing.Box.Filler(new java.awt.Dimension(4, 0), new java.awt.Dimension(4, 0), new java.awt.Dimension(4, 32767)); longitude = new javax.swing.JLabel(); filler5 = new javax.swing.Box.Filler(new java.awt.Dimension(8, 0), new java.awt.Dimension(8, 0), new java.awt.Dimension(8, 32767)); jLabel3 = new javax.swing.JLabel(); filler4 = new javax.swing.Box.Filler(new java.awt.Dimension(4, 0), new java.awt.Dimension(4, 0), new java.awt.Dimension(4, 32767)); boundingBox = new javax.swing.JLabel(); filler7 = new javax.swing.Box.Filler(new java.awt.Dimension(2, 0), new java.awt.Dimension(2, 0), new java.awt.Dimension(2, 32767)); mapViewer = new de.fub.agg2graphui.AggContentPanel(); setLayout(new java.awt.BorderLayout()); statusbar.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.LOWERED)); statusbar.setLayout(new javax.swing.BoxLayout(statusbar, javax.swing.BoxLayout.X_AXIS)); statusbar.add(filler6); jLabel4.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N org.openide.awt.Mnemonics.setLocalizedText(jLabel4, org.openide.util.NbBundle.getMessage(AggTopComponent.class, "AggTopComponent.jLabel4.text")); // NOI18N statusbar.add(jLabel4); statusbar.add(filler8); zoomLevel.setFont(new java.awt.Font("Monospaced", 0, 11)); // NOI18N org.openide.awt.Mnemonics.setLocalizedText(zoomLevel, org.openide.util.NbBundle.getMessage(AggTopComponent.class, "AggTopComponent.zoomLevel.text")); // NOI18N zoomLevel.setMaximumSize(new java.awt.Dimension(50, 14)); zoomLevel.setMinimumSize(new java.awt.Dimension(50, 14)); zoomLevel.setPreferredSize(new java.awt.Dimension(50, 14)); statusbar.add(zoomLevel); statusbar.add(filler9); jLabel1.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N org.openide.awt.Mnemonics.setLocalizedText(jLabel1, org.openide.util.NbBundle.getMessage(AggTopComponent.class, "AggTopComponent.jLabel1.text")); // NOI18N statusbar.add(jLabel1); statusbar.add(filler2); latitude.setFont(new java.awt.Font("Monospaced", 0, 11)); // NOI18N org.openide.awt.Mnemonics.setLocalizedText(latitude, org.openide.util.NbBundle.getMessage(AggTopComponent.class, "AggTopComponent.latitude.text")); // NOI18N statusbar.add(latitude); statusbar.add(filler1); jLabel2.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N org.openide.awt.Mnemonics.setLocalizedText(jLabel2, org.openide.util.NbBundle.getMessage(AggTopComponent.class, "AggTopComponent.jLabel2.text")); // NOI18N statusbar.add(jLabel2); statusbar.add(filler3); longitude.setFont(new java.awt.Font("Monospaced", 0, 11)); // NOI18N org.openide.awt.Mnemonics.setLocalizedText(longitude, org.openide.util.NbBundle.getMessage(AggTopComponent.class, "AggTopComponent.longitude.text")); // NOI18N longitude.setMaximumSize(new java.awt.Dimension(150, 14)); statusbar.add(longitude); statusbar.add(filler5); jLabel3.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N org.openide.awt.Mnemonics.setLocalizedText(jLabel3, org.openide.util.NbBundle.getMessage(AggTopComponent.class, "AggTopComponent.jLabel3.text")); // NOI18N statusbar.add(jLabel3); statusbar.add(filler4); boundingBox.setFont(new java.awt.Font("Monospaced", 0, 11)); // NOI18N org.openide.awt.Mnemonics.setLocalizedText(boundingBox, org.openide.util.NbBundle.getMessage(AggTopComponent.class, "AggTopComponent.boundingBox.text")); // NOI18N boundingBox.setMaximumSize(new java.awt.Dimension(32665, 14)); statusbar.add(boundingBox); statusbar.add(filler7); add(statusbar, java.awt.BorderLayout.SOUTH); mapViewer.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(153, 153, 153))); add(mapViewer, java.awt.BorderLayout.CENTER); }// </editor-fold>//GEN-END:initComponents // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JLabel boundingBox; private javax.swing.Box.Filler filler1; private javax.swing.Box.Filler filler2; private javax.swing.Box.Filler filler3; private javax.swing.Box.Filler filler4; private javax.swing.Box.Filler filler5; private javax.swing.Box.Filler filler6; private javax.swing.Box.Filler filler7; private javax.swing.Box.Filler filler8; private javax.swing.Box.Filler filler9; private javax.swing.JLabel jLabel1; private javax.swing.JLabel jLabel2; private javax.swing.JLabel jLabel3; private javax.swing.JLabel jLabel4; private javax.swing.JLabel latitude; private javax.swing.JLabel longitude; private de.fub.agg2graphui.AggContentPanel mapViewer; private javax.swing.JPanel statusbar; private javax.swing.JLabel zoomLevel; // End of variables declaration//GEN-END:variables }