package org.esa.snap.rcp.imgfilter; import org.esa.snap.rcp.imgfilter.model.Filter; import org.esa.snap.rcp.imgfilter.model.FilterSet; import javax.swing.JComboBox; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JTabbedPane; import javax.swing.JTextField; import javax.swing.border.EmptyBorder; import java.awt.BorderLayout; /** * A form used too edit and display multiple {@link FilterSet}s arranged in a {@code JTabbedPane}. * * @author Norman */ public class FilterSetsForm extends JPanel implements FilterSetForm.Listener { private final String sourceBandName; private final JTabbedPane tabbedPane; private final JTextField targetBandNameField; private final JComboBox<Integer> iterationCountComboBox; private Filter selectedFilter; public FilterSetsForm(String sourceBandName, final FilterSetForm.Listener selectionListener, FilterSetFileStore filterSetStore, FilterEditor filterEditor, FilterSet[] filterSets) { super(new BorderLayout(4, 4)); setBorder(new EmptyBorder(4, 4, 4, 4)); this.sourceBandName = sourceBandName; tabbedPane = new JTabbedPane(); for (FilterSet filterSet : filterSets) { FilterSetForm filterSetForm = new FilterSetForm(filterSet, filterSetStore, filterEditor); filterSetForm.addListener(selectionListener); filterSetForm.addListener(this); tabbedPane.addTab(filterSet.getName(), filterSetForm); } tabbedPane.addChangeListener(e -> { FilterSetForm filterSetForm = (FilterSetForm) tabbedPane.getSelectedComponent(); if (filterSetForm != null) { Filter selectedFilter1 = filterSetForm.getSelectedFilterModel(); filterSetForm.fireFilterSelected(selectedFilter1); } }); targetBandNameField = new JTextField(10); iterationCountComboBox = new JComboBox<>(new Integer[]{1, 2, 3, 4, 5}); JPanel namePanel = new JPanel(new BorderLayout(2, 2)); namePanel.add(new JLabel("Band name:"), BorderLayout.WEST); namePanel.add(targetBandNameField, BorderLayout.CENTER); namePanel.setToolTipText("The target band name"); JPanel iterPanel = new JPanel(new BorderLayout(2, 2)); iterPanel.add(new JLabel("Number of iterations:"), BorderLayout.WEST); iterPanel.add(iterationCountComboBox, BorderLayout.CENTER); iterPanel.setToolTipText("The number of times the filter will selected be applied to the source band"); JPanel inputPanel = new JPanel(new BorderLayout(2, 2)); inputPanel.add(namePanel, BorderLayout.NORTH); inputPanel.add(iterPanel, BorderLayout.SOUTH); add(tabbedPane, BorderLayout.CENTER); add(inputPanel, BorderLayout.SOUTH); updateBandNameField(); } public Filter getSelectedFilter() { return selectedFilter; } public String getTargetBandName() { return targetBandNameField.getText(); } public int getIterationCount() { return (Integer) iterationCountComboBox.getSelectedItem(); } @Override public void filterSelected(FilterSet filterSet, Filter filter) { if (this.selectedFilter != filter) { this.selectedFilter = filter; updateBandNameField(); } } @Override public void filterChanged(FilterSet filterSet, Filter filter, String propertyName) { if (this.selectedFilter == filter) { updateBandNameField(); } } @Override public void filterAdded(FilterSet filterSet, Filter filter) { } @Override public void filterRemoved(FilterSet filterSet, Filter filter) { } private void updateBandNameField() { if (selectedFilter != null) { targetBandNameField.setText(sourceBandName + "_" + selectedFilter.getShorthand()); targetBandNameField.setEditable(true); } else { targetBandNameField.setText(sourceBandName + "_?"); targetBandNameField.setEditable(false); } } }