cleared some warnings
[sw/motorsim] / src / com / billkuker / rocketry / motorsim / visual / workbench / WorkbenchTreeModel.java
1 package com.billkuker.rocketry.motorsim.visual.workbench;
2
3 import java.awt.Component;
4 import java.beans.PropertyChangeEvent;
5 import java.beans.PropertyChangeListener;
6 import java.util.Enumeration;
7
8 import javax.swing.tree.DefaultMutableTreeNode;
9 import javax.swing.tree.DefaultTreeModel;
10 import javax.swing.tree.TreeNode;
11
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;
16
17 public class WorkbenchTreeModel extends DefaultTreeModel {
18
19         private static final long serialVersionUID = 1L;
20         
21         //TreeNode root = new DefaultMutableTreeNode("Root");
22         DefaultMutableTreeNode motors = new DefaultMutableTreeNode("All Motors");
23         DefaultMutableTreeNode fuel = new DefaultMutableTreeNode("Fuels");
24         
25         public class MultiGrainNode extends PartNode{
26                 private static final long serialVersionUID = 1L;
27                 public MultiGrainNode(MultiGrain part) {
28                         super(part);
29                         setAllowsChildren(true);
30                         add(new PartNode(part.getGrain()));
31                 }
32                 @Override
33                 public void propertyChange(PropertyChangeEvent e) {
34                         if ( e.getPropertyName().equals("Grain")){
35                                 remove(0);
36                                 add(new PartNode(((MultiGrain)getUserObject()).getGrain()));
37                                 nodesChanged(this, new int[]{0});
38                         }
39                         super.propertyChange(e);
40                 }
41         }
42         
43         public class FuelNode extends DefaultMutableTreeNode{
44                 private static final long serialVersionUID = 1L;
45                 Fuel f;
46                 public FuelNode(Component c, Fuel f){
47                         super(c, false);
48                         this.f = f;
49                 }
50                 
51                 @Override
52                 public Component getUserObject(){
53                         return (Component)super.getUserObject();
54                 }
55                 
56                 public Fuel getFuel(){
57                         return f;
58                 }
59         }
60         
61         public class FuelEditNode extends FuelNode {
62                 private static final long serialVersionUID = 1L;
63
64                 public FuelEditNode(SRFuelEditor sr){
65                         super(sr, sr.getFuel());
66                         sr.getFuel().addPropertyChangeListener(new PropertyChangeListener(){
67
68                                 @Override
69                                 public void propertyChange(PropertyChangeEvent evt) {
70                                         nodeChanged(FuelEditNode.this);
71                                 }});
72                 }
73                 
74                 @Override
75                 public SRFuelEditor getUserObject(){
76                         return (SRFuelEditor)super.getUserObject();
77                 }
78
79         }
80
81         public class PartNode extends DefaultMutableTreeNode implements PropertyChangeListener {
82                 private static final long serialVersionUID = 1L;
83
84                 public PartNode(Object part) {
85                         super(part, false);
86                         if (part instanceof ChangeListening.Subject) {
87                                 ((ChangeListening.Subject) part).addPropertyChangeListener(this);
88                         }
89                 }
90         
91                 @Override
92                 public void propertyChange(PropertyChangeEvent e) {
93                         nodeChanged(this);
94                 }
95         
96         }
97         
98         public class MotorNode extends PartNode implements PropertyChangeListener {
99                 private static final long serialVersionUID = 1L;
100                 Motor motor;
101                 PartNode cn, nn, gn, fn;
102
103                 public MotorNode(Motor m) {
104                         super(m);
105                         setAllowsChildren(true);
106                         motor = m;
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()));
111                         } else {
112                                 gn = new PartNode(m.getGrain());
113                         }
114                         add(gn);
115                         if (m instanceof ChangeListening.Subject) {
116                                 ((ChangeListening.Subject) m).addPropertyChangeListener(this);
117                         }
118                 }
119                 
120                 @Override
121                 public Motor getUserObject(){
122                         return (Motor)super.getUserObject();
123                 }
124
125                 @Override
126                 public void propertyChange(PropertyChangeEvent e) {
127                                 nodeChanged(this);
128                         super.propertyChange(e);
129                 }
130
131         }
132
133         public WorkbenchTreeModel() {
134                 super(new DefaultMutableTreeNode("Root"), true);
135                 getRoot().add(motors);
136                 getRoot().add(fuel);
137         }
138         
139         @Override
140         public DefaultMutableTreeNode getRoot(){
141                 return (DefaultMutableTreeNode)super.getRoot();
142         }
143         
144         public DefaultMutableTreeNode getMotors(){
145                 return motors;
146         }
147         
148         public DefaultMutableTreeNode getFuels(){
149                 return fuel;
150         }
151         
152         public void addMotor(Motor m){
153                 DefaultMutableTreeNode root = getRoot();
154                 motors.add(new MotorNode(m));
155                 nodesWereInserted(motors, new int[]{motors.getChildCount()-1});
156                 
157         }
158         
159         @SuppressWarnings("unchecked")
160         public void removeMotor(Motor m){
161                 Enumeration<TreeNode> e = motors.children();
162                 while ( e.hasMoreElements() ){
163                         TreeNode n = e.nextElement();
164                         if ( n instanceof MotorNode ){
165                                 if ( ((MotorNode)n).getUserObject() == m ){
166                                         removeNodeFromParent((MotorNode)n);
167                                 }
168                         }
169                 }
170         }
171
172 }