1 package com.billkuker.rocketry.motorsim.fuel;
\r
3 import java.awt.Component;
\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
11 import org.jscience.physics.amount.Amount;
\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
17 public abstract class AbstractFuelEditor extends JSplitPane {
\r
18 private static final long serialVersionUID = 1L;
\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
25 public AbstractFuelEditor(Fuel f){
\r
26 super(HORIZONTAL_SPLIT);
\r
29 editTop = new JSplitPane(JSplitPane.VERTICAL_SPLIT);
\r
30 editTop.setTopComponent(new Editor(f));
\r
31 editTop.setBottomComponent(new Editor(f.getCombustionProduct()));
\r
33 editParent = new JSplitPane(JSplitPane.VERTICAL_SPLIT);
\r
34 setLeftComponent(editParent);
\r
35 editParent.setTopComponent(editTop);
\r
36 editParent.setBottomComponent(getBurnrateEditComponent());
\r
39 setDividerLocation(.3);
\r
40 editParent.setDividerLocation(.5);
\r
41 editTop.setDividerLocation(.5);
\r
42 editParent.resetToPreferredSizes();
\r
48 protected abstract Component getBurnrateEditComponent();
\r
50 public Fuel getFuel(){
\r
56 protected void update() {
\r
57 SwingUtilities.invokeLater(new Runnable() {
\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
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
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