/*
* 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.layermanager.editors;
import com.bc.ceres.binding.PropertyDescriptor;
import com.bc.ceres.binding.ValueRange;
import com.bc.ceres.swing.binding.BindingContext;
import com.bc.ceres.swing.binding.PropertyEditorRegistry;
import com.bc.ceres.swing.binding.internal.RangeEditor;
import org.esa.snap.core.layer.GraticuleLayerType;
import org.esa.snap.ui.layer.AbstractLayerConfigurationEditor;
import java.awt.Color;
/**
* Editor for graticule layer.
*
* @author Marco Zuehlke
* @version $Revision$ $Date$
* @since BEAM 4.6
*/
public class GraticuleLayerEditor extends AbstractLayerConfigurationEditor {
@Override
protected void addEditablePropertyDescriptors() {
PropertyDescriptor vd0 = new PropertyDescriptor(GraticuleLayerType.PROPERTY_NAME_RES_AUTO, Boolean.class);
vd0.setDefaultValue(GraticuleLayerType.DEFAULT_RES_AUTO);
vd0.setDisplayName("Compute latitude and longitude steps");
vd0.setDefaultConverter();
addPropertyDescriptor(vd0);
PropertyDescriptor vd1 = new PropertyDescriptor(GraticuleLayerType.PROPERTY_NAME_RES_PIXELS, Integer.class);
vd1.setDefaultValue(GraticuleLayerType.DEFAULT_RES_PIXELS);
vd1.setValueRange(new ValueRange(16, 512));
vd1.setDisplayName("Average grid size in pixels");
vd1.setDefaultConverter();
addPropertyDescriptor(vd1);
PropertyDescriptor vd2 = new PropertyDescriptor(GraticuleLayerType.PROPERTY_NAME_RES_LAT, Double.class);
vd2.setDefaultValue(GraticuleLayerType.DEFAULT_RES_LAT);
vd2.setValueRange(new ValueRange(0.01, 90.00));
vd2.setDisplayName("Latitude step (dec. degree)");
vd2.setDefaultConverter();
addPropertyDescriptor(vd2);
PropertyDescriptor vd3 = new PropertyDescriptor(GraticuleLayerType.PROPERTY_NAME_RES_LON, Double.class);
vd3.setDefaultValue(GraticuleLayerType.DEFAULT_RES_LON);
vd3.setValueRange(new ValueRange(0.01, 180.00));
vd3.setDisplayName("Longitude step (dec. degree)");
vd3.setDefaultConverter();
addPropertyDescriptor(vd3);
PropertyDescriptor vd4 = new PropertyDescriptor(GraticuleLayerType.PROPERTY_NAME_LINE_COLOR, Color.class);
vd4.setDefaultValue(GraticuleLayerType.DEFAULT_LINE_COLOR);
vd4.setDisplayName("Line colour");
vd4.setDefaultConverter();
addPropertyDescriptor(vd4);
PropertyDescriptor vd5 = new PropertyDescriptor(GraticuleLayerType.PROPERTY_NAME_LINE_WIDTH, Double.class);
vd5.setDefaultValue(GraticuleLayerType.DEFAULT_LINE_WIDTH);
vd5.setDisplayName("Line width");
vd5.setDefaultConverter();
addPropertyDescriptor(vd5);
final PropertyEditorRegistry propertyEditorRegistry = PropertyEditorRegistry.getInstance();
PropertyDescriptor vd6 = new PropertyDescriptor(GraticuleLayerType.PROPERTY_NAME_LINE_TRANSPARENCY, Double.class);
vd6.setDefaultValue(GraticuleLayerType.DEFAULT_LINE_TRANSPARENCY);
vd6.setValueRange(new ValueRange(0, 1));
vd6.setDisplayName("Line transparency");
vd6.setDefaultConverter();
vd6.setAttribute("propertyEditor", propertyEditorRegistry.getPropertyEditor(RangeEditor.class.getName()));
addPropertyDescriptor(vd6);
PropertyDescriptor vd7 = new PropertyDescriptor(GraticuleLayerType.PROPERTY_NAME_TEXT_ENABLED, Boolean.class);
vd7.setDefaultValue(GraticuleLayerType.DEFAULT_TEXT_ENABLED);
vd7.setDisplayName("Show text labels");
vd7.setDefaultConverter();
addPropertyDescriptor(vd7);
PropertyDescriptor vd8 = new PropertyDescriptor(GraticuleLayerType.PROPERTY_NAME_TEXT_FG_COLOR, Color.class);
vd8.setDefaultValue(GraticuleLayerType.DEFAULT_TEXT_FG_COLOR);
vd8.setDisplayName("Text foreground colour");
vd8.setDefaultConverter();
addPropertyDescriptor(vd8);
PropertyDescriptor vd9 = new PropertyDescriptor(GraticuleLayerType.PROPERTY_NAME_TEXT_BG_COLOR, Color.class);
vd9.setDefaultValue(GraticuleLayerType.DEFAULT_TEXT_BG_COLOR);
vd9.setDisplayName("Text background colour");
vd9.setDefaultConverter();
addPropertyDescriptor(vd9);
PropertyDescriptor vd10 = new PropertyDescriptor(GraticuleLayerType.PROPERTY_NAME_TEXT_BG_TRANSPARENCY, Double.class);
vd10.setDefaultValue(GraticuleLayerType.DEFAULT_TEXT_BG_TRANSPARENCY);
vd10.setValueRange(new ValueRange(0, 1));
vd10.setDisplayName("Text background transparency");
vd10.setDefaultConverter();
vd10.setAttribute("propertyEditor", propertyEditorRegistry.getPropertyEditor(RangeEditor.class.getName()));
addPropertyDescriptor(vd10);
BindingContext bindingContext = getBindingContext();
boolean resAuto = (Boolean) bindingContext.getPropertySet().getValue(
GraticuleLayerType.PROPERTY_NAME_RES_AUTO);
bindingContext.bindEnabledState(GraticuleLayerType.PROPERTY_NAME_RES_PIXELS, resAuto,
GraticuleLayerType.PROPERTY_NAME_RES_AUTO, resAuto);
bindingContext.bindEnabledState(GraticuleLayerType.PROPERTY_NAME_RES_LAT, !resAuto,
GraticuleLayerType.PROPERTY_NAME_RES_AUTO, resAuto);
bindingContext.bindEnabledState(GraticuleLayerType.PROPERTY_NAME_RES_LON, !resAuto,
GraticuleLayerType.PROPERTY_NAME_RES_AUTO, resAuto);
boolean textEnabled = (Boolean) bindingContext.getPropertySet().getValue(
GraticuleLayerType.PROPERTY_NAME_TEXT_ENABLED);
bindingContext.bindEnabledState(GraticuleLayerType.PROPERTY_NAME_TEXT_FG_COLOR, textEnabled,
GraticuleLayerType.PROPERTY_NAME_TEXT_ENABLED, textEnabled);
bindingContext.bindEnabledState(GraticuleLayerType.PROPERTY_NAME_TEXT_BG_COLOR, textEnabled,
GraticuleLayerType.PROPERTY_NAME_TEXT_ENABLED, textEnabled);
bindingContext.bindEnabledState(GraticuleLayerType.PROPERTY_NAME_TEXT_BG_TRANSPARENCY, textEnabled,
GraticuleLayerType.PROPERTY_NAME_TEXT_ENABLED, textEnabled);
}
}