added svn:ignores
[debian/openrocket] / src / net / sf / openrocket / gui / dialogs / motor / thrustcurve / ThrustCurveMotorPlotDialog.java
1 package net.sf.openrocket.gui.dialogs.motor.thrustcurve;
2
3 import java.awt.BasicStroke;
4 import java.awt.Color;
5 import java.awt.Rectangle;
6 import java.awt.Window;
7 import java.awt.event.ActionEvent;
8 import java.awt.event.ActionListener;
9 import java.util.List;
10
11 import javax.swing.JButton;
12 import javax.swing.JDialog;
13 import javax.swing.JPanel;
14
15 import net.miginfocom.swing.MigLayout;
16 import net.sf.openrocket.motor.ThrustCurveMotor;
17 import net.sf.openrocket.unit.UnitGroup;
18 import net.sf.openrocket.util.GUIUtil;
19
20 import org.jfree.chart.ChartFactory;
21 import org.jfree.chart.ChartPanel;
22 import org.jfree.chart.JFreeChart;
23 import org.jfree.chart.plot.PlotOrientation;
24 import org.jfree.chart.plot.XYPlot;
25 import org.jfree.chart.renderer.xy.StandardXYItemRenderer;
26 import org.jfree.data.xy.XYSeries;
27 import org.jfree.data.xy.XYSeriesCollection;
28
29 public class ThrustCurveMotorPlotDialog extends JDialog {
30         
31         public ThrustCurveMotorPlotDialog(List<ThrustCurveMotor> motors, int selected, Window parent) {
32                 super(parent, "Motor thrust curves", ModalityType.APPLICATION_MODAL);
33                 
34                 JPanel panel = new JPanel(new MigLayout("fill"));
35                 
36                 // Thrust curve plot
37                 JFreeChart chart = ChartFactory.createXYLineChart(
38                                 "Motor thrust curves", // title
39                                 "Time / " + UnitGroup.UNITS_SHORT_TIME.getDefaultUnit().getUnit(), // xAxisLabel
40                                 "Thrust / " + UnitGroup.UNITS_FORCE.getDefaultUnit().getUnit(), // yAxisLabel
41                                 null, // dataset
42                                 PlotOrientation.VERTICAL,
43                                 true, // legend
44                                 true, // tooltips
45                                 false // urls
46                                 );
47                 
48
49                 // Add the data and formatting to the plot
50                 XYPlot plot = chart.getXYPlot();
51                 
52                 chart.setBackgroundPaint(panel.getBackground());
53                 plot.setBackgroundPaint(Color.WHITE);
54                 plot.setDomainGridlinePaint(Color.LIGHT_GRAY);
55                 plot.setRangeGridlinePaint(Color.LIGHT_GRAY);
56                 
57                 ChartPanel chartPanel = new ChartPanel(chart,
58                                 false, // properties
59                                 true, // save
60                                 false, // print
61                                 true, // zoom
62                                 true); // tooltips
63                 chartPanel.setMouseWheelEnabled(true);
64                 chartPanel.setEnforceFileExtensions(true);
65                 chartPanel.setInitialDelay(500);
66                 
67                 StandardXYItemRenderer renderer = new StandardXYItemRenderer();
68                 renderer.setBaseShapesVisible(true);
69                 renderer.setBaseShapesFilled(true);
70                 plot.setRenderer(renderer);
71                 
72
73                 // Create the plot data set
74                 XYSeriesCollection dataset = new XYSeriesCollection();
75                 
76                 // Selected thrust curve
77                 int n = 0;
78                 if (selected >= 0) {
79                         dataset.addSeries(generateSeries(motors.get(selected)));
80                         renderer.setSeriesStroke(n, new BasicStroke(1.5f));
81                         renderer.setSeriesPaint(n, ThrustCurveMotorSelectionPanel.getColor(selected));
82                 }
83                 n++;
84                 
85                 // Other thrust curves
86                 for (int i = 0; i < motors.size(); i++) {
87                         if (i == selected)
88                                 continue;
89                         
90                         ThrustCurveMotor m = motors.get(i);
91                         dataset.addSeries(generateSeries(m));
92                         renderer.setSeriesStroke(n, new BasicStroke(1.5f));
93                         renderer.setSeriesPaint(n, ThrustCurveMotorSelectionPanel.getColor(i));
94                         renderer.setSeriesShape(n, new Rectangle());
95                         n++;
96                 }
97                 
98                 plot.setDataset(dataset);
99                 
100                 panel.add(chartPanel, "width 600:600:, height 400:400:, grow, wrap para");
101                 
102
103                 // Close button
104                 JButton close = new JButton("Close");
105                 close.addActionListener(new ActionListener() {
106                         @Override
107                         public void actionPerformed(ActionEvent e) {
108                                 ThrustCurveMotorPlotDialog.this.setVisible(false);
109                         }
110                 });
111                 panel.add(close, "right, tag close");
112                 
113
114                 this.add(panel);
115                 
116                 this.pack();
117                 GUIUtil.setDisposableDialogOptions(this, null);
118         }
119         
120         
121         private XYSeries generateSeries(ThrustCurveMotor motor) {
122                 XYSeries series = new XYSeries(motor.getManufacturer() + " " + motor.getDesignation());
123                 double[] time = motor.getTimePoints();
124                 double[] thrust = motor.getThrustPoints();
125                 
126                 for (int j = 0; j < time.length; j++) {
127                         series.add(time[j], thrust[j]);
128                 }
129                 return series;
130         }
131 }