/* UnlimitedSpinnerPanel.java created 2008-02-14
*
*/
package org.signalml.app.view.common.components.panels;
import static org.signalml.app.util.i18n.SvarogI18n._;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import javax.swing.BoxLayout;
import javax.swing.ButtonGroup;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JSpinner;
import javax.swing.SpinnerNumberModel;
import org.signalml.util.MinMaxRange;
import org.signalml.util.MinMaxRangeFloat;
import org.signalml.util.MinMaxRangeInteger;
/** TODO it is almost the same as {@link AutoSpinnerPanel}
*
*
* @author Michal Dobaczewski © 2007-2008 CC Otwarte Systemy Komputerowe Sp. z o.o.
*/
public class UnlimitedSpinnerPanel extends JPanel {
private static final long serialVersionUID = 1L;
private boolean compact;
private JRadioButton spinnerRadio;
private JRadioButton unlimitedRadio;
private ButtonGroup buttonGroup;
private JSpinner spinner;
protected UnlimitedSpinnerPanel(boolean compact) {
super();
this.compact = compact;
}
public UnlimitedSpinnerPanel(double value, double min, double max, double step, boolean compact) {
this(compact);
spinner = new JSpinner(new SpinnerNumberModel(value, min, max, step));
commonInit();
}
public UnlimitedSpinnerPanel(float value, float min, float max, float step, boolean compact) {
this(compact);
spinner = new JSpinner(new SpinnerNumberModel(value, min, max, step));
commonInit();
}
public UnlimitedSpinnerPanel(int value, int min, int max, int step, boolean compact) {
this(compact);
spinner = new JSpinner(new SpinnerNumberModel(value, min, max, step));
commonInit();
}
private void commonInit() {
setLayout(new BoxLayout(this, BoxLayout.X_AXIS));
Dimension spinnerDimension;
if (compact) {
spinnerDimension = new Dimension(60,25);
} else {
spinnerDimension = new Dimension(150,25);
}
spinner.setPreferredSize(spinnerDimension);
spinner.setMinimumSize(spinnerDimension);
spinner.setMaximumSize(spinnerDimension);
buttonGroup = new ButtonGroup();
spinnerRadio = new JRadioButton();
if (compact) {
unlimitedRadio = new JRadioButton(_("un."));
} else {
unlimitedRadio = new JRadioButton(_("unlimited"));
}
unlimitedRadio.setFont(unlimitedRadio.getFont().deriveFont(Font.PLAIN, 10));
buttonGroup.add(spinnerRadio);
buttonGroup.add(unlimitedRadio);
spinnerRadio.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
if (e.getStateChange() == ItemEvent.SELECTED) {
spinner.setEnabled(true);
} else {
spinner.setEnabled(false);
}
}
});
add(unlimitedRadio);
add(spinnerRadio);
add(spinner);
spinnerRadio.setSelected(true);
}
protected JSpinner getSpinner() {
return this.spinner;
}
protected JRadioButton getUnlimitedRadio() {
return this.unlimitedRadio;
}
protected JRadioButton getSpinnerRadio() {
return this.spinnerRadio;
}
protected ButtonGroup getButtonGroup() {
return this.buttonGroup;
}
public double getValue() {
return ((Number) spinner.getValue()).doubleValue();
}
public float getFloatValue() {
return ((Number) spinner.getValue()).floatValue();
}
public int getIntegerValue() {
return ((Number) spinner.getValue()).intValue();
}
public void setValue(double value) {
spinner.setValue(value);
}
public void setFloatValue(float value) {
spinner.setValue(value);
}
public void setIntegerValue(int value) {
spinner.setValue(value);
}
public boolean isUnlimited() {
return unlimitedRadio.isSelected();
}
public void setUnlimited(boolean unlimited) {
if (unlimited) {
unlimitedRadio.setSelected(true);
} else {
spinnerRadio.setSelected(true);
}
}
public double getValueWithUnlimited() {
if (unlimitedRadio.isSelected()) {
return MinMaxRange.UNLIMITED;
} else {
return ((Number) spinner.getValue()).doubleValue();
}
}
public float getFloatValueWithUnlimited() {
if (unlimitedRadio.isSelected()) {
return MinMaxRange.UNLIMITED;
} else {
return ((Number) spinner.getValue()).floatValue();
}
}
public int getIntegerValueWithUnlimited() {
if (unlimitedRadio.isSelected()) {
return MinMaxRange.UNLIMITED;
} else {
return ((Number) spinner.getValue()).intValue();
}
}
public void setValueWithUnlimited(double value) {
if (value == MinMaxRange.UNLIMITED) {
unlimitedRadio.setSelected(true);
} else {
spinnerRadio.setSelected(true);
spinner.setValue(value);
}
}
public void setFloatValueWithUnlimited(float value) {
if (value == MinMaxRange.UNLIMITED) {
unlimitedRadio.setSelected(true);
} else {
spinnerRadio.setSelected(true);
spinner.setValue(value);
}
}
public void setIntegerValueWithUnlimited(int value) {
if (value == MinMaxRange.UNLIMITED) {
unlimitedRadio.setSelected(true);
} else {
spinnerRadio.setSelected(true);
spinner.setValue(value);
}
}
public void getMinValue(MinMaxRange range) {
range.setMin(((Number) spinner.getValue()).doubleValue());
range.setMinUnlimited(unlimitedRadio.isSelected());
}
public void setMinValue(MinMaxRange range) {
unlimitedRadio.setSelected(range.isMinUnlimited());
spinner.setValue(range.getMin());
}
public void getMaxValue(MinMaxRange range) {
range.setMax(((Number) spinner.getValue()).doubleValue());
range.setMaxUnlimited(unlimitedRadio.isSelected());
}
public void setMaxValue(MinMaxRange range) {
unlimitedRadio.setSelected(range.isMaxUnlimited());
spinner.setValue(range.getMax());
}
public void getMinValue(MinMaxRangeFloat range) {
range.setMin(((Number) spinner.getValue()).floatValue());
range.setMinUnlimited(unlimitedRadio.isSelected());
}
public void setMinValue(MinMaxRangeFloat range) {
unlimitedRadio.setSelected(range.isMinUnlimited());
spinner.setValue(range.getMin());
}
public void getMaxValue(MinMaxRangeFloat range) {
range.setMax(((Number) spinner.getValue()).floatValue());
range.setMaxUnlimited(unlimitedRadio.isSelected());
}
public void setMaxValue(MinMaxRangeFloat range) {
unlimitedRadio.setSelected(range.isMaxUnlimited());
spinner.setValue(range.getMax());
}
public void getMinValue(MinMaxRangeInteger range) {
range.setMin(((Number) spinner.getValue()).intValue());
range.setMinUnlimited(unlimitedRadio.isSelected());
}
public void setMinValue(MinMaxRangeInteger range) {
unlimitedRadio.setSelected(range.isMinUnlimited());
spinner.setValue(range.getMin());
}
public void getMaxValue(MinMaxRangeInteger range) {
range.setMax(((Number) spinner.getValue()).intValue());
range.setMaxUnlimited(unlimitedRadio.isSelected());
}
public void setMaxValue(MinMaxRangeInteger range) {
unlimitedRadio.setSelected(range.isMaxUnlimited());
spinner.setValue(range.getMax());
}
}