/** * 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; import java.awt.Color; import java.awt.Dimension; import java.awt.GridBagConstraints; import java.awt.event.ActionEvent; import javax.swing.JButton; import javax.swing.JColorChooser; import javax.swing.JComboBox; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JSlider; import javax.swing.JTree; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import javax.swing.event.PopupMenuEvent; import javax.swing.event.PopupMenuListener; import com.rapidminer.gui.new_plotter.configuration.DimensionConfig.PlotDimension; import com.rapidminer.gui.new_plotter.configuration.SeriesFormat; import com.rapidminer.gui.new_plotter.configuration.SeriesFormat.FillStyle; import com.rapidminer.gui.new_plotter.configuration.SeriesFormat.StackingMode; import com.rapidminer.gui.new_plotter.data.PlotInstance; import com.rapidminer.gui.new_plotter.gui.cellrenderer.EnumComboBoxCellRenderer; import com.rapidminer.gui.new_plotter.listener.events.PlotConfigurationChangeEvent; import com.rapidminer.gui.new_plotter.listener.events.PlotConfigurationChangeEvent.PlotConfigurationChangeType; import com.rapidminer.gui.new_plotter.listener.events.RangeAxisConfigChangeEvent; import com.rapidminer.gui.new_plotter.listener.events.RangeAxisConfigChangeEvent.RangeAxisConfigChangeType; import com.rapidminer.gui.new_plotter.listener.events.ValueSourceChangeEvent; import com.rapidminer.gui.new_plotter.listener.events.ValueSourceChangeEvent.ValueSourceChangeType; import com.rapidminer.gui.tools.ResourceAction; import com.rapidminer.gui.tools.ResourceLabel; import com.rapidminer.tools.I18N; /** * @author Nils Woehler * */ public class AreaAndBarChartConfigurationPanel extends AbstractTreeSelectionDependentPanel { private static final long serialVersionUID = 1L; private JLabel stackingModeLabel; private JComboBox<StackingMode> stackingModeComboBox; private JLabel itemColorLabel; private JButton itemColorButton; private JLabel fillStyleLabel; private JComboBox<FillStyle> fillStyleComboBox; private JLabel opacityLabel; private JSlider opacitySlider; public AreaAndBarChartConfigurationPanel(boolean smallIcons, JTree plotConfigurationTree, PlotInstance plotInstance) { super(plotConfigurationTree, plotInstance); createComponents(smallIcons); registerAsPlotConfigurationListener(); initComponents(); setPreferredSize(new Dimension(220, 200)); } private void createComponents(boolean smallIcons) { // add fillstyle { // create fill style label fillStyleLabel = new ResourceLabel("plotter.configuration_dialog.fill_style"); // create fill style combobox fillStyleComboBox = new JComboBox<>(FillStyle.values()); fillStyleLabel.setLabelFor(fillStyleComboBox); fillStyleComboBox.setRenderer(new EnumComboBoxCellRenderer<>("plotter.fillstyle")); fillStyleComboBox.setSelectedIndex(0); fillStyleComboBox.addPopupMenuListener(new PopupMenuListener() { @Override public void popupMenuWillBecomeVisible(PopupMenuEvent e) { return; } @Override public void popupMenuWillBecomeInvisible(PopupMenuEvent e) { getSelectedValueSource().getSeriesFormat().setAreaFillStyle( (FillStyle) fillStyleComboBox.getSelectedItem()); } @Override public void popupMenuCanceled(PopupMenuEvent e) { return; } }); // add fill color row addTwoComponentRow(this, fillStyleLabel, fillStyleComboBox); } { // create stacking mode label stackingModeLabel = new ResourceLabel("plotter.configuration_dialog.stacking_mode"); // create stacking mode combo box stackingModeComboBox = new JComboBox<>(StackingMode.values()); stackingModeLabel.setLabelFor(stackingModeComboBox); stackingModeComboBox.setRenderer(new EnumComboBoxCellRenderer<>("plotter.stacking_mode")); stackingModeComboBox.setSelectedIndex(0); stackingModeComboBox.addPopupMenuListener(new PopupMenuListener() { @Override public void popupMenuWillBecomeVisible(PopupMenuEvent e) { return; } @Override public void popupMenuWillBecomeInvisible(PopupMenuEvent e) { getSelectedValueSource().getSeriesFormat().setStackingMode( (StackingMode) stackingModeComboBox.getSelectedItem()); } @Override public void popupMenuCanceled(PopupMenuEvent e) { return; } }); // add stacking mode row addTwoComponentRow(this, stackingModeLabel, stackingModeComboBox); } // add item color { // add item color label itemColorLabel = new ResourceLabel("plotter.configuration_dialog.item_color"); itemColorLabel.setPreferredSize(new Dimension(80, 15)); // create item color button itemColorButton = new JButton(new ResourceAction(smallIcons, "plotter.configuration_dialog.choose_item_color") { private static final long serialVersionUID = 1L; @Override public void actionPerformed(ActionEvent e) { createItemColorDialog(); } }); itemColorLabel.setLabelFor(itemColorButton); addTwoComponentRow(this, itemColorLabel, itemColorButton); } // add opacity slider { // create opacity label opacityLabel = new ResourceLabel("plotter.configuration_dialog.opacity"); // create opacity slider opacitySlider = new JSlider(0, 255, 125); opacityLabel.setLabelFor(opacitySlider); opacitySlider.addChangeListener(new ChangeListener() { @Override public void stateChanged(ChangeEvent e) { JSlider source = (JSlider) e.getSource(); if (!source.getValueIsAdjusting()) { getSelectedValueSource().getSeriesFormat().setOpacity(source.getValue()); } } }); // add opacity slider addTwoComponentRow(this, opacityLabel, opacitySlider); } // fill space with JPanel GridBagConstraints itemConstraint = new GridBagConstraints(); itemConstraint.fill = GridBagConstraints.BOTH; itemConstraint.weightx = 1; itemConstraint.weighty = 1; itemConstraint.gridwidth = GridBagConstraints.REMAINDER; this.add(new JPanel(), itemConstraint); } private void initComponents() { adaptGUI(); } private void createItemColorDialog() { if (getSelectedValueSource() != null) { Color itemColor = getSelectedValueSource().getSeriesFormat().getItemColor(); Color newItemColor = JColorChooser.showDialog(this, I18N.getGUILabel("plotter.configuration_dialog.choose_color.label"), itemColor); if (newItemColor != null && !(newItemColor.equals(itemColor))) { getSelectedValueSource().getSeriesFormat().setItemColor(newItemColor); } } } private void opacityChanged(Integer integer) { opacitySlider.setValue(integer); } private void fillStyleSelectionChanged(FillStyle fillStyle) { fillStyleComboBox.setSelectedItem(fillStyle); } private void stackingModeSelectionChanged(StackingMode stackingMode) { stackingModeComboBox.setSelectedItem(stackingMode); } @Override protected void adaptGUI() { if (getSelectedValueSource() != null) { SeriesFormat format = getSelectedValueSource().getSeriesFormat(); opacityChanged(format.getOpacity()); fillStyleSelectionChanged(format.getAreaFillStyle()); stackingModeSelectionChanged(format.getStackingMode()); } } @Override public boolean plotConfigurationChanged(PlotConfigurationChangeEvent change) { PlotConfigurationChangeType type = change.getType(); if (type == PlotConfigurationChangeType.RANGE_AXIS_CONFIG_CHANGED) { RangeAxisConfigChangeEvent rangeAxisConfigChange = change.getRangeAxisConfigChange(); if (rangeAxisConfigChange.getType() == RangeAxisConfigChangeType.VALUE_SOURCE_CHANGED) { ValueSourceChangeEvent valueSourceChange = rangeAxisConfigChange.getValueSourceChange(); if (valueSourceChange.getType() == ValueSourceChangeType.SERIES_FORMAT_CHANGED) { adaptGUI(); } if (valueSourceChange.getType() == ValueSourceChangeType.USES_GROUPING) { adaptGUI(); } } } if (type == PlotConfigurationChangeType.DIMENSION_CONFIG_ADDED) { if (change.getDimension() == PlotDimension.COLOR) { adaptGUI(); } } if (type == PlotConfigurationChangeType.DIMENSION_CONFIG_REMOVED) { if (change.getDimension() == PlotDimension.COLOR) { adaptGUI(); } } if (type == PlotConfigurationChangeType.META_CHANGE) { processPlotConfigurationMetaChange(change); } return true; } }