/* * 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.ui; import org.esa.snap.core.dataop.dem.ElevationModelDescriptor; import org.esa.snap.core.dataop.dem.ElevationModelRegistry; import org.esa.snap.core.param.ParamChangeEvent; import org.esa.snap.core.param.ParamChangeListener; import org.esa.snap.core.param.ParamParseException; import org.esa.snap.core.param.ParamValidateException; import org.esa.snap.core.param.Parameter; import org.esa.snap.core.param.editors.RadioButtonEditor; import javax.swing.AbstractButton; import javax.swing.BorderFactory; import javax.swing.ButtonGroup; import javax.swing.JPanel; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; public class DemSelector extends JPanel { private Parameter _paramProductDem; private Parameter _paramExternalDem; private Parameter _paramDem; public DemSelector() { this(null); } public DemSelector(ParamChangeListener paramChangeListener) { createParameter(paramChangeListener); createUI(); updateUIState(); } public boolean isUsingProductDem() { return (Boolean) _paramProductDem.getValue(); } public void setUsingProductDem(final boolean usingProductDem) throws ParamValidateException { _paramProductDem.setValue(usingProductDem); } public boolean isUsingExternalDem() { return (Boolean) _paramExternalDem.getValue(); } public void setUsingExternalDem(final boolean usingExternalDem) throws ParamValidateException { _paramExternalDem.setValue(usingExternalDem); } public String getDemName() { return _paramDem.getValueAsText(); } public void setDemName(String demName) throws ParamValidateException, ParamParseException { _paramDem.setValueAsText(demName); } private void createUI() { this.setLayout(new GridBagLayout()); this.setBorder(BorderFactory.createTitledBorder("Digital Elevation Model (DEM)")); /*I18N*/ final GridBagConstraints gbc = GridBagUtils.createDefaultConstraints(); final ButtonGroup buttonGroup = new ButtonGroup(); buttonGroup.add((AbstractButton) _paramProductDem.getEditor().getComponent()); buttonGroup.add((AbstractButton) _paramExternalDem.getEditor().getComponent()); GridBagUtils.setAttributes(gbc, "insets.top=3, fill=HORIZONTAL"); gbc.gridy++; GridBagUtils.addToPanel(this, _paramProductDem.getEditor().getComponent(), gbc); gbc.gridy++; GridBagUtils.addToPanel(this, _paramExternalDem.getEditor().getComponent(), gbc, "weightx=1"); GridBagUtils.addToPanel(this, _paramDem.getEditor().getComponent(), gbc, "weightx=999"); } private void updateUIState() { _paramDem.setUIEnabled(isUsingExternalDem()); } private void createParameter(final ParamChangeListener delegate) { ParamChangeListener paramChangeListener = new ParamChangeListener() { public void parameterValueChanged(final ParamChangeEvent event) { updateUIState(); if (delegate != null) { delegate.parameterValueChanged(event); } } }; _paramProductDem = new Parameter("useProductDem", Boolean.FALSE); _paramProductDem.getProperties().setLabel("Use elevation from tie-points"); /*I18N*/ _paramProductDem.getProperties().setEditorClass(RadioButtonEditor.class); _paramProductDem.addParamChangeListener(paramChangeListener); _paramExternalDem = new Parameter("useExternalDem", Boolean.TRUE); _paramExternalDem.getProperties().setLabel("Use external DEM"); /*I18N*/ _paramExternalDem.getProperties().setEditorClass(RadioButtonEditor.class); _paramExternalDem.addParamChangeListener(paramChangeListener); final ElevationModelDescriptor[] descriptors = ElevationModelRegistry.getInstance().getAllDescriptors(); final String[] demValueSet = new String[descriptors.length]; for (int i = 0; i < descriptors.length; i++) { demValueSet[i] = descriptors[i].getName(); } _paramDem = new Parameter("dem", ""); _paramDem.getProperties().setLabel("Elevation Model:"); /*I18N*/ _paramDem.getProperties().setValueSetBound(true); if (demValueSet.length != 0) { _paramDem.setValue(demValueSet[0], null); _paramDem.getProperties().setValueSet(demValueSet); } _paramDem.addParamChangeListener(paramChangeListener); } }