Refactor SimulationPlotDialog to generic PlotDialog
This commit is contained in:
		
							parent
							
								
									f21dd55452
								
							
						
					
					
						commit
						3e00f31558
					
				@ -0,0 +1,188 @@
 | 
				
			|||||||
 | 
					package info.openrocket.swing.gui.plot;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import info.openrocket.core.l10n.Translator;
 | 
				
			||||||
 | 
					import info.openrocket.core.preferences.ApplicationPreferences;
 | 
				
			||||||
 | 
					import info.openrocket.core.simulation.DataBranch;
 | 
				
			||||||
 | 
					import info.openrocket.core.simulation.DataType;
 | 
				
			||||||
 | 
					import info.openrocket.core.startup.Application;
 | 
				
			||||||
 | 
					import info.openrocket.swing.gui.components.StyledLabel;
 | 
				
			||||||
 | 
					import info.openrocket.swing.gui.util.FileHelper;
 | 
				
			||||||
 | 
					import info.openrocket.swing.gui.util.GUIUtil;
 | 
				
			||||||
 | 
					import info.openrocket.swing.gui.util.Icons;
 | 
				
			||||||
 | 
					import info.openrocket.swing.gui.util.SwingPreferences;
 | 
				
			||||||
 | 
					import info.openrocket.swing.gui.widgets.SaveFileChooser;
 | 
				
			||||||
 | 
					import net.miginfocom.swing.MigLayout;
 | 
				
			||||||
 | 
					import org.jfree.chart.ChartPanel;
 | 
				
			||||||
 | 
					import org.jfree.chart.ChartUtils;
 | 
				
			||||||
 | 
					import org.jfree.chart.JFreeChart;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import javax.swing.JButton;
 | 
				
			||||||
 | 
					import javax.swing.JCheckBox;
 | 
				
			||||||
 | 
					import javax.swing.JDialog;
 | 
				
			||||||
 | 
					import javax.swing.JFileChooser;
 | 
				
			||||||
 | 
					import javax.swing.JLabel;
 | 
				
			||||||
 | 
					import javax.swing.JPanel;
 | 
				
			||||||
 | 
					import java.awt.Window;
 | 
				
			||||||
 | 
					import java.awt.event.ActionEvent;
 | 
				
			||||||
 | 
					import java.awt.event.ActionListener;
 | 
				
			||||||
 | 
					import java.awt.event.InputEvent;
 | 
				
			||||||
 | 
					import java.io.File;
 | 
				
			||||||
 | 
					import java.util.List;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public abstract class PlotDialog<T extends DataType, B extends DataBranch<T>, C extends PlotConfiguration<T, B>,
 | 
				
			||||||
 | 
							P extends Plot<T, B, C>> extends JDialog {
 | 
				
			||||||
 | 
						protected static final Translator trans = Application.getTranslator();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						public PlotDialog(Window parent, String name, P plot, C config, List<B> allBranches, boolean initialShowPoints) {
 | 
				
			||||||
 | 
							super(parent, name);
 | 
				
			||||||
 | 
							this.setModalityType(ModalityType.DOCUMENT_MODAL);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							// Create the dialog
 | 
				
			||||||
 | 
							JPanel panel = new JPanel(new MigLayout("fill, hidemode 3","[]","[grow][]"));
 | 
				
			||||||
 | 
							this.add(panel);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							final ChartPanel chartPanel = new SimulationChart(plot.getJFreeChart());
 | 
				
			||||||
 | 
							final JFreeChart jChart = plot.getJFreeChart();
 | 
				
			||||||
 | 
							panel.add(chartPanel, "grow, wrap 20lp");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							// Ensures normal aspect-ratio of chart elements when resizing the panel
 | 
				
			||||||
 | 
							chartPanel.setMinimumDrawWidth(0);
 | 
				
			||||||
 | 
							chartPanel.setMaximumDrawWidth(Integer.MAX_VALUE);
 | 
				
			||||||
 | 
							chartPanel.setMinimumDrawHeight(0);
 | 
				
			||||||
 | 
							chartPanel.setMaximumDrawHeight(Integer.MAX_VALUE);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							//// Description text
 | 
				
			||||||
 | 
							JLabel label = new StyledLabel(trans.get("PlotDialog.lbl.Chart"), -2);
 | 
				
			||||||
 | 
							panel.add(label, "wrap");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							// Add X axis warnings
 | 
				
			||||||
 | 
							addXAxisWarningMessage(panel, config);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							//// Show data points
 | 
				
			||||||
 | 
							final JCheckBox checkData = new JCheckBox(trans.get("PlotDialog.CheckBox.Showdatapoints"));
 | 
				
			||||||
 | 
							checkData.setSelected(initialShowPoints);
 | 
				
			||||||
 | 
							checkData.addActionListener(new ActionListener() {
 | 
				
			||||||
 | 
								@Override
 | 
				
			||||||
 | 
								public void actionPerformed(ActionEvent e) {
 | 
				
			||||||
 | 
									boolean show = checkData.isSelected();
 | 
				
			||||||
 | 
									Application.getPreferences().putBoolean(ApplicationPreferences.PLOT_SHOW_POINTS, show);
 | 
				
			||||||
 | 
									plot.setShowPoints(show);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							});
 | 
				
			||||||
 | 
							panel.add(checkData, "split, left");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							// Show errors checkbox
 | 
				
			||||||
 | 
							showErrorsCheckbox(panel, plot);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							// Add series selection box
 | 
				
			||||||
 | 
							addSeriesSelectionBox(panel, plot, allBranches);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							//// Zoom in button
 | 
				
			||||||
 | 
							JButton button = new JButton(Icons.ZOOM_IN);
 | 
				
			||||||
 | 
							button.addActionListener(new ActionListener() {
 | 
				
			||||||
 | 
								@Override
 | 
				
			||||||
 | 
								public void actionPerformed(ActionEvent e) {
 | 
				
			||||||
 | 
									if ((e.getModifiers() & InputEvent.ALT_MASK) == InputEvent.ALT_MASK) {
 | 
				
			||||||
 | 
										chartPanel.actionPerformed(new ActionEvent(chartPanel, ActionEvent.ACTION_FIRST, ChartPanel.ZOOM_IN_DOMAIN_COMMAND));
 | 
				
			||||||
 | 
									} else {
 | 
				
			||||||
 | 
										chartPanel.actionPerformed(new ActionEvent(chartPanel, ActionEvent.ACTION_FIRST, ChartPanel.ZOOM_IN_BOTH_COMMAND));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							});
 | 
				
			||||||
 | 
							panel.add(button, "gapleft rel");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							//// Reset Zoom button.
 | 
				
			||||||
 | 
							button = new JButton(Icons.ZOOM_RESET);
 | 
				
			||||||
 | 
							button.addActionListener(new ActionListener() {
 | 
				
			||||||
 | 
								@Override
 | 
				
			||||||
 | 
								public void actionPerformed(ActionEvent e) {
 | 
				
			||||||
 | 
									chartPanel.actionPerformed(new ActionEvent(chartPanel, ActionEvent.ACTION_FIRST, ChartPanel.ZOOM_RESET_BOTH_COMMAND));
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							});
 | 
				
			||||||
 | 
							panel.add(button, "gapleft rel");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							//// Zoom out button
 | 
				
			||||||
 | 
							button = new JButton(Icons.ZOOM_OUT);
 | 
				
			||||||
 | 
							button.addActionListener(new ActionListener() {
 | 
				
			||||||
 | 
								@Override
 | 
				
			||||||
 | 
								public void actionPerformed(ActionEvent e) {
 | 
				
			||||||
 | 
									if ((e.getModifiers() & InputEvent.ALT_MASK) == InputEvent.ALT_MASK) {
 | 
				
			||||||
 | 
										chartPanel.actionPerformed(new ActionEvent(chartPanel, ActionEvent.ACTION_FIRST, ChartPanel.ZOOM_OUT_DOMAIN_COMMAND));
 | 
				
			||||||
 | 
									} else {
 | 
				
			||||||
 | 
										chartPanel.actionPerformed(new ActionEvent(chartPanel, ActionEvent.ACTION_FIRST, ChartPanel.ZOOM_OUT_BOTH_COMMAND));
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							});
 | 
				
			||||||
 | 
							panel.add(button, "gapleft rel");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							//// Print chart button
 | 
				
			||||||
 | 
							button = new JButton(trans.get("PlotDialog.btn.exportImage"));
 | 
				
			||||||
 | 
							button.addActionListener(new ActionListener() {
 | 
				
			||||||
 | 
								@Override
 | 
				
			||||||
 | 
								public void actionPerformed(ActionEvent e) {
 | 
				
			||||||
 | 
									doPNGExport(chartPanel,jChart);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							});
 | 
				
			||||||
 | 
							panel.add(button, "gapleft rel");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							//// Close button
 | 
				
			||||||
 | 
							button = new JButton(trans.get("dlg.but.close"));
 | 
				
			||||||
 | 
							button.addActionListener(new ActionListener() {
 | 
				
			||||||
 | 
								@Override
 | 
				
			||||||
 | 
								public void actionPerformed(ActionEvent e) {
 | 
				
			||||||
 | 
									PlotDialog.this.dispose();
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							});
 | 
				
			||||||
 | 
							panel.add(button, "gapbefore push, right");
 | 
				
			||||||
 | 
							this.setLocationByPlatform(true);
 | 
				
			||||||
 | 
							this.pack();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							GUIUtil.setDisposableDialogOptions(this, button);
 | 
				
			||||||
 | 
							GUIUtil.rememberWindowSize(this);
 | 
				
			||||||
 | 
							this.setLocationByPlatform(true);
 | 
				
			||||||
 | 
							GUIUtil.rememberWindowPosition(this);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						protected void addXAxisWarningMessage(JPanel panel, C config) {
 | 
				
			||||||
 | 
							// Default implementation does nothing
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						protected void showErrorsCheckbox(JPanel panel, P plot) {
 | 
				
			||||||
 | 
							// Default implementation does nothing
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						protected void addSeriesSelectionBox(JPanel panel, P plot, List<B> allBranches) {
 | 
				
			||||||
 | 
							// Default implementation does nothing
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						private boolean doPNGExport(ChartPanel chartPanel, JFreeChart chart){
 | 
				
			||||||
 | 
							JFileChooser chooser = new SaveFileChooser();
 | 
				
			||||||
 | 
							chooser.setAcceptAllFileFilterUsed(false);
 | 
				
			||||||
 | 
							chooser.setFileFilter(FileHelper.PNG_FILTER);
 | 
				
			||||||
 | 
							chooser.setCurrentDirectory(((SwingPreferences) Application.getPreferences()).getDefaultDirectory());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							//// Ensures No Problems When Choosing File
 | 
				
			||||||
 | 
							if (chooser.showSaveDialog(this) != JFileChooser.APPROVE_OPTION)
 | 
				
			||||||
 | 
								return false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							File file = chooser.getSelectedFile();
 | 
				
			||||||
 | 
							if (file == null)
 | 
				
			||||||
 | 
								return false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							file = FileHelper.forceExtension(file, "png");
 | 
				
			||||||
 | 
							if (!FileHelper.confirmWrite(file, this)) {
 | 
				
			||||||
 | 
								return false;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							//// Uses JFreeChart Built In PNG Export Method
 | 
				
			||||||
 | 
							try{
 | 
				
			||||||
 | 
								ChartUtils.saveChartAsPNG(file, chart, chartPanel.getWidth(), chartPanel.getHeight());
 | 
				
			||||||
 | 
							} catch(Exception e){
 | 
				
			||||||
 | 
								return false;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							return true;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -4,126 +4,108 @@ import java.awt.Color;
 | 
				
			|||||||
import java.awt.Window;
 | 
					import java.awt.Window;
 | 
				
			||||||
import java.awt.event.ActionEvent;
 | 
					import java.awt.event.ActionEvent;
 | 
				
			||||||
import java.awt.event.ActionListener;
 | 
					import java.awt.event.ActionListener;
 | 
				
			||||||
import java.awt.event.InputEvent;
 | 
					 | 
				
			||||||
import java.awt.event.ItemEvent;
 | 
					import java.awt.event.ItemEvent;
 | 
				
			||||||
import java.awt.event.ItemListener;
 | 
					import java.awt.event.ItemListener;
 | 
				
			||||||
import java.io.File;
 | 
					 | 
				
			||||||
import java.util.ArrayList;
 | 
					import java.util.ArrayList;
 | 
				
			||||||
 | 
					import java.util.List;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import javax.swing.JButton;
 | 
					 | 
				
			||||||
import javax.swing.JCheckBox;
 | 
					import javax.swing.JCheckBox;
 | 
				
			||||||
import javax.swing.JComboBox;
 | 
					import javax.swing.JComboBox;
 | 
				
			||||||
import javax.swing.JDialog;
 | 
					 | 
				
			||||||
import javax.swing.JFileChooser;
 | 
					 | 
				
			||||||
import javax.swing.JLabel;
 | 
					import javax.swing.JLabel;
 | 
				
			||||||
import javax.swing.JPanel;
 | 
					import javax.swing.JPanel;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import info.openrocket.core.document.Simulation;
 | 
					import info.openrocket.core.document.Simulation;
 | 
				
			||||||
import info.openrocket.core.l10n.Translator;
 | 
					import info.openrocket.core.l10n.Translator;
 | 
				
			||||||
import info.openrocket.core.preferences.ApplicationPreferences;
 | 
					import info.openrocket.core.preferences.ApplicationPreferences;
 | 
				
			||||||
 | 
					import info.openrocket.core.simulation.FlightDataBranch;
 | 
				
			||||||
import info.openrocket.core.simulation.FlightDataType;
 | 
					import info.openrocket.core.simulation.FlightDataType;
 | 
				
			||||||
import info.openrocket.core.startup.Application;
 | 
					import info.openrocket.core.startup.Application;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import net.miginfocom.swing.MigLayout;
 | 
					 | 
				
			||||||
import info.openrocket.swing.gui.components.StyledLabel;
 | 
					import info.openrocket.swing.gui.components.StyledLabel;
 | 
				
			||||||
import info.openrocket.swing.gui.util.FileHelper;
 | 
					 | 
				
			||||||
import info.openrocket.swing.gui.util.GUIUtil;
 | 
					import info.openrocket.swing.gui.util.GUIUtil;
 | 
				
			||||||
import info.openrocket.swing.gui.util.Icons;
 | 
					 | 
				
			||||||
import info.openrocket.swing.gui.util.SwingPreferences;
 | 
					 | 
				
			||||||
import info.openrocket.swing.gui.theme.UITheme;
 | 
					import info.openrocket.swing.gui.theme.UITheme;
 | 
				
			||||||
import info.openrocket.swing.gui.widgets.SaveFileChooser;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import org.jfree.chart.ChartPanel;
 | 
					 | 
				
			||||||
import org.jfree.chart.ChartUtils;
 | 
					 | 
				
			||||||
import org.jfree.chart.JFreeChart;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Dialog that shows a plot of a simulation results based on user options.
 | 
					 * Dialog that shows a plot of a simulation results based on user options.
 | 
				
			||||||
 * 
 | 
					 * 
 | 
				
			||||||
 * @author Sampo Niskanen <sampo.niskanen@iki.fi>
 | 
					 * @author Sampo Niskanen <sampo.niskanen@iki.fi>
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
public class SimulationPlotDialog extends JDialog {
 | 
					public class SimulationPlotDialog extends PlotDialog<FlightDataType, FlightDataBranch, SimulationPlotConfiguration,
 | 
				
			||||||
 | 
							SimulationPlot> {
 | 
				
			||||||
	private static final Translator trans = Application.getTranslator();
 | 
						private static final Translator trans = Application.getTranslator();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						private final Simulation simulation;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	private static Color darkErrorColor;
 | 
						private static Color darkErrorColor;
 | 
				
			||||||
	private final JCheckBox checkErrors;
 | 
						private JCheckBox checkErrors;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	static {
 | 
						static {
 | 
				
			||||||
		initColors();
 | 
							initColors();
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	private SimulationPlotDialog(Window parent, Simulation simulation, SimulationPlotConfiguration config) {
 | 
						private SimulationPlotDialog(Window parent, Simulation simulation, SimulationPlotConfiguration config,
 | 
				
			||||||
		//// Flight data plot
 | 
													 SimulationPlot plot, boolean initialShowPoints) {
 | 
				
			||||||
		super(parent, simulation.getName());
 | 
							super(parent, simulation.getName(), plot, config, simulation.getSimulatedData().getBranches(), initialShowPoints);
 | 
				
			||||||
		this.setModalityType(ModalityType.DOCUMENT_MODAL);
 | 
							this.simulation = simulation;
 | 
				
			||||||
		
 | 
							this.checkErrors.setVisible(this.simulation.hasErrors());
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * Static method that shows a plot with the specified parameters.
 | 
				
			||||||
 | 
						 *
 | 
				
			||||||
 | 
						 * @param parent		the parent window, which will be blocked.
 | 
				
			||||||
 | 
						 * @param simulation	the simulation to plot.
 | 
				
			||||||
 | 
						 * @param config		the configuration of the plot.
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						public static SimulationPlotDialog getPlot(Window parent, Simulation simulation, SimulationPlotConfiguration config) {
 | 
				
			||||||
		final boolean initialShowPoints = Application.getPreferences().getBoolean(ApplicationPreferences.PLOT_SHOW_POINTS, false);
 | 
							final boolean initialShowPoints = Application.getPreferences().getBoolean(ApplicationPreferences.PLOT_SHOW_POINTS, false);
 | 
				
			||||||
		final SimulationPlot myPlot = SimulationPlot.create(simulation, config, initialShowPoints);
 | 
							final SimulationPlot plot = SimulationPlot.create(simulation, config, initialShowPoints);
 | 
				
			||||||
		
 | 
					 | 
				
			||||||
		// Create the dialog
 | 
					 | 
				
			||||||
		JPanel panel = new JPanel(new MigLayout("fill, hidemode 3","[]","[grow][]"));
 | 
					 | 
				
			||||||
		this.add(panel);
 | 
					 | 
				
			||||||
		
 | 
					 | 
				
			||||||
		final ChartPanel chartPanel = new SimulationChart(myPlot.getJFreeChart());
 | 
					 | 
				
			||||||
		final JFreeChart jChart = myPlot.getJFreeChart();
 | 
					 | 
				
			||||||
		panel.add(chartPanel, "grow, wrap 20lp");
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
		// Ensures normal aspect-ratio of chart elements when resizing the panel
 | 
							return new SimulationPlotDialog(parent, simulation, config, plot, initialShowPoints);
 | 
				
			||||||
		chartPanel.setMinimumDrawWidth(0);
 | 
						}
 | 
				
			||||||
		chartPanel.setMaximumDrawWidth(Integer.MAX_VALUE);
 | 
					 | 
				
			||||||
		chartPanel.setMinimumDrawHeight(0);
 | 
					 | 
				
			||||||
		chartPanel.setMaximumDrawHeight(Integer.MAX_VALUE);
 | 
					 | 
				
			||||||
		
 | 
					 | 
				
			||||||
		//// Description text
 | 
					 | 
				
			||||||
		JLabel label = new StyledLabel(trans.get("PlotDialog.lbl.Chart"), -2);
 | 
					 | 
				
			||||||
		panel.add(label, "wrap");
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						@Override
 | 
				
			||||||
 | 
						protected void addXAxisWarningMessage(JPanel panel, SimulationPlotConfiguration config) {
 | 
				
			||||||
		// Add warning if X axis type is not time
 | 
							// Add warning if X axis type is not time
 | 
				
			||||||
		if (config.getDomainAxisType() != FlightDataType.TYPE_TIME) {
 | 
							if (config.getDomainAxisType() != FlightDataType.TYPE_TIME) {
 | 
				
			||||||
			JLabel msg = new StyledLabel(trans.get("PlotDialog.lbl.timeSeriesWarning"), -2);
 | 
								JLabel msg = new StyledLabel(trans.get("PlotDialog.lbl.timeSeriesWarning"), -2);
 | 
				
			||||||
			msg.setForeground(darkErrorColor);
 | 
								msg.setForeground(darkErrorColor);
 | 
				
			||||||
			panel.add(msg, "wrap");
 | 
								panel.add(msg, "wrap");
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		
 | 
						}
 | 
				
			||||||
		//// Show data points
 | 
					 | 
				
			||||||
		final JCheckBox checkData = new JCheckBox(trans.get("PlotDialog.CheckBox.Showdatapoints"));
 | 
					 | 
				
			||||||
		checkData.setSelected(initialShowPoints);
 | 
					 | 
				
			||||||
		checkData.addActionListener(new ActionListener() {
 | 
					 | 
				
			||||||
			@Override
 | 
					 | 
				
			||||||
			public void actionPerformed(ActionEvent e) {
 | 
					 | 
				
			||||||
				boolean show = checkData.isSelected();
 | 
					 | 
				
			||||||
				Application.getPreferences().putBoolean(ApplicationPreferences.PLOT_SHOW_POINTS, show);
 | 
					 | 
				
			||||||
				myPlot.setShowPoints(show);
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		});
 | 
					 | 
				
			||||||
		panel.add(checkData, "split, left");
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						@Override
 | 
				
			||||||
 | 
						protected void showErrorsCheckbox(JPanel panel, SimulationPlot plot) {
 | 
				
			||||||
		//// Show errors if any
 | 
							//// Show errors if any
 | 
				
			||||||
		//// Always enable 'show errors' initially; make user turn it off for themselves
 | 
							//// Always enable 'show errors' initially; make user turn it off for themselves
 | 
				
			||||||
		checkErrors = new JCheckBox(trans.get("PlotDialog.CheckBox.ShowErrors"));
 | 
							this.checkErrors = new JCheckBox(trans.get("PlotDialog.CheckBox.ShowErrors"));
 | 
				
			||||||
		checkErrors.setSelected(true);
 | 
							this.checkErrors.setSelected(true);
 | 
				
			||||||
		checkErrors.addActionListener(new ActionListener() {
 | 
							this.checkErrors.addActionListener(new ActionListener() {
 | 
				
			||||||
			@Override
 | 
								@Override
 | 
				
			||||||
			public void actionPerformed(ActionEvent e) {
 | 
								public void actionPerformed(ActionEvent e) {
 | 
				
			||||||
				myPlot.setShowErrors(checkErrors.isSelected());
 | 
									plot.setShowErrors(checkErrors.isSelected());
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		});
 | 
							});
 | 
				
			||||||
		panel.add(checkErrors, "split, left");
 | 
							panel.add(this.checkErrors, "split, left");
 | 
				
			||||||
		checkErrors.setVisible(simulation.hasErrors());
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		//// Add series selection box
 | 
						@Override
 | 
				
			||||||
 | 
						protected void addSeriesSelectionBox(JPanel panel, SimulationPlot plot, List<FlightDataBranch> allBranches) {
 | 
				
			||||||
		ArrayList<String> stages = new ArrayList<>();
 | 
							ArrayList<String> stages = new ArrayList<>();
 | 
				
			||||||
		stages.add(trans.get("PlotDialog.StageDropDown.allStages"));
 | 
							stages.add(trans.get("PlotDialog.StageDropDown.allStages"));
 | 
				
			||||||
		stages.addAll(Util.generateSeriesLabels(simulation.getSimulatedData().getBranches()));
 | 
							stages.addAll(Util.generateSeriesLabels(allBranches));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		final JComboBox<String> stageSelection = new JComboBox<>(stages.toArray(new String[0]));
 | 
							final JComboBox<String> stageSelection = new JComboBox<>(stages.toArray(new String[0]));
 | 
				
			||||||
		stageSelection.addItemListener(new ItemListener() {
 | 
							stageSelection.addItemListener(new ItemListener() {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			@Override
 | 
								@Override
 | 
				
			||||||
			public void itemStateChanged(ItemEvent e) {
 | 
								public void itemStateChanged(ItemEvent e) {
 | 
				
			||||||
 | 
									if (simulation == null) {
 | 
				
			||||||
 | 
										return;
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
				int selectedStage = stageSelection.getSelectedIndex() - 1;
 | 
									int selectedStage = stageSelection.getSelectedIndex() - 1;
 | 
				
			||||||
				checkErrors.setEnabled(selectedStage == -1 ? simulation.hasErrors() : simulation.hasErrors(selectedStage));
 | 
									checkErrors.setEnabled(selectedStage == -1 ? simulation.hasErrors() : simulation.hasErrors(selectedStage));
 | 
				
			||||||
				myPlot.setShowBranch(selectedStage);
 | 
									plot.setShowBranch(selectedStage);
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		});
 | 
							});
 | 
				
			||||||
@ -131,73 +113,6 @@ public class SimulationPlotDialog extends JDialog {
 | 
				
			|||||||
			// Only show the combo box if there are at least 3 entries (ie, "All", "Main", and one other one)
 | 
								// Only show the combo box if there are at least 3 entries (ie, "All", "Main", and one other one)
 | 
				
			||||||
			panel.add(stageSelection, "gapleft rel");
 | 
								panel.add(stageSelection, "gapleft rel");
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		
 | 
					 | 
				
			||||||
		//// Zoom in button
 | 
					 | 
				
			||||||
		JButton button = new JButton(Icons.ZOOM_IN);
 | 
					 | 
				
			||||||
		button.addActionListener(new ActionListener() {
 | 
					 | 
				
			||||||
			@Override
 | 
					 | 
				
			||||||
			public void actionPerformed(ActionEvent e) {
 | 
					 | 
				
			||||||
				if ((e.getModifiers() & InputEvent.ALT_MASK) == InputEvent.ALT_MASK) {
 | 
					 | 
				
			||||||
					chartPanel.actionPerformed(new ActionEvent(chartPanel, ActionEvent.ACTION_FIRST, ChartPanel.ZOOM_IN_DOMAIN_COMMAND));
 | 
					 | 
				
			||||||
				} else {
 | 
					 | 
				
			||||||
					chartPanel.actionPerformed(new ActionEvent(chartPanel, ActionEvent.ACTION_FIRST, ChartPanel.ZOOM_IN_BOTH_COMMAND));
 | 
					 | 
				
			||||||
					
 | 
					 | 
				
			||||||
				}
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		});
 | 
					 | 
				
			||||||
		panel.add(button, "gapleft rel");
 | 
					 | 
				
			||||||
		
 | 
					 | 
				
			||||||
		//// Reset Zoom button.
 | 
					 | 
				
			||||||
		button = new JButton(Icons.ZOOM_RESET);
 | 
					 | 
				
			||||||
		button.addActionListener(new ActionListener() {
 | 
					 | 
				
			||||||
			@Override
 | 
					 | 
				
			||||||
			public void actionPerformed(ActionEvent e) {
 | 
					 | 
				
			||||||
				chartPanel.actionPerformed(new ActionEvent(chartPanel, ActionEvent.ACTION_FIRST, ChartPanel.ZOOM_RESET_BOTH_COMMAND));
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		});
 | 
					 | 
				
			||||||
		panel.add(button, "gapleft rel");
 | 
					 | 
				
			||||||
		
 | 
					 | 
				
			||||||
		
 | 
					 | 
				
			||||||
		//// Zoom out button
 | 
					 | 
				
			||||||
		button = new JButton(Icons.ZOOM_OUT);
 | 
					 | 
				
			||||||
		button.addActionListener(new ActionListener() {
 | 
					 | 
				
			||||||
			@Override
 | 
					 | 
				
			||||||
			public void actionPerformed(ActionEvent e) {
 | 
					 | 
				
			||||||
				if ((e.getModifiers() & InputEvent.ALT_MASK) == InputEvent.ALT_MASK) {
 | 
					 | 
				
			||||||
					chartPanel.actionPerformed(new ActionEvent(chartPanel, ActionEvent.ACTION_FIRST, ChartPanel.ZOOM_OUT_DOMAIN_COMMAND));
 | 
					 | 
				
			||||||
				} else {
 | 
					 | 
				
			||||||
					chartPanel.actionPerformed(new ActionEvent(chartPanel, ActionEvent.ACTION_FIRST, ChartPanel.ZOOM_OUT_BOTH_COMMAND));
 | 
					 | 
				
			||||||
				}
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		});
 | 
					 | 
				
			||||||
		panel.add(button, "gapleft rel");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		//// Print chart button
 | 
					 | 
				
			||||||
		button = new JButton(trans.get("PlotDialog.btn.exportImage"));
 | 
					 | 
				
			||||||
		button.addActionListener(new ActionListener() {
 | 
					 | 
				
			||||||
			@Override
 | 
					 | 
				
			||||||
			public void actionPerformed(ActionEvent e) {
 | 
					 | 
				
			||||||
				doPNGExport(chartPanel,jChart);
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		});
 | 
					 | 
				
			||||||
		panel.add(button, "gapleft rel");
 | 
					 | 
				
			||||||
		
 | 
					 | 
				
			||||||
		//// Close button
 | 
					 | 
				
			||||||
		button = new JButton(trans.get("dlg.but.close"));
 | 
					 | 
				
			||||||
		button.addActionListener(new ActionListener() {
 | 
					 | 
				
			||||||
			@Override
 | 
					 | 
				
			||||||
			public void actionPerformed(ActionEvent e) {
 | 
					 | 
				
			||||||
				SimulationPlotDialog.this.dispose();
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		});
 | 
					 | 
				
			||||||
		panel.add(button, "gapbefore push, right");
 | 
					 | 
				
			||||||
		this.setLocationByPlatform(true);
 | 
					 | 
				
			||||||
		this.pack();
 | 
					 | 
				
			||||||
		
 | 
					 | 
				
			||||||
		GUIUtil.setDisposableDialogOptions(this, button);
 | 
					 | 
				
			||||||
		GUIUtil.rememberWindowSize(this);
 | 
					 | 
				
			||||||
		this.setLocationByPlatform(true);
 | 
					 | 
				
			||||||
		GUIUtil.rememberWindowPosition(this);
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	private static void initColors() {
 | 
						private static void initColors() {
 | 
				
			||||||
@ -208,46 +123,4 @@ public class SimulationPlotDialog extends JDialog {
 | 
				
			|||||||
	private static void updateColors() {
 | 
						private static void updateColors() {
 | 
				
			||||||
		darkErrorColor = GUIUtil.getUITheme().getDarkErrorColor();
 | 
							darkErrorColor = GUIUtil.getUITheme().getDarkErrorColor();
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					 | 
				
			||||||
	private boolean doPNGExport(ChartPanel chartPanel, JFreeChart chart){
 | 
					 | 
				
			||||||
		JFileChooser chooser = new SaveFileChooser();
 | 
					 | 
				
			||||||
		chooser.setAcceptAllFileFilterUsed(false);
 | 
					 | 
				
			||||||
		chooser.setFileFilter(FileHelper.PNG_FILTER);
 | 
					 | 
				
			||||||
		chooser.setCurrentDirectory(((SwingPreferences) Application.getPreferences()).getDefaultDirectory());
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		//// Ensures No Problems When Choosing File
 | 
					 | 
				
			||||||
		if (chooser.showSaveDialog(this) != JFileChooser.APPROVE_OPTION)
 | 
					 | 
				
			||||||
			return false;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		File file = chooser.getSelectedFile();
 | 
					 | 
				
			||||||
		if (file == null)
 | 
					 | 
				
			||||||
			return false;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		file = FileHelper.forceExtension(file, "png");
 | 
					 | 
				
			||||||
		if (!FileHelper.confirmWrite(file, this)) {
 | 
					 | 
				
			||||||
			return false;
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		//// Uses JFreeChart Built In PNG Export Method
 | 
					 | 
				
			||||||
		try{
 | 
					 | 
				
			||||||
			ChartUtils.saveChartAsPNG(file, chart, chartPanel.getWidth(), chartPanel.getHeight());
 | 
					 | 
				
			||||||
		} catch(Exception e){
 | 
					 | 
				
			||||||
			return false;
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		return true;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	/**
 | 
					 | 
				
			||||||
	 * Static method that shows a plot with the specified parameters.
 | 
					 | 
				
			||||||
	 * 
 | 
					 | 
				
			||||||
	 * @param parent		the parent window, which will be blocked.
 | 
					 | 
				
			||||||
	 * @param simulation	the simulation to plot.
 | 
					 | 
				
			||||||
	 * @param config		the configuration of the plot.
 | 
					 | 
				
			||||||
	 */
 | 
					 | 
				
			||||||
	public static SimulationPlotDialog getPlot(Window parent, Simulation simulation, SimulationPlotConfiguration config) {
 | 
					 | 
				
			||||||
		return new SimulationPlotDialog(parent, simulation, config);
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user