/* * Copyright (C) 2010 Brockmann Consult GmbH (info@brockmann-consult.de) * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the Free * Software Foundation; either version 3 of the License, or (at your option) * any later version. * This program 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 General Public License for * more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, see http://www.gnu.org/licenses/ */ package org.esa.snap.rcp.worldmap; import org.esa.snap.core.datamodel.Product; import org.esa.snap.core.datamodel.ProductManager; import org.esa.snap.core.datamodel.ProductNode; import org.esa.snap.rcp.SnapApp; import org.esa.snap.rcp.util.SelectionSupport; import org.esa.snap.rcp.windows.ToolTopComponent; import org.esa.snap.ui.WorldMapPane; import org.esa.snap.ui.WorldMapPaneDataModel; import org.esa.snap.ui.product.ProductSceneView; import org.netbeans.api.annotations.common.NonNull; import org.netbeans.api.annotations.common.NullAllowed; import org.openide.awt.ActionID; import org.openide.awt.ActionReference; import org.openide.awt.ActionReferences; import org.openide.util.NbBundle; import org.openide.windows.TopComponent; import javax.swing.JPanel; import java.awt.BorderLayout; import java.awt.Dimension; import static org.esa.snap.rcp.SnapApp.SelectionSourceHint.*; @TopComponent.Description( preferredID = "WorldMapTopComponent", iconBase = "org/esa/snap/rcp/icons/WorldMap.gif", persistenceType = TopComponent.PERSISTENCE_ALWAYS //todo define ) @TopComponent.Registration( mode = "navigator", openAtStartup = false, position = 40 ) @ActionID(category = "Window", id = "org.esa.snap.rcp.worldmap.WorldMapTopComponent") @ActionReferences({ @ActionReference(path = "Menu/View/Tool Windows"), @ActionReference(path = "Toolbars/Tool Windows") }) @TopComponent.OpenActionRegistration( displayName = "#CTL_WorldMapTopComponent_Name", preferredID = "WorldMapTopComponent" ) @NbBundle.Messages({ "CTL_WorldMapTopComponent_Name=World Map", "CTL_WorldMapTopComponent_HelpId=showWorldMapWnd" }) /** * The window displaying the world map. * * @author Sabine Embacher * @author Norman Fomferra * @author Marco Peters * @version $Revision$ $Date$ */ public class WorldMapTopComponent extends ToolTopComponent { public static final String ID = WorldMapTopComponent.class.getName(); protected WorldMapPaneDataModel worldMapDataModel; public WorldMapTopComponent() { setDisplayName(Bundle.CTL_WorldMapTopComponent_Name()); initUI(); } 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); } public void setSelectedProduct(Product product) { worldMapDataModel.setSelectedProduct(product); } public Product getSelectedProduct() { return worldMapDataModel.getSelectedProduct(); } public void setProducts(Product[] products) { worldMapDataModel.setProducts(products); } @Override protected void productSceneViewSelected(@NonNull ProductSceneView view) { setSelectedProduct(view.getProduct()); } private class WorldMapProductManagerListener implements ProductManager.Listener { @Override public void productAdded(ProductManager.Event event) { final Product product = event.getProduct(); worldMapDataModel.addProduct(product); setSelectedProduct(product); } @Override public void productRemoved(ProductManager.Event event) { final Product product = event.getProduct(); if (getSelectedProduct() == product) { setSelectedProduct(null); } worldMapDataModel.removeProduct(product); } } }