PolynomialDegreeDialog.java
/**
* VStar: a statistical analysis tool for variable star data.
* Copyright (C) 2010 AAVSO (http://www.aavso.org/)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero 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 Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.aavso.tools.vstar.ui.dialog;
import java.awt.Component;
import java.awt.Container;
import javax.swing.BorderFactory;
import javax.swing.BoxLayout;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JSlider;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import org.aavso.tools.vstar.ui.mediator.Mediator;
import org.aavso.tools.vstar.util.locale.LocaleProps;
/**
* This dialog allows the user to select the polynomial degree to be used for a
* polynomial fit operation.
*/
@SuppressWarnings("serial")
public class PolynomialDegreeDialog extends AbstractOkCancelDialog implements
ChangeListener {
private int degree;
private JLabel degreeLabel;
/**
* Constructor
*
* @param minDegree
* The minimum degree value.
* @param maxDegree
* The maximum degree value.
*/
public PolynomialDegreeDialog(int minDegree, int maxDegree) {
super(LocaleProps.get("POLYNOMIAL_DEGREE_DLG_TITLE"));
degree = (maxDegree - minDegree) / 2;
Container contentPane = this.getContentPane();
JPanel topPane = new JPanel();
topPane.setLayout(new BoxLayout(topPane, BoxLayout.PAGE_AXIS));
topPane.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
topPane.add(createPolynomialDegreePane(minDegree, maxDegree));
// OK, Cancel
topPane.add(createButtonPane());
contentPane.add(topPane);
this.pack();
setLocationRelativeTo(Mediator.getUI().getContentPane());
this.setVisible(true);
}
/**
* Returns the currently selected degree value.
*
* @return the degree
*/
public int getDegree() {
return degree;
}
private Component createPolynomialDegreePane(int minDegree, int maxDegree) {
JPanel panel = new JPanel();
panel.setLayout(new BoxLayout(panel, BoxLayout.LINE_AXIS));
panel.setBorder(BorderFactory.createTitledBorder(LocaleProps
.get("SELECT_POLYNOMIAL_DEGREE_TITLE")));
JSlider degreeSlider = new JSlider(JSlider.HORIZONTAL, minDegree,
maxDegree, degree);
degreeSlider.setMajorTickSpacing((maxDegree - minDegree) / 10);
degreeSlider.setMinorTickSpacing(1);
degreeSlider.setPaintTicks(true);
degreeSlider.setPaintLabels(true);
degreeSlider.addChangeListener(this);
panel.add(degreeSlider);
degreeLabel = new JLabel(degree + "");
degreeLabel.setBorder(BorderFactory.createEtchedBorder());
panel.add(degreeLabel);
return panel;
}
@Override
public void stateChanged(ChangeEvent e) {
JSlider slider = (JSlider) e.getSource();
if (!slider.getValueIsAdjusting()) {
degree = slider.getValue();
degreeLabel.setText(degree + "");
} else {
degreeLabel.setText(slider.getValue() + "");
}
}
/**
* @see org.aavso.tools.vstar.ui.dialog.AbstractOkCancelDialog#cancelAction()
*/
@Override
protected void cancelAction() {
// Nothing to do.
}
/**
* @see org.aavso.tools.vstar.ui.dialog.AbstractOkCancelDialog#okAction()
*/
@Override
protected void okAction() {
// TODO: this should be the base class implementation of okAction().
cancelled = false;
setVisible(false);
dispose();
}
}