private void updateUiState(PropertyChangeEvent evt) { if (WorldMapPaneDataModel.PROPERTY_LAYER.equals(evt.getPropertyName())) { exchangeWorldMapLayer(); } if (WorldMapPaneDataModel.PROPERTY_PRODUCTS.equals(evt.getPropertyName())) { repaint(); } if (WorldMapPaneDataModel.PROPERTY_SELECTED_PRODUCT.equals(evt.getPropertyName()) || WorldMapPaneDataModel.PROPERTY_AUTO_ZOOM_ENABLED.equals(evt.getPropertyName())) { final Product selectedProduct = dataModel.getSelectedProduct(); if (selectedProduct != null && dataModel.isAutoZoomEnabled()) { zoomToProduct(selectedProduct); } else { repaint(); } } if (WorldMapPaneDataModel.PROPERTY_ADDITIONAL_GEO_BOUNDARIES.equals(evt.getPropertyName())) { repaint(); } }
/** * Set the worldmap's scale. * * @param scale the scale. * @deprecated since 4.10.1, use layer canvas for zooming instead */ @Deprecated public void setScale(final float scale) { if (getScale() != scale && scale > 0) { final float oldValue = getScale(); getLayerCanvas().getViewport().setZoomFactor(scale); firePropertyChange("scale", oldValue, scale); } } }
public void zoomAll() { getLayerCanvas().getViewport().zoom(worldMapLayer.getModelBounds()); fireScrolled(); }
this.panSupport = new DefaultPanSupport(layerCanvas); this.zoomListeners = new HashSet<>(); getLayerCanvas().getModel().getViewport().setModelYAxisDown(false); if (overlay == null) { getLayerCanvas().addOverlay(new BoundaryOverlayImpl(dataModel)); } else { getLayerCanvas().addOverlay(overlay); final Layer rootLayer = getLayerCanvas().getLayer(); final Viewport viewport = getLayerCanvas().getViewport(); viewport.setViewBounds(new Rectangle(dimension)); setPreferredSize(dimension); setSize(dimension); setLayout(new BorderLayout()); add(getLayerCanvas(), BorderLayout.CENTER); installLayerCanvasNavigation(getLayerCanvas()); getLayerCanvas().getLayer().getChildren().add(worldMapLayer); zoomAll(); setNavControlVisible(true); addComponentListener(new ComponentAdapter() { @Override public void componentResized(ComponentEvent e) {
public void zoomToProduct(Product product) { if (product == null || product.getSceneGeoCoding() == null) { return; } final GeneralPath[] generalPaths = getGeoBoundaryPaths(product); Rectangle2D modelArea = new Rectangle2D.Double(); final Viewport viewport = getLayerCanvas().getViewport(); for (GeneralPath generalPath : generalPaths) { final Rectangle2D rectangle2D = generalPath.getBounds2D(); if (modelArea.isEmpty()) { if (!viewport.isModelYAxisDown()) { modelArea.setFrame(rectangle2D.getX(), rectangle2D.getMaxY(), rectangle2D.getWidth(), rectangle2D.getHeight()); } modelArea = rectangle2D; } else { modelArea.add(rectangle2D); } } Rectangle2D modelBounds = modelArea.getBounds2D(); modelBounds.setFrame(modelBounds.getX() - 2, modelBounds.getY() - 2, modelBounds.getWidth() + 4, modelBounds.getHeight() + 4); modelBounds = cropToMaxModelBounds(modelBounds); viewport.zoom(modelBounds); fireScrolled(); }
public void initUI() { setLayout(new BorderLayout()); final JPanel mainPane = new JPanel(new BorderLayout(4, 4)); mainPane.setPreferredSize(new Dimension(320, 160)); worldMapDataModel = new WorldMapPaneDataModel(); final WorldMapPane worldMapPane = new WorldMapPane(worldMapDataModel); worldMapPane.setNavControlVisible(true); mainPane.add(worldMapPane, BorderLayout.CENTER); final SnapApp snapApp = SnapApp.getDefault(); snapApp.getProductManager().addListener(new WorldMapProductManagerListener()); snapApp.getSelectionSupport(ProductNode.class).addHandler(new SelectionSupport.Handler<ProductNode>() { @Override public void selectionChange(@NullAllowed ProductNode oldValue, @NullAllowed ProductNode newValue) { if(newValue != null) { setSelectedProduct(newValue.getProduct()); } } }); setProducts(snapApp.getProductManager().getProducts()); setSelectedProduct(snapApp.getSelectedProduct(VIEW)); add(mainPane, BorderLayout.CENTER); }
@Override public void mouseWheelMoved(MouseWheelEvent e) { if (!isEnabled()) { return; } double oldFactor = layerCanvas.getViewport().getZoomFactor(); final int wheelRotation = e.getWheelRotation(); final double newZoomFactor = layerCanvas.getViewport().getZoomFactor() * Math.pow(1.1, wheelRotation); final Rectangle viewBounds = layerCanvas.getViewport().getViewBounds(); final Rectangle2D modelBounds = worldMapLayer.getModelBounds(); final double minZoomFactor = Math.min(viewBounds.getWidth() / modelBounds.getWidth(), viewBounds.getHeight() / modelBounds.getHeight()); layerCanvas.getViewport().setZoomFactor(Math.max(newZoomFactor, minZoomFactor)); if (layerCanvas.getViewport().getZoomFactor() > oldFactor || viewportIsInWorldMapBounds(0, 0, layerCanvas)) { fireScrolled(); return; } layerCanvas.getViewport().setZoomFactor(oldFactor); } }
protected void drawProduct(final Graphics2D g2d, final Product product, final boolean isCurrent) { final GeoCoding geoCoding = product.getSceneGeoCoding(); if (geoCoding == null) { return; } GeneralPath[] boundaryPaths = WorldMapPane.getGeoBoundaryPaths(product); final String text = String.valueOf(product.getRefNo()); final PixelPos textCenter = getProductCenter(product); drawGeoBoundary(g2d, boundaryPaths, isCurrent, text, textCenter); }
private void updateCursor(MouseEvent e) { final boolean cursorOutsideOfSelectionRectangle = !rectangleMap.get(DEFAULT).contains(e.getPoint()) && worldMapPane.getCursor() != cursorMap.get(DEFAULT); if (cursorOutsideOfSelectionRectangle) { worldMapPane.setCursor(cursorMap.get(DEFAULT)); } else { final String[] regionIdentifiers = { MOVE, NORTH, SOUTH, WEST, EAST, NORTH_WEST, NORTH_EAST, SOUTH_WEST, SOUTH_EAST }; for (String region : regionIdentifiers) { boolean cursorIsSet = setCursorWhenContained(cursorMap.get(region), rectangleMap.get(region), e.getPoint()); if (cursorIsSet) { break; } } } }