/*
* Copyright (C) 2011 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.placemark;
import org.esa.snap.rcp.SnapApp;
import org.esa.snap.ui.UIUtils;
import org.esa.snap.ui.tool.ToolButtonFactory;
import javax.swing.AbstractButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class PlacemarkManagerButtons extends JPanel {
private AbstractButton newButton;
private AbstractButton copyButton;
private AbstractButton editButton;
private AbstractButton removeButton;
private AbstractButton importButton;
private AbstractButton exportButton;
private AbstractButton filterButton;
private AbstractButton exportTableButton;
private AbstractButton zoomToPlacemarkButton;
private AbstractButton transferPlacemarkButton;
public PlacemarkManagerButtons(final PlacemarkManagerTopComponent topComponent) {
super(new GridBagLayout());
newButton = createButton("icons/New24.gif");
newButton.setName("newButton");
final String placemarkLabel = topComponent.getPlacemarkDescriptor().getRoleLabel();
newButton.setToolTipText("Create and add new " + placemarkLabel + "."); /*I18N*/
newButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
topComponent.newPin();
}
});
copyButton = createButton("icons/Copy24.gif");
copyButton.setName("copyButton");
copyButton.setToolTipText("Copy an existing " + placemarkLabel + "."); /*I18N*/
copyButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
topComponent.copyActivePlacemark();
}
});
editButton = createButton("icons/Edit24.gif");
editButton.setName("editButton");
editButton.setToolTipText("Edit selected " + placemarkLabel + "."); /*I18N*/
editButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
topComponent.editActivePin();
}
});
removeButton = createButton("icons/Remove24.gif");
removeButton.setName("removeButton");
removeButton.setToolTipText("Remove selected " + placemarkLabel + "."); /*I18N*/
removeButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(final ActionEvent e) {
topComponent.removeSelectedPins();
}
});
importButton = createButton("icons/Import24.gif");
importButton.setName("importButton");
importButton.setToolTipText("Import all " + placemarkLabel + "s from XML or text file."); /*I18N*/
importButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
topComponent.importPlacemarks(true);
topComponent.updateUIState();
}
});
exportButton = createButton("icons/Export24.gif");
exportButton.setName("exportButton");
exportButton.setToolTipText("Export selected " + placemarkLabel + "s to XML file."); /*I18N*/
exportButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
topComponent.exportPlacemarks();
topComponent.updateUIState();
}
});
filterButton = createButton("icons/Filter24.gif");
filterButton.setName("filterButton");
filterButton.setToolTipText("Filter pixel data to be displayed in table."); /*I18N*/
filterButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
topComponent.applyFilteredGrids();
topComponent.updateUIState();
}
});
exportTableButton = createButton("icons/ExportTable.gif");
exportTableButton.setName("exportTableButton");
exportTableButton.setToolTipText("Export selected data to flat text file."); /*I18N*/
exportTableButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
topComponent.exportPlacemarkDataTable();
topComponent.updateUIState();
}
});
zoomToPlacemarkButton = createButton("icons/ZoomTo24.gif");
zoomToPlacemarkButton.setName("zoomToButton");
zoomToPlacemarkButton.setToolTipText("Zoom to selected " + placemarkLabel + "."); /*I18N*/
zoomToPlacemarkButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
topComponent.zoomToActivePin();
}
});
transferPlacemarkButton = createButton("icons/MultiAssignProducts24.gif");
transferPlacemarkButton.setName("transferButton");
transferPlacemarkButton.setToolTipText("Transfer the selected " + placemarkLabel + "s to other products.");
transferPlacemarkButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
topComponent.transferPlacemarks();
}
});
final AbstractButton helpButton = createButton("icons/Help22.png");
helpButton.setToolTipText("Help."); /*I18N*/
helpButton.setName("helpButton");
helpButton.addActionListener(e -> topComponent.getHelpCtx().display());
final GridBagConstraints gbc = new GridBagConstraints();
gbc.gridy = 1;
gbc.anchor = GridBagConstraints.CENTER;
gbc.fill = GridBagConstraints.NONE;
gbc.weightx = 0.5;
gbc.gridy++;
add(newButton, gbc);
add(copyButton, gbc);
gbc.gridy++;
add(editButton, gbc);
add(removeButton, gbc);
gbc.gridy++;
add(importButton, gbc);
add(exportButton, gbc);
gbc.gridy++;
add(filterButton, gbc);
add(exportTableButton, gbc);
gbc.gridy++;
add(zoomToPlacemarkButton, gbc);
add(transferPlacemarkButton, gbc);
gbc.gridy++;
gbc.fill = GridBagConstraints.VERTICAL;
gbc.weighty = 1.0;
gbc.gridwidth = 2;
add(new JLabel(" "), gbc); // filler
gbc.fill = GridBagConstraints.NONE;
gbc.weighty = 0.0;
gbc.gridx = 1;
gbc.gridy++;
gbc.gridwidth = 1;
add(helpButton, gbc);
}
void updateUIState(final boolean productSelected, int numPins, final int numSelectedPins) {
boolean pinsAvailable = numPins > 0;
boolean hasSelectedPins = numSelectedPins > 0;
boolean hasActivePin = numSelectedPins == 1;
newButton.setEnabled(productSelected);
copyButton.setEnabled(hasActivePin);
editButton.setEnabled(hasActivePin);
removeButton.setEnabled(hasSelectedPins);
zoomToPlacemarkButton.setEnabled(hasActivePin);
transferPlacemarkButton.setEnabled(pinsAvailable && SnapApp.getDefault().getProductManager().getProductCount() > 1);
importButton.setEnabled(productSelected);
exportButton.setEnabled(pinsAvailable);
exportTableButton.setEnabled(pinsAvailable);
filterButton.setEnabled(productSelected);
}
private static AbstractButton createButton(String path) {
return ToolButtonFactory.createButton(UIUtils.loadImageIcon(path), false);
}
}