/*
* 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.preferences.layer;
import com.bc.ceres.binding.Property;
import com.bc.ceres.binding.PropertySet;
import com.bc.ceres.swing.TableLayout;
import com.bc.ceres.swing.binding.BindingContext;
import com.bc.ceres.swing.binding.PropertyEditorRegistry;
import org.esa.snap.core.layer.NoDataLayerType;
import org.esa.snap.rcp.preferences.DefaultConfigController;
import org.esa.snap.rcp.preferences.Preference;
import org.esa.snap.rcp.preferences.PreferenceUtils;
import org.netbeans.spi.options.OptionsPanelController;
import org.openide.util.HelpCtx;
import javax.swing.Box;
import javax.swing.JComponent;
import javax.swing.JPanel;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Insets;
/**
* Panel handling no-data layer preferences. Sub-panel of the "Layer"-panel.
*
* @author thomas
*/
@OptionsPanelController.SubRegistration(location = "LayerPreferences",
displayName = "#Options_DisplayName_LayerNoData",
keywords = "#Options_Keywords_LayerNoData",
keywordsCategory = "Layer",
id = "LayerNoData")
@org.openide.util.NbBundle.Messages({
"Options_DisplayName_LayerNoData=No-Data Layer",
"Options_Keywords_LayerNoData=layer, no-data"
})
public final class NoDataLayerController extends DefaultConfigController {
/**
* Preferences key for the no-data overlay color
*/
public static final String PROPERTY_KEY_NO_DATA_OVERLAY_COLOR = "noDataOverlay.color";
/**
* Preferences key for the no-data overlay transparency
*/
public static final String PROPERTY_KEY_NO_DATA_OVERLAY_TRANSPARENCY = "noDataOverlay.transparency";
protected PropertySet createPropertySet() {
return createPropertySet(new NoDataBean());
}
@Override
protected JPanel createPanel(BindingContext context) {
TableLayout tableLayout = new TableLayout(2);
tableLayout.setTableAnchor(TableLayout.Anchor.NORTHWEST);
tableLayout.setTablePadding(new Insets(4, 10, 0, 0));
tableLayout.setTableFill(TableLayout.Fill.BOTH);
tableLayout.setColumnWeightX(1, 1.0);
JPanel pageUI = new JPanel(tableLayout);
PropertyEditorRegistry registry = PropertyEditorRegistry.getInstance();
Property noDataOverlayColor = context.getPropertySet().getProperty(PROPERTY_KEY_NO_DATA_OVERLAY_COLOR);
Property noDataOverlayTransparency = context.getPropertySet().getProperty(PROPERTY_KEY_NO_DATA_OVERLAY_TRANSPARENCY);
JComponent[] noDataOverlayColorComponents = PreferenceUtils.createColorComponents(noDataOverlayColor);
JComponent[] noDataOverlayTransparencyComponents = registry.findPropertyEditor(noDataOverlayTransparency.getDescriptor()).createComponents(noDataOverlayTransparency.getDescriptor(), context);
pageUI.add(noDataOverlayColorComponents[0]);
pageUI.add(noDataOverlayColorComponents[1]);
pageUI.add(noDataOverlayTransparencyComponents[1]);
pageUI.add(noDataOverlayTransparencyComponents[0]);
pageUI.add(tableLayout.createVerticalSpacer());
JPanel parent = new JPanel(new BorderLayout());
parent.add(pageUI, BorderLayout.CENTER);
parent.add(Box.createHorizontalStrut(100), BorderLayout.EAST);
return parent;
}
@Override
public HelpCtx getHelpCtx() {
return new HelpCtx("layer");
}
@SuppressWarnings("UnusedDeclaration")
static class NoDataBean {
@Preference(label = "No-data overlay colour",
key = PROPERTY_KEY_NO_DATA_OVERLAY_COLOR)
Color noDataOverlayColor = NoDataLayerType.DEFAULT_COLOR;
@Preference(label = "No-data overlay transparency",
key = PROPERTY_KEY_NO_DATA_OVERLAY_TRANSPARENCY,
interval = "[0.0,1.0]")
double noDataOverlayTransparency = 0.3;
}
}