/**
* Copyright (C) 2001-2017 by RapidMiner and the contributors
*
* Complete list of developers available at our web site:
*
* http://rapidminer.com
*
* 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 com.rapidminer.gui.new_plotter.gui.groupingpanel;
import com.rapidminer.gui.new_plotter.configuration.DimensionConfig;
import com.rapidminer.gui.new_plotter.configuration.DimensionConfig.PlotDimension;
import com.rapidminer.gui.new_plotter.configuration.EqualDataFractionGrouping;
import com.rapidminer.gui.new_plotter.configuration.ValueGrouping;
import com.rapidminer.gui.new_plotter.configuration.ValueGrouping.GroupingType;
import com.rapidminer.gui.new_plotter.data.PlotInstance;
import com.rapidminer.gui.tools.ResourceLabel;
import java.awt.GridBagConstraints;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JSpinner;
import javax.swing.SpinnerNumberModel;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
/**
* A configuration Panel for {@link EqualDataFractionGrouping}s.
*
* @author Nils Woehler
*
*/
public class EqualDataFractionCardPanel extends AbstractGroupingCardPanel {
private static final long serialVersionUID = 1L;
protected JSpinner binCountSpinner;
public EqualDataFractionCardPanel(final PlotInstance plotInstance, final PlotDimension dimension) {
super(plotInstance, dimension);
adaptGUI();
}
@Override
protected void createComponents() {
super.createComponents();
{
final JLabel binCountLabel = new ResourceLabel("plotter.configuration_dialog.bin_count");
// create input text field
binCountSpinner = new JSpinner(new SpinnerNumberModel(5, 1, null, 1));
binCountLabel.setLabelFor(binCountSpinner);
binCountSpinner.addChangeListener(new ChangeListener() {
@Override
public void stateChanged(final ChangeEvent e) {
binCountChanged();
}
});
addTwoComponentRow(this, binCountLabel, binCountSpinner);
}
final JPanel spacerPanel = new JPanel();
final GridBagConstraints itemConstraint = new GridBagConstraints();
itemConstraint.fill = GridBagConstraints.BOTH;
itemConstraint.weightx = 1;
itemConstraint.weighty = 1;
itemConstraint.gridwidth = GridBagConstraints.REMAINDER;
this.add(spacerPanel, itemConstraint);
}
private void binCountChanged() {
final DimensionConfig dimensionConfig = getPlotConfiguration().getDimensionConfig(getDimension());
if (dimensionConfig != null) {
final EqualDataFractionGrouping grouping = (EqualDataFractionGrouping) dimensionConfig.getGrouping();
if (grouping != null) {
final int oldBinCount = grouping.getBinCount();
final int newBinCount = (Integer) binCountSpinner.getValue();
if (oldBinCount != newBinCount) {
grouping.setBinCount(newBinCount);
}
}
}
}
@Override
protected void adaptGUI() {
super.adaptGUI();
final DimensionConfig dimensionConfig = getPlotConfiguration().getDimensionConfig(getDimension());
if (dimensionConfig != null) {
final ValueGrouping grouping = dimensionConfig.getGrouping();
if (grouping != null && grouping.getGroupingType() == GroupingType.EQUAL_DATA_FRACTION) {
final EqualDataFractionGrouping equalDataFractionGrouping = (EqualDataFractionGrouping) grouping;
binCountSpinner.setValue(equalDataFractionGrouping.getBinCount());
}
}
}
}