/*
* 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.mask;
import org.esa.snap.core.datamodel.Mask;
import org.esa.snap.core.datamodel.Product;
import org.esa.snap.core.datamodel.RasterDataNode;
import javax.swing.AbstractButton;
import javax.swing.Action;
import javax.swing.JPanel;
import javax.swing.JTable;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
abstract class MaskForm {
private final MaskTable maskTable;
protected MaskForm(boolean maskManagmentMode, ListSelectionListener selectionListener) {
maskTable = new MaskTable(maskManagmentMode);
maskTable.getSelectionModel().addListSelectionListener(selectionListener);
maskTable.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
@Override
public void valueChanged(ListSelectionEvent e) {
updateState();
}
});
maskTable.getModel().addTableModelListener(new TableModelListener() {
@Override
public void tableChanged(TableModelEvent e) {
updateState();
}
});
maskTable.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(final MouseEvent e) {
if (e.getClickCount() == 2) {
Action action = getDoubleClickAction();
if (action.isEnabled()) {
action.actionPerformed(new ActionEvent(e.getSource(), e.getID(), null));
}
}
}
});
}
public JTable getMaskTable() {
return maskTable;
}
public Action getDoubleClickAction() {
return null;
}
public AbstractButton getHelpButton() {
return null;
}
public void updateState() {
}
public abstract JPanel createContentPanel();
public Product getProduct() {
return maskTable.getProduct();
}
public RasterDataNode getRaster() {
return maskTable.getModel().getVisibleBand();
}
public Mask getSelectedMask() {
return maskTable.getSelectedMask();
}
public Mask[] getSelectedMasks() {
return maskTable.getSelectedMasks();
}
public Mask getMask(int rowIndex) {
return maskTable.getMask(rowIndex);
}
public void addMask(Mask mask) {
maskTable.addMask(mask);
}
public void insertMask(Mask mask, int index) {
maskTable.insertMask(mask, index);
}
public void removeMask(Mask mask) {
maskTable.removeMask(mask);
}
public boolean isInManagementMode() {
return maskTable.isInManagmentMode();
}
public int getSelectedRowCount() {
return maskTable.getSelectedRowCount();
}
public int getSelectedRow() {
return maskTable.getSelectedRow();
}
public void setSelectedRow(int rowIndex) {
maskTable.getSelectionModel().setSelectionInterval(rowIndex, rowIndex);
}
public int getRowCount() {
return maskTable.getRowCount();
}
void reconfigureMaskTable(Product product, RasterDataNode visibleBand) {
maskTable.setProduct(product, visibleBand);
}
void clearMaskTable() {
maskTable.clear();
}
Dimension getTargetMaskSize() {
RasterDataNode raster = getRaster();
if (raster != null) {
return new Dimension(raster.getRasterWidth(), raster.getRasterHeight());
}
Product product = getProduct();
if (product != null) {
return new Dimension(product.getSceneRasterWidth(), product.getSceneRasterHeight());
}
return null;
}
}