1 package com.billkuker.rocketry.motorsim.visual.workbench;
3 import java.awt.Component;
4 import java.beans.PropertyChangeEvent;
5 import java.beans.PropertyChangeListener;
6 import java.util.Enumeration;
8 import javax.swing.tree.DefaultMutableTreeNode;
9 import javax.swing.tree.DefaultTreeModel;
10 import javax.swing.tree.TreeNode;
12 import com.billkuker.rocketry.motorsim.ChangeListening;
13 import com.billkuker.rocketry.motorsim.Fuel;
14 import com.billkuker.rocketry.motorsim.Motor;
15 import com.billkuker.rocketry.motorsim.grain.MultiGrain;
17 public class WorkbenchTreeModel extends DefaultTreeModel {
19 private static final long serialVersionUID = 1L;
21 //TreeNode root = new DefaultMutableTreeNode("Root");
22 DefaultMutableTreeNode motors = new DefaultMutableTreeNode("All Motors");
23 DefaultMutableTreeNode fuel = new DefaultMutableTreeNode("Fuels");
25 public class MultiGrainNode extends PartNode{
26 private static final long serialVersionUID = 1L;
27 public MultiGrainNode(MultiGrain part) {
29 setAllowsChildren(true);
30 add(new PartNode(part.getGrain()));
33 public void propertyChange(PropertyChangeEvent e) {
34 if ( e.getPropertyName().equals("Grain")){
36 add(new PartNode(((MultiGrain)getUserObject()).getGrain()));
37 nodesChanged(this, new int[]{0});
39 super.propertyChange(e);
43 public class FuelNode extends DefaultMutableTreeNode{
44 private static final long serialVersionUID = 1L;
46 public FuelNode(Component c, Fuel f){
52 public Component getUserObject(){
53 return (Component)super.getUserObject();
56 public Fuel getFuel(){
61 public class FuelEditNode extends FuelNode {
62 private static final long serialVersionUID = 1L;
64 public FuelEditNode(SRFuelEditor sr){
65 super(sr, sr.getFuel());
66 sr.getFuel().addPropertyChangeListener(new PropertyChangeListener(){
69 public void propertyChange(PropertyChangeEvent evt) {
70 nodeChanged(FuelEditNode.this);
75 public SRFuelEditor getUserObject(){
76 return (SRFuelEditor)super.getUserObject();
81 public class PartNode extends DefaultMutableTreeNode implements PropertyChangeListener {
82 private static final long serialVersionUID = 1L;
84 public PartNode(Object part) {
86 if (part instanceof ChangeListening.Subject) {
87 ((ChangeListening.Subject) part).addPropertyChangeListener(this);
92 public void propertyChange(PropertyChangeEvent e) {
98 public class MotorNode extends PartNode implements PropertyChangeListener {
99 private static final long serialVersionUID = 1L;
101 PartNode cn, nn, gn, fn;
103 public MotorNode(Motor m) {
105 setAllowsChildren(true);
107 add( cn = new PartNode(m.getChamber()));
108 add( nn = new PartNode(m.getNozzle()));
109 if ( m.getGrain() instanceof MultiGrain ){
110 gn = new MultiGrainNode(((MultiGrain)m.getGrain()));
112 gn = new PartNode(m.getGrain());
115 if (m instanceof ChangeListening.Subject) {
116 ((ChangeListening.Subject) m).addPropertyChangeListener(this);
121 public Motor getUserObject(){
122 return (Motor)super.getUserObject();
126 public void propertyChange(PropertyChangeEvent e) {
128 super.propertyChange(e);
133 public WorkbenchTreeModel() {
134 super(new DefaultMutableTreeNode("Root"), true);
135 getRoot().add(motors);
140 public DefaultMutableTreeNode getRoot(){
141 return (DefaultMutableTreeNode)super.getRoot();
144 public DefaultMutableTreeNode getMotors(){
148 public DefaultMutableTreeNode getFuels(){
152 public void addMotor(Motor m){
153 motors.add(new MotorNode(m));
154 nodesWereInserted(motors, new int[]{motors.getChildCount()-1});
158 @SuppressWarnings("unchecked")
159 public void removeMotor(Motor m){
160 Enumeration<TreeNode> e = motors.children();
161 while ( e.hasMoreElements() ){
162 TreeNode n = e.nextElement();
163 if ( n instanceof MotorNode ){
164 if ( ((MotorNode)n).getUserObject() == m ){
165 removeNodeFromParent((MotorNode)n);