03fb5e7d0107a7590bcb004c3547847e60edb16e
[sw/motorsim] / gui / com / billkuker / rocketry / motorsim / fuel / AbstractFuelEditor.java
1 package com.billkuker.rocketry.motorsim.fuel;\r
2 \r
3 import java.awt.Component;\r
4 \r
5 import javax.measure.quantity.Pressure;\r
6 import javax.measure.quantity.Velocity;\r
7 import javax.measure.unit.SI;\r
8 import javax.swing.JSplitPane;\r
9 import javax.swing.SwingUtilities;\r
10 \r
11 import org.jscience.physics.amount.Amount;\r
12 \r
13 import com.billkuker.rocketry.motorsim.Fuel;\r
14 import com.billkuker.rocketry.motorsim.visual.Chart;\r
15 import com.billkuker.rocketry.motorsim.visual.Editor;\r
16 \r
17 public abstract class AbstractFuelEditor  extends JSplitPane {\r
18         private static final long serialVersionUID = 1L;\r
19 \r
20         private final JSplitPane editParent;\r
21         private final JSplitPane editTop;\r
22         private final Fuel f;\r
23         private Chart<Pressure, Velocity> burnRate;\r
24         \r
25         public AbstractFuelEditor(Fuel f){\r
26                 super(HORIZONTAL_SPLIT);\r
27                 this.f = f;\r
28                 \r
29                 editTop = new JSplitPane(JSplitPane.VERTICAL_SPLIT);\r
30                 editTop.setTopComponent(new Editor(f));\r
31                 editTop.setBottomComponent(new Editor(f.getCombustionProduct()));\r
32                 \r
33                 editParent = new JSplitPane(JSplitPane.VERTICAL_SPLIT);\r
34                 setLeftComponent(editParent);\r
35                 editParent.setTopComponent(editTop);\r
36                 editParent.setBottomComponent(getBurnrateEditComponent());\r
37                 \r
38                 setResizeWeight(0);\r
39                 setDividerLocation(.3);\r
40                 editParent.setDividerLocation(.5);\r
41                 editTop.setDividerLocation(.5);\r
42                 editParent.resetToPreferredSizes();\r
43                 revalidate();\r
44 \r
45                 update();\r
46         }\r
47         \r
48         protected abstract Component getBurnrateEditComponent();\r
49         \r
50         public Fuel getFuel(){\r
51                 return f;\r
52         }\r
53         \r
54 \r
55 \r
56         protected void update() {\r
57                 SwingUtilities.invokeLater(new Runnable() {\r
58 \r
59                         @Override\r
60                         public void run() {\r
61                                 editTop.setTopComponent(new Editor(f));\r
62                                 editTop.setBottomComponent(new Editor(f.getCombustionProduct()));\r
63                                 if (burnRate != null)\r
64                                         AbstractFuelEditor.this.remove(burnRate);\r
65                                 try {\r
66                                         burnRate = new Chart<Pressure, Velocity>(\r
67                                                         SI.MEGA(SI.PASCAL), SI.MILLIMETER.divide(SI.SECOND)\r
68                                                                         .asType(Velocity.class), f, "burnRate");\r
69                                 } catch (NoSuchMethodException e) {\r
70                                         throw new Error(e);\r
71                                 }\r
72                                 burnRate.setDomain(burnRate.new IntervalDomain(Amount.valueOf(\r
73                                                 0, SI.MEGA(SI.PASCAL)), Amount.valueOf(11, SI\r
74                                                 .MEGA(SI.PASCAL)), 50));\r
75                                 AbstractFuelEditor.this.setRightComponent(burnRate);\r
76                                 AbstractFuelEditor.this.revalidate();\r
77                         }\r
78                 });\r
79         }\r
80         \r
81 }\r