/**
* 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.Component;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.LinearGradientPaint;
import java.awt.MultipleGradientPaint.CycleMethod;
import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.text.DateFormat;
import java.util.Collection;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import javax.swing.AbstractButton;
import javax.swing.Action;
import javax.swing.BorderFactory;
import javax.swing.DefaultComboBoxModel;
import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JColorChooser;
import javax.swing.JComboBox;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;
import javax.swing.JScrollPane;
import javax.swing.ListSelectionModel;
import javax.swing.ScrollPaneConstants;
import javax.swing.SwingUtilities;
import javax.swing.event.PopupMenuEvent;
import javax.swing.event.PopupMenuListener;
import org.jfree.chart.ChartPanel;
import com.rapidminer.datatable.DataTable;
import com.rapidminer.datatable.DataTableExampleSetAdapter;
import com.rapidminer.example.ExampleSet;
import com.rapidminer.gui.new_plotter.ChartConfigurationException;
import com.rapidminer.gui.new_plotter.configuration.DataTableColumn;
import com.rapidminer.gui.new_plotter.configuration.DefaultDimensionConfig;
import com.rapidminer.gui.new_plotter.configuration.DimensionConfig.PlotDimension;
import com.rapidminer.gui.new_plotter.configuration.EqualDataFractionGrouping;
import com.rapidminer.gui.new_plotter.configuration.LegendConfiguration.LegendPosition;
import com.rapidminer.gui.new_plotter.configuration.PlotConfiguration;
import com.rapidminer.gui.new_plotter.configuration.RangeAxisConfig;
import com.rapidminer.gui.new_plotter.configuration.SeriesFormat.StackingMode;
import com.rapidminer.gui.new_plotter.configuration.SeriesFormat.VisualizationType;
import com.rapidminer.gui.new_plotter.configuration.ValueSource;
import com.rapidminer.gui.new_plotter.data.PlotInstance;
import com.rapidminer.gui.new_plotter.engine.jfreechart.JFreeChartPlotEngine;
import com.rapidminer.gui.new_plotter.gui.cellrenderer.ColorListCellRenderer;
import com.rapidminer.gui.new_plotter.gui.cellrenderer.ColorRGBComboBoxCellRenderer;
import com.rapidminer.gui.new_plotter.gui.cellrenderer.ColorSchemeComboBoxRenderer;
import com.rapidminer.gui.new_plotter.listener.PlotConfigurationListener;
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.templates.style.ColorRGB;
import com.rapidminer.gui.new_plotter.templates.style.ColorScheme;
import com.rapidminer.gui.new_plotter.utility.ContinuousColorProvider;
import com.rapidminer.gui.tools.ResourceAction;
import com.rapidminer.gui.tools.ResourceLabel;
import com.rapidminer.gui.tools.SwingTools;
import com.rapidminer.gui.tools.dialogs.ButtonDialog;
import com.rapidminer.gui.tools.dialogs.ConfirmDialog;
import com.rapidminer.repository.IOObjectEntry;
import com.rapidminer.repository.MalformedRepositoryLocationException;
import com.rapidminer.repository.RepositoryException;
import com.rapidminer.repository.RepositoryLocation;
import com.rapidminer.tools.I18N;
import com.rapidminer.tools.math.function.aggregation.AbstractAggregationFunction.AggregationFunctionType;
/**
* @author Nils Woehler
*
*/
public class ColorSchemeDialog extends ButtonDialog implements PlotConfigurationListener {
private class GradientPreview extends JComponent {
private static final long serialVersionUID = 1L;
private LinearGradientPaint gradientPaint;
public static final int WIDTH = 50;
private static final int HEIGHT = 30;
public GradientPreview(LinearGradientPaint paint) {
this.gradientPaint = paint;
this.setSize(new Dimension(WIDTH, HEIGHT));
this.setPreferredSize(new Dimension(WIDTH, HEIGHT));
}
@Override
public void paint(Graphics g) {
Graphics2D g2d = (Graphics2D) g;
if (gradientPaint == null) {
g2d.setPaint(Color.gray);
} else {
g2d.setPaint(gradientPaint);
}
g2d.fillRect(0, 0, getWidth(), getHeight());
}
public void setGradientPaint(LinearGradientPaint gradientPaint) {
this.gradientPaint = gradientPaint;
}
}
private static final long serialVersionUID = 1L;
private JList<Color> colorList;
private JPopupMenu popupMenu;
private JButton addCategoryButton;
private JButton removeSchemeButton;
private JButton removeCategoryColorButton;
private JScrollPane colorListScrollPane;
private JPanel categoryAndGradientConfigPanel;
private JComboBox<Object> colorSchemeComboBox;
private JMenuItem removeMenuItem;
private JMenuItem changeColorMenuItem;
private JButton revertButton;
private JButton saveButton;
private DefaultListModel<Color> nominalColorListModel;
private DefaultComboBoxModel<Color> gradientStartColorComboBoxModel;
private DefaultComboBoxModel<Color> gradientEndColorComboBoxModel;
private DefaultComboBoxModel<Object> colorSchemeComboBoxModel;
private JComboBox<Color> gradientEndColorComboBox;
private JComboBox<Color> gradientStartColorComboBox;
private GradientPreview preview;
private Dimension preferredGradientComboBoxSize = new Dimension(42, 20);
private String initialActiveColorSchemeName;
private Map<String, ColorScheme> initialColorSchemes;
private String currentActiveColorSchemeName;
private Map<String, ColorScheme> currentColorSchemes;
private PlotConfiguration gradientPlotConfig;
private PlotConfiguration nominalPlotConfig;
private boolean adaptingModels;
private JButton renameSchemeButton;
private ChartPanel gradientPreviewPanel;
private JFreeChartPlotEngine nominalPlotter;
private JFreeChartPlotEngine gradientPlotter;
private ChartPanel nominalPreviewPanel;
private PlotConfiguration plotConfig;
private boolean initializing = false;
private JMenuItem moveUpColorMenuItem;
private JMenuItem moveDownColorMenuItem;
/**
* @param key
* @param arguments
*/
public ColorSchemeDialog(Component actionComp, String key, PlotConfiguration plotConfig, Object... arguments) {
super(actionComp != null ? SwingUtilities.getWindowAncestor(actionComp) : null, key, ModalityType.APPLICATION_MODAL,
arguments);
this.plotConfig = plotConfig;
initializing = true;
nominalColorListModel = new DefaultListModel<Color>();
gradientStartColorComboBoxModel = new DefaultComboBoxModel<Color>();
gradientEndColorComboBoxModel = new DefaultComboBoxModel<Color>();
colorSchemeComboBoxModel = new DefaultComboBoxModel<>();
this.setResizable(false);
createPreviewPlotBackend(new JPanel().getBackground(), plotConfig.getActiveColorScheme().getColors().size());
createComponents();
save(plotConfig.getColorSchemes(), plotConfig.getActiveColorScheme().getName());
initializing = false;
adaptPreviewPlots();
setLocationRelativeTo(actionComp);
}
/**
*
*/
private void createComponents() {
// creat popup menus
{
popupMenu = new JPopupMenu();
removeMenuItem = new JMenuItem(
I18N.getGUILabel("plotter.configuration_dialog.color_scheme_dialog.remove_color_menu_item.label"));
removeMenuItem.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
removeSelectedColorAction();
}
});
popupMenu.add(removeMenuItem);
changeColorMenuItem = new JMenuItem(
I18N.getGUILabel("plotter.configuration_dialog.color_scheme_dialog.change_color_menu_item.label"));
changeColorMenuItem.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
replaceSelectedColorAction();
}
});
popupMenu.add(changeColorMenuItem);
popupMenu.addSeparator();
moveUpColorMenuItem = new JMenuItem(
I18N.getGUILabel("plotter.configuration_dialog.color_scheme_dialog.move_up_menu_item.label"));
moveUpColorMenuItem.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
moveSelectedColorUpAction();
}
});
popupMenu.add(moveUpColorMenuItem);
moveDownColorMenuItem = new JMenuItem(
I18N.getGUILabel("plotter.configuration_dialog.color_scheme_dialog.move_down_menu_item.label"));
moveDownColorMenuItem.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
moveSelectedColorDownAction();
}
});
popupMenu.add(moveDownColorMenuItem);
}
JPanel containerPanel = new JPanel(new GridBagLayout());
containerPanel.setPreferredSize(new Dimension(520, 450));
// create containing panel
{
{
JPanel configurePanel = new JPanel(new GridBagLayout());
configurePanel.setPreferredSize(new Dimension(220, 400));
configurePanel.setBorder(BorderFactory.createTitledBorder(I18N
.getGUILabel("plotter.configuration_dialog.color_scheme_dialog.scheme_configuration_border.label")));
// add scheme list panel
{
JPanel schemeComboBoxPanel = createSchemeComboBoxPanel();
// add category choosing panel
GridBagConstraints itemConstraint = new GridBagConstraints();
itemConstraint.fill = GridBagConstraints.BOTH;
itemConstraint.weightx = 1;
itemConstraint.weighty = 1;
itemConstraint.gridwidth = GridBagConstraints.REMAINDER;
itemConstraint.insets = new Insets(2, 2, 2, 5);
configurePanel.add(schemeComboBoxPanel, itemConstraint);
}
{
categoryAndGradientConfigPanel = new JPanel(new GridBagLayout());
// add categories panel
{
JPanel categoryConfigurationPanel = createColorCategoriesPanel();
// add category choosing panel
GridBagConstraints itemConstraint = new GridBagConstraints();
itemConstraint.fill = GridBagConstraints.BOTH;
itemConstraint.weightx = 1;
itemConstraint.weighty = 1;
itemConstraint.insets = new Insets(2, 2, 2, 5);
itemConstraint.gridwidth = GridBagConstraints.REMAINDER;
categoryAndGradientConfigPanel.add(categoryConfigurationPanel, itemConstraint);
}
// add gradient chooser panel
{
JPanel gradientConfigPanel = createGradientConfigurationPanel();
GridBagConstraints itemConstraint = new GridBagConstraints();
itemConstraint.fill = GridBagConstraints.BOTH;
itemConstraint.weightx = 1;
itemConstraint.weighty = 1;
itemConstraint.insets = new Insets(2, 2, 2, 5);
itemConstraint.gridwidth = GridBagConstraints.REMAINDER;
categoryAndGradientConfigPanel.add(gradientConfigPanel, itemConstraint);
}
GridBagConstraints itemConstraint = new GridBagConstraints();
itemConstraint.fill = GridBagConstraints.BOTH;
itemConstraint.weightx = 1;
itemConstraint.weighty = 1;
itemConstraint.gridwidth = GridBagConstraints.REMAINDER;
itemConstraint.insets = new Insets(2, 2, 2, 5);
configurePanel.add(categoryAndGradientConfigPanel, itemConstraint);
}
GridBagConstraints itemConstraint = new GridBagConstraints();
itemConstraint.fill = GridBagConstraints.BOTH;
itemConstraint.weightx = 1;
itemConstraint.weighty = 1;
itemConstraint.gridwidth = GridBagConstraints.RELATIVE;
containerPanel.add(configurePanel, itemConstraint);
}
createPlotPreviewPanel(containerPanel);
}
// create buttons
Collection<AbstractButton> buttons = new LinkedList<AbstractButton>();
buttons.add(makeOkButton());
Action saveAction = new ResourceAction("plotter.configuration_dialog.color_scheme_dialog.save_button") {
private static final long serialVersionUID = 1L;
@Override
public void actionPerformed(ActionEvent e) {
save(currentColorSchemes, currentActiveColorSchemeName);
// set new scheme
plotConfig.setColorSchemes(currentColorSchemes, currentActiveColorSchemeName);
}
};
saveButton = new JButton(saveAction);
buttons.add(saveButton);
saveButton.setEnabled(false);
Action revertAction = new ResourceAction("plotter.configuration_dialog.color_scheme_dialog.revert_button") {
private static final long serialVersionUID = 1L;
@Override
public void actionPerformed(ActionEvent e) {
revert();
}
};
revertButton = new JButton(revertAction);
revertButton.setEnabled(false);
buttons.add(revertButton);
buttons.add(makeCancelButton("plotter.configuration_dialog.color_scheme_dialog.cancel_button"));
layoutDefault(containerPanel, buttons);
}
/**
* @param containerPanel
*/
private void createPlotPreviewPanel(JPanel containerPanel) {
JPanel previewPanel = new JPanel(new GridBagLayout());
previewPanel.setPreferredSize(new Dimension(300, 300));
GridBagConstraints itemConstraint = new GridBagConstraints();
itemConstraint.fill = GridBagConstraints.BOTH;
itemConstraint.weightx = 1;
itemConstraint.weighty = 1;
itemConstraint.gridwidth = GridBagConstraints.REMAINDER;
// nominal value color preview
{
nominalPreviewPanel = nominalPlotter.getChartPanel();
nominalPreviewPanel.setPreferredSize(new Dimension(150, 150));
previewPanel.add(nominalPreviewPanel, itemConstraint);
}
// add gradient preview
{
gradientPreviewPanel = gradientPlotter.getChartPanel();
gradientPreviewPanel.setPreferredSize(new Dimension(150, 150));
previewPanel.add(gradientPreviewPanel, itemConstraint);
}
itemConstraint = new GridBagConstraints();
itemConstraint.fill = GridBagConstraints.BOTH;
itemConstraint.weightx = 1;
itemConstraint.weighty = 1;
itemConstraint.gridwidth = GridBagConstraints.RELATIVE;
containerPanel.add(previewPanel, itemConstraint);
}
/**
* @return
*/
private JPanel createGradientConfigurationPanel() {
// create gradient config panel
JPanel gradientConfigPanel = new JPanel(new GridBagLayout());
gradientConfigPanel.setPreferredSize(new Dimension(100, 50));
GridBagConstraints itemConstraint;
// add gradient label
{
JLabel gradientLabel = new ResourceLabel("plotter.configuration_dialog.color_scheme_dialog.gradient_preview");
itemConstraint = new GridBagConstraints();
itemConstraint.weightx = 1;
itemConstraint.weighty = 1;
itemConstraint.fill = GridBagConstraints.BOTH;
itemConstraint.gridwidth = GridBagConstraints.REMAINDER;
itemConstraint.insets = new Insets(2, 2, 2, 2);
gradientConfigPanel.add(gradientLabel, itemConstraint);
}
// add combobox panel
{
JPanel comboBoxPanel = new JPanel(new GridBagLayout());
// gradient start panel
{
JPanel startGradientPanel = createStartGradientPanel();
itemConstraint = new GridBagConstraints();
itemConstraint.weightx = 1.0;
itemConstraint.gridwidth = GridBagConstraints.RELATIVE;
itemConstraint.anchor = GridBagConstraints.WEST;
itemConstraint.fill = GridBagConstraints.HORIZONTAL;
comboBoxPanel.add(startGradientPanel, itemConstraint);
}
// gradient end panel
{
JPanel endGradientPanel = createEndGradientPanel();
itemConstraint = new GridBagConstraints();
itemConstraint.weightx = 1.0;
itemConstraint.gridwidth = GridBagConstraints.RELATIVE;
itemConstraint.anchor = GridBagConstraints.EAST;
itemConstraint.fill = GridBagConstraints.HORIZONTAL;
comboBoxPanel.add(endGradientPanel, itemConstraint);
}
itemConstraint = new GridBagConstraints();
itemConstraint.weightx = 1;
itemConstraint.weighty = 0.0;
itemConstraint.fill = GridBagConstraints.HORIZONTAL;
itemConstraint.gridwidth = GridBagConstraints.REMAINDER;
itemConstraint.insets = new Insets(2, 2, 2, 2);
gradientConfigPanel.add(comboBoxPanel, itemConstraint);
}
// add 0.0 label
{
JLabel zeroLabel = new JLabel("0");
itemConstraint = new GridBagConstraints();
itemConstraint.weightx = 0;
itemConstraint.weighty = 0;
itemConstraint.fill = GridBagConstraints.NONE;
itemConstraint.insets = new Insets(2, 2, 2, 2);
gradientConfigPanel.add(zeroLabel, itemConstraint);
}
// add gradient preview
{
preview = new GradientPreview(null);
itemConstraint = new GridBagConstraints();
itemConstraint.weightx = 1;
itemConstraint.weighty = 1;
itemConstraint.fill = GridBagConstraints.BOTH;
itemConstraint.insets = new Insets(2, 2, 2, 2);
gradientConfigPanel.add(preview, itemConstraint);
}
// add 1.0 label
{
JLabel zeroLabel = new JLabel("1");
itemConstraint = new GridBagConstraints();
itemConstraint.weightx = 0;
itemConstraint.weighty = 0;
itemConstraint.fill = GridBagConstraints.NONE;
itemConstraint.insets = new Insets(2, 2, 2, 2);
itemConstraint.gridwidth = GridBagConstraints.REMAINDER;
gradientConfigPanel.add(zeroLabel, itemConstraint);
}
return gradientConfigPanel;
}
/**
* @return
*/
private JPanel createEndGradientPanel() {
GridBagConstraints itemConstraint;
JPanel endGradientPanel = new JPanel(new GridBagLayout());
// add gradient end label
JLabel gradientEndLabel = new ResourceLabel("plotter.configuration_dialog.color_scheme_dialog.gradient_end");
{
itemConstraint = new GridBagConstraints();
itemConstraint.weightx = 1.0;
itemConstraint.gridwidth = GridBagConstraints.RELATIVE;
itemConstraint.insets = new Insets(0, 2, 0, 0);
endGradientPanel.add(gradientEndLabel, itemConstraint);
}
// add gradient end color combo box
{
gradientEndColorComboBox = new JComboBox<Color>(gradientEndColorComboBoxModel);
gradientEndLabel.setLabelFor(gradientEndColorComboBox);
gradientEndColorComboBox.setPreferredSize(preferredGradientComboBoxSize);
gradientEndColorComboBox.setRenderer(new ColorRGBComboBoxCellRenderer<>());
gradientEndColorComboBox.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// set gradient end color to current active color scheme
Color color = (Color) gradientEndColorComboBox.getSelectedItem();
if (color != null && !adaptingModels) {
// enable apply and revert button
saveButton.setEnabled(true);
revertButton.setEnabled(true);
getCurrentActiveColorScheme().setGradientEndColor(ColorRGB.convertColorToColorRGB(color));
}
adaptGradientPlot();
calculateGradientPreview();
}
});
itemConstraint = new GridBagConstraints();
itemConstraint.weightx = 1.0;
itemConstraint.gridwidth = GridBagConstraints.REMAINDER; // end row
itemConstraint.insets = new Insets(0, 2, 0, 0);
endGradientPanel.add(gradientEndColorComboBox, itemConstraint);
}
return endGradientPanel;
}
/**
* @return
*/
private JPanel createStartGradientPanel() {
GridBagConstraints itemConstraint;
JPanel startGradientPanel = new JPanel(new GridBagLayout());
// add gradient start label
JLabel gradientStartLabel = new ResourceLabel("plotter.configuration_dialog.color_scheme_dialog.gradient_start");
{
itemConstraint = new GridBagConstraints();
itemConstraint.weightx = 1;
itemConstraint.gridwidth = GridBagConstraints.RELATIVE;
itemConstraint.insets = new Insets(0, 5, 5, 5);
startGradientPanel.add(gradientStartLabel, itemConstraint);
}
// add gradient start color combobox
{
gradientStartColorComboBox = new JComboBox<Color>(gradientStartColorComboBoxModel);
gradientStartLabel.setLabelFor(gradientStartColorComboBox);
gradientStartColorComboBox.setPreferredSize(preferredGradientComboBoxSize);
gradientStartColorComboBox.setRenderer(new ColorRGBComboBoxCellRenderer<>());
gradientStartColorComboBox.setEditable(false);
gradientStartColorComboBox.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// set gradient start color at current active color scheme
Color color = (Color) gradientStartColorComboBox.getSelectedItem();
if (color != null && !adaptingModels) {
// enable apply and revert button
saveButton.setEnabled(true);
revertButton.setEnabled(true);
getCurrentActiveColorScheme().setGradientStartColor(ColorRGB.convertColorToColorRGB(color));
}
adaptGradientPlot();
calculateGradientPreview();
}
});
itemConstraint = new GridBagConstraints();
itemConstraint.weightx = 1.0;
itemConstraint.gridwidth = GridBagConstraints.RELATIVE;
// itemConstraint.fill = GridBagConstraints.HORIZONTAL;
// itemConstraint.insets = new Insets(0, 5, 5, 5);
startGradientPanel.add(gradientStartColorComboBox, itemConstraint);
}
return startGradientPanel;
}
/**
* @return
*/
private JPanel createColorCategoriesPanel() {
JPanel categoryColorsConfigurationPanel = new JPanel(new GridBagLayout());
categoryColorsConfigurationPanel.setPreferredSize(new Dimension(180, 200));
GridBagConstraints itemConstraint = new GridBagConstraints();
JLabel categoryColorsLabel = new ResourceLabel("plotter.configuration_dialog.color_scheme_dialog.category_colors");
{
itemConstraint.fill = GridBagConstraints.HORIZONTAL;
itemConstraint.anchor = GridBagConstraints.WEST;
itemConstraint.gridwidth = GridBagConstraints.RELATIVE;
itemConstraint.insets = new Insets(0, 5, 5, 5);
itemConstraint.weightx = 1.0;
categoryColorsConfigurationPanel.add(categoryColorsLabel, itemConstraint);
}
// add button panel
{
JPanel buttonPanel = new JPanel(new GridBagLayout());
// remove scheme button
{
removeCategoryColorButton = new JButton(new ResourceAction(true,
"plotter.configuration_dialog.color_scheme_dialog.remove_category_color_button") {
private static final long serialVersionUID = 1L;
@Override
public void actionPerformed(ActionEvent e) {
removeSelectedColorAction();
}
});
itemConstraint = new GridBagConstraints();
itemConstraint.gridwidth = GridBagConstraints.RELATIVE;
itemConstraint.fill = GridBagConstraints.NONE;
buttonPanel.add(removeCategoryColorButton, itemConstraint);
}
{
addCategoryButton = new JButton(new ResourceAction(true,
"plotter.configuration_dialog.color_scheme_dialog.add_category_color_button") {
private static final long serialVersionUID = 1L;
@Override
public void actionPerformed(ActionEvent e) {
Color oldColor = Color.white;
Color newSchemeColor = createColorDialog(oldColor);
if (newSchemeColor != null && !newSchemeColor.equals(oldColor)) {
addColorAction(newSchemeColor);
}
}
});
itemConstraint = new GridBagConstraints();
itemConstraint.gridwidth = GridBagConstraints.REMAINDER;
itemConstraint.fill = GridBagConstraints.NONE;
buttonPanel.add(addCategoryButton, itemConstraint);
}
itemConstraint = new GridBagConstraints();
itemConstraint.gridwidth = GridBagConstraints.REMAINDER;
itemConstraint.fill = GridBagConstraints.NONE;
itemConstraint.anchor = GridBagConstraints.EAST;
itemConstraint.insets = new Insets(0, 5, 5, 5);
categoryColorsConfigurationPanel.add(buttonPanel, itemConstraint);
}
{
JPanel categoryListPanel = new JPanel(new GridBagLayout());
// add list of categorie colors
{
colorList = new JList<Color>(nominalColorListModel);
categoryColorsLabel.setLabelFor(colorList);
colorList.setCellRenderer(new ColorListCellRenderer());
colorList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
MouseAdapter ma = new MouseAdapter() {
private void myPopupEvent(MouseEvent e) {
int x = e.getX();
int y = e.getY();
JList<?> list = (JList<?>) e.getSource();
list.setSelectedIndex(list.locationToIndex(e.getPoint()));
Color selectedColor = (Color) list.getSelectedValue();
if (selectedColor == null) {
return;
}
removeMenuItem.setEnabled(nominalColorListModel.getSize() > 2);
popupMenu.show(list, x, y);
}
@Override
public void mousePressed(MouseEvent e) {
if (e.isPopupTrigger()) {
myPopupEvent(e);
}
}
@Override
public void mouseReleased(MouseEvent e) {
if (e.isPopupTrigger()) {
myPopupEvent(e);
}
}
};
colorList.addMouseListener(ma);
colorList.addKeyListener(new KeyListener() {
@Override
public void keyTyped(KeyEvent e) {
return; // Nothing to be done
}
@Override
public void keyReleased(KeyEvent e) {
return; // Nothing to be done
}
@Override
public void keyPressed(KeyEvent e) {
int key = e.getKeyCode();
if (key == KeyEvent.VK_DELETE) {
if (nominalColorListModel.getSize() > 2) {
removeSelectedColorAction();
}
}
if (key == KeyEvent.VK_F2) {
replaceSelectedColorAction();
}
if (key == KeyEvent.VK_UP && SwingTools.isControlOrMetaDown(e)) {
moveSelectedColorUpAction();
}
if (key == KeyEvent.VK_DOWN && SwingTools.isControlOrMetaDown(e)) {
moveSelectedColorDownAction();
}
}
});
colorListScrollPane = new JScrollPane(colorList);
colorListScrollPane.setPreferredSize(new Dimension(170, 200));
colorListScrollPane.setMaximumSize(new Dimension(170, 200));
colorListScrollPane.setMinimumSize(new Dimension(170, 180));
colorListScrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
colorListScrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED);
itemConstraint = new GridBagConstraints();
itemConstraint.fill = GridBagConstraints.BOTH;
itemConstraint.weightx = 0.0;
itemConstraint.weighty = 0.5;
itemConstraint.gridwidth = GridBagConstraints.RELATIVE;
categoryListPanel.add(colorListScrollPane, itemConstraint);
}
// add up/down button panel
{
JPanel upAndDownButtonPanel = new JPanel(new GridBagLayout());
// add up button
{
JButton upButton = new JButton(new ResourceAction(true, "plotter.configuration_dialog.move_color_up") {
private static final long serialVersionUID = 1L;
@Override
public void actionPerformed(ActionEvent e) {
moveSelectedColorUpAction();
}
});
itemConstraint = new GridBagConstraints();
itemConstraint.gridwidth = GridBagConstraints.REMAINDER;
itemConstraint.weightx = 0;
itemConstraint.weighty = 0;
itemConstraint.fill = GridBagConstraints.NONE;
itemConstraint.insets = new Insets(0, 2, 0, 12);
upAndDownButtonPanel.add(upButton, itemConstraint);
}
// add down button
{
JButton downButton = new JButton(
new ResourceAction(true, "plotter.configuration_dialog.move_color_down") {
private static final long serialVersionUID = 1L;
@Override
public void actionPerformed(ActionEvent e) {
moveSelectedColorDownAction();
}
});
itemConstraint = new GridBagConstraints();
itemConstraint.gridwidth = GridBagConstraints.REMAINDER;
itemConstraint.weightx = 0;
itemConstraint.weighty = 0;
itemConstraint.fill = GridBagConstraints.NONE;
itemConstraint.insets = new Insets(0, 2, 0, 12);
upAndDownButtonPanel.add(downButton, itemConstraint);
}
// add spacer panel
{
JPanel spacer = new JPanel();
itemConstraint.gridwidth = GridBagConstraints.REMAINDER;
itemConstraint.weightx = 0;
itemConstraint.weighty = 1;
itemConstraint.fill = GridBagConstraints.VERTICAL;
upAndDownButtonPanel.add(spacer, itemConstraint);
}
itemConstraint = new GridBagConstraints();
itemConstraint.gridwidth = GridBagConstraints.REMAINDER;
itemConstraint.weightx = 1;
itemConstraint.weighty = 1;
itemConstraint.fill = GridBagConstraints.VERTICAL;
categoryListPanel.add(upAndDownButtonPanel, itemConstraint);
}
itemConstraint = new GridBagConstraints();
itemConstraint.gridwidth = GridBagConstraints.REMAINDER;
itemConstraint.weightx = 1;
itemConstraint.weighty = 1;
itemConstraint.fill = GridBagConstraints.BOTH;
categoryColorsConfigurationPanel.add(categoryListPanel, itemConstraint);
}
return categoryColorsConfigurationPanel;
}
/**
* @return
*/
private JPanel createSchemeComboBoxPanel() {
JPanel schemeListPanel = new JPanel(new GridBagLayout());
// create categories configuration panel
{
GridBagConstraints itemConstraint = new GridBagConstraints();
// Add active scheme label
JLabel actviceSchemeLabel = new ResourceLabel("plotter.configuration_dialog.color_scheme_dialog.active_scheme");
{
itemConstraint.fill = GridBagConstraints.HORIZONTAL;
itemConstraint.anchor = GridBagConstraints.WEST;
itemConstraint.gridwidth = GridBagConstraints.RELATIVE;
itemConstraint.insets = new Insets(0, 5, 5, 5);
itemConstraint.weightx = 1.0;
actviceSchemeLabel.setBackground(Color.red);
schemeListPanel.add(actviceSchemeLabel, itemConstraint);
}
// add button panel
{
JPanel buttonPanel = new JPanel(new GridBagLayout());
// rename scheme button
{
renameSchemeButton = new JButton(new ResourceAction(true,
"plotter.configuration_dialog.color_scheme_dialog.rename_scheme_button") {
private static final long serialVersionUID = 1L;
@Override
public void actionPerformed(ActionEvent e) {
String newName = createNameDialog(currentActiveColorSchemeName);
if (newName != null && !newName.equals(currentActiveColorSchemeName)) {
renameColorSchemeAction(newName);
}
}
});
itemConstraint = new GridBagConstraints();
itemConstraint.gridwidth = GridBagConstraints.RELATIVE;
itemConstraint.fill = GridBagConstraints.NONE;
buttonPanel.add(renameSchemeButton, itemConstraint);
}
// remove scheme button
{
removeSchemeButton = new JButton(new ResourceAction(true,
"plotter.configuration_dialog.color_scheme_dialog.remove_scheme_button") {
private static final long serialVersionUID = 1L;
@Override
public void actionPerformed(ActionEvent e) {
ConfirmDialog dialog = new ConfirmDialog(SwingUtilities.getWindowAncestor((Component) e
.getSource()), "plotter.configuration_dialog.confirm_color_scheme_delete",
ConfirmDialog.YES_NO_OPTION, false);
dialog.setLocationRelativeTo((Component) e.getSource());
dialog.setVisible(true);
if (dialog.getReturnOption() == ConfirmDialog.YES_OPTION) {
removeColorSchemeAction((ColorScheme) colorSchemeComboBox.getSelectedItem());
}
}
});
itemConstraint = new GridBagConstraints();
itemConstraint.gridwidth = GridBagConstraints.REMAINDER;
itemConstraint.fill = GridBagConstraints.NONE;
buttonPanel.add(removeSchemeButton, itemConstraint);
}
itemConstraint = new GridBagConstraints();
itemConstraint.gridwidth = GridBagConstraints.REMAINDER;
itemConstraint.fill = GridBagConstraints.NONE;
itemConstraint.anchor = GridBagConstraints.EAST;
itemConstraint.insets = new Insets(0, 5, 5, 5);
schemeListPanel.add(buttonPanel, itemConstraint);
}
{
colorSchemeComboBox = new JComboBox<>(colorSchemeComboBoxModel);
actviceSchemeLabel.setLabelFor(colorSchemeComboBox);
colorSchemeComboBox.setRenderer(new ColorSchemeComboBoxRenderer());
colorSchemeComboBox.addPopupMenuListener(new PopupMenuListener() {
@Override
public void popupMenuWillBecomeVisible(PopupMenuEvent e) {
return;
}
@Override
public void popupMenuWillBecomeInvisible(PopupMenuEvent e) {
Object selectedValue = colorSchemeComboBox.getSelectedItem();
if (selectedValue instanceof ColorScheme) {
ColorScheme selection = (ColorScheme) selectedValue;
if (selection != null) {
if (!currentActiveColorSchemeName.equals(selection.getName())) {
currentActiveColorSchemeName = selection.getName();
adaptModels();
}
}
} else {
String newName = I18N.getGUILabel("plotter.new_color_scheme_name.label");
String suffix = "";
int counter = 1;
while (currentColorSchemes.get(newName + suffix) != null) {
suffix = "_" + counter;
counter++;
}
newName += suffix;
String userSelectedName = createNameDialog(newName);
if (userSelectedName == null) {
colorSchemeComboBox.setSelectedItem(getCurrentActiveColorScheme());
return;
}
addNewColorSchemeAction(userSelectedName);
}
}
@Override
public void popupMenuCanceled(PopupMenuEvent e) {
return;
}
});
itemConstraint = new GridBagConstraints();
itemConstraint.fill = GridBagConstraints.BOTH;
itemConstraint.weightx = 0.0;
itemConstraint.weighty = 0.0;
itemConstraint.gridwidth = GridBagConstraints.REMAINDER;
schemeListPanel.add(colorSchemeComboBox, itemConstraint);
}
}
return schemeListPanel;
}
private void createPreviewPlotBackend(Color background, int groupinBins) {
DataTable dataTable;
// retrieve data for showing example data
try {
ExampleSet exampleSet = (ExampleSet) ((IOObjectEntry) new RepositoryLocation("//Samples/data/Iris")
.locateEntry()).retrieveData(null);
dataTable = new DataTableExampleSetAdapter(exampleSet, null);
} catch (MalformedRepositoryLocationException e) {
return;
} catch (RepositoryException e) {
return;
}
if (dataTable == null || dataTable.getColumnNumber() < 2) {
return;
}
// domain and y column
DataTableColumn domainColumn = new DataTableColumn(dataTable, 0);
DataTableColumn mainColumn = new DataTableColumn(dataTable, 1);
Font titleFont = new Font("Lucida Sans", Font.PLAIN, 12);
// configure gradient preview plot
gradientPlotConfig = new PlotConfiguration(domainColumn);
gradientPlotConfig.setTitleText(I18N
.getGUILabel("plotter.configuration_dialog.color_scheme_dialog.numerical_gradient_preview.label"));
gradientPlotConfig.setFrameBackgroundColor(background);
gradientPlotConfig.getDomainConfigManager().setLabel("");
gradientPlotConfig.setTitleFont(titleFont);
gradientPlotConfig.getLegendConfiguration().setLegendPosition(LegendPosition.NONE);
RangeAxisConfig rangeAxis = new RangeAxisConfig("", gradientPlotConfig);
ValueSource valueSource = new ValueSource(gradientPlotConfig, mainColumn, null, false);
rangeAxis.addValueSource(valueSource, gradientPlotConfig.getAutomaticSeriesFormatForNextValueSource(rangeAxis));
gradientPlotConfig.addRangeAxisConfig(rangeAxis);
DefaultDimensionConfig colorDimension = new DefaultDimensionConfig(gradientPlotConfig, mainColumn,
PlotDimension.COLOR);
gradientPlotConfig.setDimensionConfig(PlotDimension.COLOR, colorDimension);
PlotInstance plotInstance = new PlotInstance(gradientPlotConfig, dataTable);
gradientPlotter = new JFreeChartPlotEngine(plotInstance, true);
// configure nominal preview plot
nominalPlotConfig = new PlotConfiguration(domainColumn);
nominalPlotConfig.setTitleText(I18N
.getGUILabel("plotter.configuration_dialog.color_scheme_dialog.nominal_color_preview.label"));
nominalPlotConfig.setFrameBackgroundColor(background);
nominalPlotConfig.getDomainConfigManager().setLabel("");
nominalPlotConfig.setTitleFont(titleFont);
nominalPlotConfig.getLegendConfiguration().setLegendPosition(LegendPosition.NONE);
EqualDataFractionGrouping edfg;
try {
edfg = new EqualDataFractionGrouping(domainColumn, 4, true, DateFormat.getDateTimeInstance());
} catch (ChartConfigurationException e1) {
return;
}
nominalPlotConfig.getDomainConfigManager().setGrouping(edfg);
RangeAxisConfig nominalRangeAxis = new RangeAxisConfig("", nominalPlotConfig);
ValueSource nominalValueSource = new ValueSource(nominalPlotConfig, mainColumn, AggregationFunctionType.count, true);
nominalValueSource.getSeriesFormat().setSeriesType(VisualizationType.BARS);
nominalValueSource.getSeriesFormat().setStackingMode(StackingMode.RELATIVE);
nominalRangeAxis.addValueSource(nominalValueSource,
nominalPlotConfig.getAutomaticSeriesFormatForNextValueSource(nominalRangeAxis));
nominalPlotConfig.addRangeAxisConfig(nominalRangeAxis);
DefaultDimensionConfig nominalColorDimension = new DefaultDimensionConfig(nominalPlotConfig, mainColumn,
PlotDimension.COLOR);
EqualDataFractionGrouping edfgColor;
try {
edfgColor = new EqualDataFractionGrouping(mainColumn, groupinBins, true, DateFormat.getDateTimeInstance());
} catch (ChartConfigurationException e1) {
return;
}
nominalColorDimension.setGrouping(edfgColor);
nominalPlotConfig.setDimensionConfig(PlotDimension.COLOR, nominalColorDimension);
PlotInstance nominalPlotInstance = new PlotInstance(nominalPlotConfig, dataTable);
nominalPlotter = new JFreeChartPlotEngine(nominalPlotInstance, true);
gradientPlotter.endInitializing();
nominalPlotter.endInitializing();
return;
}
private Color createColorDialog(Color oldColor) {
return JColorChooser.showDialog(this,
I18N.getGUILabel("plotter.configuration_dialog.color_scheme_dialog.new_category_color.label"), oldColor);
}
private String createNameDialog(String oldName) {
String newName = SwingTools.showInputDialog(ColorSchemeDialog.this,
"plotter.configuration_dialog.color_scheme_dialog.rename", oldName);
if (newName != null) {
boolean success = currentColorSchemes.get(newName) == null;
if (newName.equals(oldName)) {
success = true;
}
if (!success) {
SwingTools.showVerySimpleErrorMessage(ColorSchemeDialog.this, "cannot_rename_entry", oldName, newName);
return oldName;
}
return newName;
}
return null;
}
private void calculateGradientPreview() {
Color startColor = (Color) gradientStartColorComboBox.getSelectedItem();
Color endColor = (Color) gradientEndColorComboBox.getSelectedItem();
if (startColor != null && endColor != null) {
int width = preview.getWidth() - 1;
ContinuousColorProvider colorProvider = new ContinuousColorProvider(1, width, startColor, endColor, 255, false);
// create paint
float fractions[] = new float[width];
Color colors[] = new Color[width];
for (int i = 0; i < width; ++i) {
float fraction = i / (width - 1.0f);
double fractionValue = 1 + fraction * (width - 1);
colors[i] = colorProvider.getColorForValue(fractionValue);
fractions[i] = fraction;
}
Point leftPoint = new Point(0, 0);
Point rightPoint = new Point(width, 0);
LinearGradientPaint gradient = new LinearGradientPaint(leftPoint, rightPoint, fractions, colors,
CycleMethod.REFLECT);
preview.setGradientPaint(gradient);
preview.repaint();
}
}
private ColorScheme getCurrentActiveColorScheme() {
return currentColorSchemes.get(currentActiveColorSchemeName);
}
private void moveSelectedColorUpAction() {
Color color = colorList.getSelectedValue();
int oldIndex = colorList.getSelectedIndex();
if (color != null) {
// remove element from list
if (oldIndex == 0) {
return;
}
// remove element
nominalColorListModel.remove(oldIndex);
int newIndex = oldIndex - 1;
// add element at index
nominalColorListModel.add(newIndex, color);
// change index in current active color scheme
getCurrentActiveColorScheme().exchange(oldIndex, newIndex);
adaptNominalPlot();
colorList.setSelectedIndex(newIndex);
// enable save and revert button
saveButton.setEnabled(true);
revertButton.setEnabled(true);
}
}
private void moveSelectedColorDownAction() {
Color color = colorList.getSelectedValue();
int oldIndex = colorList.getSelectedIndex();
if (color != null) {
// remove element from list
if (oldIndex == nominalColorListModel.getSize() - 1) {
return;
}
// remove element
nominalColorListModel.remove(oldIndex);
int newIndex = oldIndex + 1;
// add element at index
nominalColorListModel.add(newIndex, color);
// change index in current active color scheme
getCurrentActiveColorScheme().exchange(oldIndex, newIndex);
adaptNominalPlot();
colorList.setSelectedIndex(newIndex);
// enable save and revert button
saveButton.setEnabled(true);
revertButton.setEnabled(true);
}
}
private void replaceSelectedColorAction() {
Color oldColor = colorList.getSelectedValue();
Color newSchemeColor = createColorDialog(oldColor);
if (newSchemeColor != null && !newSchemeColor.equals(oldColor)) {
replaceColorAction(newSchemeColor, oldColor);
adaptPreviewPlots();
}
}
private void removeSelectedColorAction() {
Color color = colorList.getSelectedValue();
if (color != null) {
// enable save and revert button
saveButton.setEnabled(true);
revertButton.setEnabled(true);
// remove element from list
nominalColorListModel.removeElement(color);
// remove color from current color scheme
getCurrentActiveColorScheme().removeColor(ColorRGB.convertColorToColorRGB(color));
// set gradient start end end color accordingly
Color oldStartingColor = (Color) gradientStartColorComboBox.getSelectedItem();
gradientStartColorComboBoxModel.removeElement(color);
if (!color.equals(oldStartingColor)) {
gradientStartColorComboBox.setSelectedItem(oldStartingColor);
}
gradientStartColorComboBox.setSelectedItem(oldStartingColor);
Color oldEndingColor = (Color) gradientEndColorComboBox.getSelectedItem();
gradientEndColorComboBoxModel.removeElement(color);
if (!color.equals(oldEndingColor)) {
gradientEndColorComboBox.setSelectedItem(oldEndingColor);
}
checkIfButtonsEnabled();
adaptPreviewPlots();
}
}
/**
* @param newSchemeColor
*/
private void addColorAction(Color newSchemeColor) {
// enable apply and revert button
saveButton.setEnabled(true);
revertButton.setEnabled(true);
if (!nominalColorListModel.contains(newSchemeColor)) {
// add new color to color list
nominalColorListModel.addElement(newSchemeColor);
colorList.ensureIndexIsVisible(nominalColorListModel.getSize() - 1);
// add color to current colorScheme
getCurrentActiveColorScheme().addColor(ColorRGB.convertColorToColorRGB(newSchemeColor));
// adapt gradient combo boxes
Color oldStartingColor = (Color) gradientStartColorComboBox.getSelectedItem();
gradientStartColorComboBoxModel.addElement(newSchemeColor);
gradientStartColorComboBox.setSelectedItem(oldStartingColor);
Color oldEndingColor = (Color) gradientEndColorComboBox.getSelectedItem();
gradientEndColorComboBoxModel.addElement(newSchemeColor);
gradientEndColorComboBox.setSelectedItem(oldEndingColor);
checkIfButtonsEnabled();
adaptNominalPlot();
}
}
private void renameColorSchemeAction(String newName) {
saveButton.setEnabled(true);
revertButton.setEnabled(true);
ColorScheme currentActiveScheme = getCurrentActiveColorScheme();
currentColorSchemes.remove(currentActiveColorSchemeName);
currentActiveScheme.setName(newName);
currentColorSchemes.put(newName, currentActiveScheme);
currentActiveColorSchemeName = newName;
int indexOf = colorSchemeComboBoxModel.getIndexOf(currentActiveScheme);
colorSchemeComboBoxModel.removeElement(currentActiveScheme);
colorSchemeComboBoxModel.insertElementAt(currentActiveScheme, indexOf);
colorSchemeComboBoxModel.setSelectedItem(currentActiveScheme);
}
/**
* @param newSchemeColor
*/
private void replaceColorAction(Color newSchemeColor, Color oldSchemeColor) {
// enable apply and revert button
saveButton.setEnabled(true);
revertButton.setEnabled(true);
// add new color to color list
int index = nominalColorListModel.indexOf(oldSchemeColor);
nominalColorListModel.set(index, newSchemeColor);
colorList.ensureIndexIsVisible(index);
// add color to current colorScheme
getCurrentActiveColorScheme().setColor(ColorRGB.convertColorToColorRGB(oldSchemeColor),
ColorRGB.convertColorToColorRGB(newSchemeColor));
// adapt gradient combo boxes
Color oldStartingColor = (Color) gradientStartColorComboBox.getSelectedItem();
gradientStartColorComboBoxModel.removeAllElements();
Color oldEndingColor = (Color) gradientEndColorComboBox.getSelectedItem();
gradientEndColorComboBoxModel.removeAllElements();
int size = nominalColorListModel.getSize();
for (int i = 0; i < size; i++) {
Color color = nominalColorListModel.getElementAt(i);
gradientStartColorComboBoxModel.addElement(color);
gradientEndColorComboBoxModel.addElement(color);
}
gradientStartColorComboBox.setSelectedItem(oldStartingColor);
gradientEndColorComboBox.setSelectedItem(oldEndingColor);
checkIfButtonsEnabled();
}
private void addNewColorSchemeAction(String name) {
saveButton.setEnabled(true);
revertButton.setEnabled(true);
// create new scheme
ColorScheme newColorScheme = gradientPlotConfig.getDefaultColorScheme();
newColorScheme.setName(name);
// add scheme to current color schemes and set active
currentColorSchemes.put(name, newColorScheme);
currentActiveColorSchemeName = name;
adaptModels();
}
private void removeColorSchemeAction(ColorScheme schemeToRemove) {
saveButton.setEnabled(true);
revertButton.setEnabled(true);
currentColorSchemes.remove(schemeToRemove.getName());
colorSchemeComboBoxModel.removeElement(schemeToRemove);
colorSchemeComboBox.setSelectedIndex(0);
ColorScheme selectedItem = (ColorScheme) colorSchemeComboBox.getSelectedItem();
if (selectedItem == null) {
currentActiveColorSchemeName = gradientPlotConfig.getDefaultColorScheme().getName();
} else {
currentActiveColorSchemeName = selectedItem.getName();
}
adaptModels();
}
/**
* Resets the dialog to the initial color schemes and active color scheme
*/
private void revert() {
save(initialColorSchemes, initialActiveColorSchemeName);
}
/**
* Clones parameter and sets them to current and initial color scheme fields
*/
private void save(Map<String, ColorScheme> colorSchemes, String activeSchemeId) {
saveButton.setEnabled(false);
revertButton.setEnabled(false);
Map<String, ColorScheme> initialColorSchemes = new HashMap<String, ColorScheme>();
Map<String, ColorScheme> currentColorSchemes = new HashMap<String, ColorScheme>();
// copy color schemes for cloning
for (ColorScheme scheme : colorSchemes.values()) {
if (scheme != null) {
initialColorSchemes.put(scheme.getName(), scheme.clone());
currentColorSchemes.put(scheme.getName(), scheme.clone());
}
}
this.currentActiveColorSchemeName = activeSchemeId;
this.initialActiveColorSchemeName = activeSchemeId;
this.initialColorSchemes = initialColorSchemes;
this.currentColorSchemes = currentColorSchemes;
adaptModels();
}
@Override
protected void ok() {
// set new scheme
plotConfig.setColorSchemes(currentColorSchemes, currentActiveColorSchemeName);
super.ok();
}
private void adaptModels() {
adaptingModels = true;
// clear all models
nominalColorListModel.clear();
gradientStartColorComboBoxModel.removeAllElements();
gradientEndColorComboBoxModel.removeAllElements();
colorSchemeComboBoxModel.removeAllElements();
// fill color list and start/end combo box models
List<ColorRGB> colors = getCurrentActiveColorScheme().getColors();
for (ColorRGB color : colors) {
Color convertToColor = ColorRGB.convertToColor(color);
nominalColorListModel.addElement(convertToColor);
gradientStartColorComboBoxModel.addElement(convertToColor);
gradientEndColorComboBoxModel.addElement(convertToColor);
}
Color gradientStartColor = ColorRGB.convertToColor(getCurrentActiveColorScheme().getGradientStartColor());
Color gradientEndColor = ColorRGB.convertToColor(getCurrentActiveColorScheme().getGradientEndColor());
gradientStartColorComboBox.setSelectedItem(gradientStartColor);
gradientEndColorComboBox.setSelectedItem(gradientEndColor);
for (ColorScheme colorScheme : currentColorSchemes.values()) {
if (colorScheme != null) {
colorSchemeComboBoxModel.addElement(colorScheme);
}
}
colorSchemeComboBoxModel.addElement(I18N
.getGUILabel("plotter.configuration_dialog.color_scheme_dialog.add_new_scheme.label"));
colorSchemeComboBox.setSelectedItem(getCurrentActiveColorScheme());
calculateGradientPreview();
checkIfButtonsEnabled();
adaptPreviewPlots();
adaptingModels = false;
}
private void adaptNominalPlot() {
if (!initializing) {
// change chart config
EqualDataFractionGrouping edfg = (EqualDataFractionGrouping) nominalPlotConfig.getDimensionConfig(
PlotDimension.COLOR).getGrouping();
edfg.setBinCount(getCurrentActiveColorScheme().getColors().size());
nominalPlotConfig.addColorSchemeAndSetActive(getCurrentActiveColorScheme());
// nominalPlotter.updateChartPanelChart(false);
}
}
private void adaptGradientPlot() {
if (!initializing) {
// change chart config
gradientPlotConfig.addColorSchemeAndSetActive(getCurrentActiveColorScheme());
// gradientPlotter.updateChartPanelChart(false);
}
}
private void adaptPreviewPlots() {
adaptNominalPlot();
adaptGradientPlot();
}
/**
* check if category or scheme button have to be enabled
*/
private void checkIfButtonsEnabled() {
removeCategoryColorButton.setEnabled(nominalColorListModel.getSize() > 2);
boolean enableSchemeRemove = !((ColorScheme) colorSchemeComboBox.getSelectedItem()).getName().equals(
I18N.getGUILabel("plotter.default_color_scheme_name.label"));
removeSchemeButton.setEnabled(colorSchemeComboBoxModel.getSize() > 2 && enableSchemeRemove);
renameSchemeButton.setEnabled(enableSchemeRemove);
}
@Override
public boolean plotConfigurationChanged(PlotConfigurationChangeEvent change) {
PlotConfigurationChangeType type = change.getType();
switch (type) {
case COLOR_SCHEME:
PlotConfiguration plotConfig = change.getSource();
save(plotConfig.getColorSchemes(), plotConfig.getActiveColorScheme().getName());
break;
default:
}
return true;
}
}