package icy.gui.lut; import icy.gui.component.NumberTextField; import icy.gui.dialog.ActionDialog; import icy.gui.dialog.MessageDialog; import icy.image.lut.LUT.LUTChannel; import icy.main.Icy; import icy.sequence.Sequence; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.Insets; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JLabel; public class ScalerBoundsSettingDialog extends ActionDialog { final LUTChannel lutChannel; NumberTextField rangeMinField; NumberTextField rangeMaxField; NumberTextField lowBoundField; NumberTextField highBoundField; private JButton defaultBtn; private JLabel lblMinimum; private JLabel lblMaximum; public ScalerBoundsSettingDialog(LUTChannel lutChannel) { super("Histogram range"); this.lutChannel = lutChannel; initialize(); rangeMinField.setNumericValue(lutChannel.getMinBound()); rangeMaxField.setNumericValue(lutChannel.getMaxBound()); lowBoundField.setNumericValue(lutChannel.getMin()); highBoundField.setNumericValue(lutChannel.getMax()); defaultBtn.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { final LUTChannel lc = ScalerBoundsSettingDialog.this.lutChannel; // use active sequence final Sequence sequence = Icy.getMainInterface().getActiveSequence(); if (sequence != null) { final int ch = lc.getChannel(); if (ch < sequence.getSizeC()) { rangeMinField.setNumericValue(sequence.getChannelTypeMin(ch)); rangeMaxField.setNumericValue(sequence.getChannelTypeMax(ch)); lowBoundField.setNumericValue(sequence.getChannelMin(ch)); highBoundField.setNumericValue(sequence.getChannelMax(ch)); } } } }); setOkAction(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { final double rangeMin = rangeMinField.getNumericValue(); final double rangeMax = rangeMaxField.getNumericValue(); final double lowBound = lowBoundField.getNumericValue(); final double highBound = highBoundField.getNumericValue(); if ((rangeMin >= rangeMax) || (lowBound >= highBound)) { MessageDialog.showDialog("Invalids settings", "The maximum range value should be above the minimum range value", MessageDialog.ERROR_MESSAGE); return; } if ((lowBound < rangeMin) || (highBound > rangeMax)) { MessageDialog.showDialog("Invalids settings", "The view range should be inside the full range", MessageDialog.ERROR_MESSAGE); return; } final LUTChannel lc = ScalerBoundsSettingDialog.this.lutChannel; lc.setMinBound(rangeMin); lc.setMaxBound(rangeMax); lc.setMin(lowBound); lc.setMax(highBound); dispose(); } }); setCloseAfterAction(false); } private void initialize() { GridBagLayout gridBagLayout = new GridBagLayout(); gridBagLayout.columnWidths = new int[] {60, 0, 0, 10, 0}; gridBagLayout.rowHeights = new int[] {0, 23, 0, 0}; gridBagLayout.columnWeights = new double[] {0.0, 1.0, 1.0, 0.0, Double.MIN_VALUE}; gridBagLayout.rowWeights = new double[] {0.0, 0.0, 0.0, Double.MIN_VALUE}; mainPanel.setLayout(gridBagLayout); lblMinimum = new JLabel("Minimum"); GridBagConstraints gbc_lblMinimum = new GridBagConstraints(); gbc_lblMinimum.insets = new Insets(0, 0, 5, 5); gbc_lblMinimum.gridx = 1; gbc_lblMinimum.gridy = 0; mainPanel.add(lblMinimum, gbc_lblMinimum); lblMaximum = new JLabel("Maximum"); GridBagConstraints gbc_lblMaximum = new GridBagConstraints(); gbc_lblMaximum.insets = new Insets(0, 0, 5, 5); gbc_lblMaximum.gridx = 2; gbc_lblMaximum.gridy = 0; mainPanel.add(lblMaximum, gbc_lblMaximum); final JLabel lblRangeMin = new JLabel("Full range"); GridBagConstraints gbc_lblRangeMin = new GridBagConstraints(); gbc_lblRangeMin.anchor = GridBagConstraints.EAST; gbc_lblRangeMin.insets = new Insets(0, 0, 5, 5); gbc_lblRangeMin.gridx = 0; gbc_lblRangeMin.gridy = 1; mainPanel.add(lblRangeMin, gbc_lblRangeMin); rangeMinField = new NumberTextField(); GridBagConstraints gbc_rangeMinField = new GridBagConstraints(); gbc_rangeMinField.insets = new Insets(0, 0, 5, 5); gbc_rangeMinField.fill = GridBagConstraints.HORIZONTAL; gbc_rangeMinField.gridx = 1; gbc_rangeMinField.gridy = 1; mainPanel.add(rangeMinField, gbc_rangeMinField); rangeMinField.setColumns(10); rangeMaxField = new NumberTextField(); GridBagConstraints gbc_rangeMaxField = new GridBagConstraints(); gbc_rangeMaxField.insets = new Insets(0, 0, 5, 5); gbc_rangeMaxField.fill = GridBagConstraints.HORIZONTAL; gbc_rangeMaxField.gridx = 2; gbc_rangeMaxField.gridy = 1; mainPanel.add(rangeMaxField, gbc_rangeMaxField); rangeMaxField.setColumns(10); final JLabel lblBoundMin = new JLabel("View range"); GridBagConstraints gbc_lblBoundMin = new GridBagConstraints(); gbc_lblBoundMin.anchor = GridBagConstraints.EAST; gbc_lblBoundMin.insets = new Insets(0, 0, 0, 5); gbc_lblBoundMin.gridx = 0; gbc_lblBoundMin.gridy = 2; mainPanel.add(lblBoundMin, gbc_lblBoundMin); lowBoundField = new NumberTextField(); GridBagConstraints gbc_lowBoundField = new GridBagConstraints(); gbc_lowBoundField.insets = new Insets(0, 0, 0, 5); gbc_lowBoundField.fill = GridBagConstraints.HORIZONTAL; gbc_lowBoundField.gridx = 1; gbc_lowBoundField.gridy = 2; mainPanel.add(lowBoundField, gbc_lowBoundField); lowBoundField.setColumns(10); highBoundField = new NumberTextField(); GridBagConstraints gbc_highBoundField = new GridBagConstraints(); gbc_highBoundField.insets = new Insets(0, 0, 0, 5); gbc_highBoundField.fill = GridBagConstraints.HORIZONTAL; gbc_highBoundField.gridx = 2; gbc_highBoundField.gridy = 2; mainPanel.add(highBoundField, gbc_highBoundField); highBoundField.setColumns(10); defaultBtn = new JButton("Default"); GridBagConstraints gbc_defaultBtn = new GridBagConstraints(); gbc_defaultBtn.anchor = GridBagConstraints.EAST; gbc_defaultBtn.insets = new Insets(0, 0, 0, 5); gbc_defaultBtn.gridx = 1; gbc_defaultBtn.gridy = 0; buttonPanel.add(defaultBtn, gbc_defaultBtn); } }