]> git.gag.com Git - sw/motorsim/blob - src/com/billkuker/rocketry/motorsim/visual/Editor.java
Cleared some warnings
[sw/motorsim] / src / com / billkuker / rocketry / motorsim / visual / Editor.java
1 package com.billkuker.rocketry.motorsim.visual;\r
2 import java.awt.Component;\r
3 import java.beans.IntrospectionException;\r
4 import java.beans.Introspector;\r
5 import java.beans.PropertyChangeEvent;\r
6 import java.beans.PropertyChangeListener;\r
7 import java.beans.PropertyEditorManager;\r
8 import java.beans.PropertyEditorSupport;\r
9 import java.lang.reflect.InvocationTargetException;\r
10 \r
11 import javax.measure.unit.NonSI;\r
12 import javax.measure.unit.Unit;\r
13 import javax.swing.JFrame;\r
14 import javax.swing.JPanel;\r
15 import javax.swing.JTextField;\r
16 \r
17 import org.apache.log4j.Logger;\r
18 import org.jscience.physics.amount.Amount;\r
19 \r
20 import com.billkuker.rocketry.motorsim.grain.CoredCylindricalGrain;\r
21 import com.l2fprod.common.propertysheet.PropertySheetPanel;\r
22 \r
23 public class Editor extends JPanel {\r
24         private static final long serialVersionUID = 1L;\r
25 \r
26         private static Logger log = Logger.getLogger(Editor.class);\r
27 \r
28         private Object obj;\r
29 \r
30         public Editor(Object o) throws IntrospectionException,\r
31                         IllegalArgumentException, IllegalAccessException,\r
32                         InvocationTargetException {\r
33                 obj = o;\r
34                 /*\r
35                 BeanInfo b = Introspector.getBeanInfo(o.getClass());\r
36                 setLayout(new GridLayout(b.getPropertyDescriptors().length - 1, 2));\r
37                 for (PropertyDescriptor p : b.getPropertyDescriptors()) {\r
38                         log.debug(p.getName());\r
39                         if (p.getName().equals("class"))\r
40                                 continue;\r
41 \r
42                         add(new JLabel(p.getName()));\r
43                         if (p.getPropertyType().isAssignableFrom(Amount.class)){\r
44                                 add(new AmountEditor(p));\r
45                         } else if ( p.getPropertyType() == boolean.class ){\r
46                                 add( new BooleanEditor(p) );\r
47                                 \r
48                         }\r
49                 }\r
50                 log.debug(PropertyEditorManager.findEditor(boolean.class).supportsCustomEditor());*/\r
51                 \r
52                 PropertyEditorManager.registerEditor(Amount.class, AmountPropertyEditor.class);\r
53                 \r
54                 final PropertySheetPanel ps = new PropertySheetPanel();\r
55                 ps.setBeanInfo(Introspector.getBeanInfo(obj.getClass()));\r
56                 ps.readFromObject(obj);\r
57                 add(ps);\r
58                 \r
59                 ps.addPropertySheetChangeListener(new PropertyChangeListener(){\r
60 \r
61                         @Override\r
62                         public void propertyChange(PropertyChangeEvent evt) {\r
63                                 //When something changes just update the\r
64                                 //object, I want the changes to be immediate.\r
65                                 try {\r
66                                         ps.writeToObject(obj);\r
67                                 } catch ( Exception v ){\r
68                                         //TODO\r
69                                         v.printStackTrace();\r
70                                         java.awt.Toolkit.getDefaultToolkit().beep();\r
71                                 } finally {\r
72                                         ps.readFromObject(obj);\r
73                                 }\r
74                         }\r
75                         \r
76                 });\r
77         }\r
78 \r
79         public static void main(String args[]) throws Exception {\r
80                 CoredCylindricalGrain g = new CoredCylindricalGrain();\r
81                 g.setOD(Amount.valueOf(1, NonSI.INCH));\r
82                 new Editor(g).show();\r
83                 \r
84                 new GrainPanel(g).show();\r
85         }\r
86 \r
87         public void show() {\r
88                 JFrame f = new JFrame();\r
89                 f.setSize(600,400);\r
90                 f.setContentPane(this);\r
91                 f.setDefaultCloseOperation(f.DISPOSE_ON_CLOSE);\r
92                 f.setVisible(true);\r
93         }\r
94         \r
95         public static class AmountPropertyEditor extends PropertyEditorSupport{\r
96                 JTextField editor = new JTextField();\r
97                 Unit oldUnit;\r
98 \r
99                 @Override\r
100                 public boolean supportsCustomEditor() {\r
101                         return true;\r
102                 }\r
103                 @Override public String getAsText(){\r
104                         return editor.getText();\r
105                 }\r
106                 \r
107                 @Override public Object getValue(){\r
108                         String text = editor.getText().trim();\r
109                         try {\r
110                                 try {\r
111                                         return Amount.valueOf(Integer.parseInt(text), oldUnit);\r
112                                 } catch (NumberFormatException e){\r
113                                         \r
114                                 }\r
115                                 Amount a = Amount.valueOf(Double.parseDouble(text), oldUnit);\r
116                                 return a;\r
117                         } catch (NumberFormatException e){\r
118                                 Amount a = Amount.valueOf(editor.getText());\r
119                                 oldUnit = a.getUnit();\r
120                                 return a;\r
121                         }\r
122 \r
123                 }\r
124                 @Override public void setValue(Object o){\r
125                         Amount a = (Amount)o;\r
126                         oldUnit = a.getUnit();\r
127                         \r
128                         String text;\r
129                         if ( a.isExact() )\r
130                                          text = a.getExactValue() + " " + a.getUnit();\r
131                         else\r
132                                  text = a.doubleValue(a.getUnit()) + " " + a.getUnit();\r
133                         \r
134                         setAsText(text);\r
135                 }\r
136                 @Override public void setAsText(String text) throws IllegalArgumentException {\r
137                         editor.setText(text);\r
138                 };\r
139                 @Override\r
140                 public Component getCustomEditor(){\r
141                         return editor;\r
142                 }\r
143         }\r
144 \r
145 \r
146 \r
147 }\r