\r
import java.awt.Component;\r
import java.awt.Dimension;\r
+import java.awt.event.ActionEvent;\r
+import java.awt.event.ActionListener;\r
import java.beans.IntrospectionException;\r
import java.beans.Introspector;\r
import java.beans.PropertyChangeEvent;\r
import java.beans.PropertyEditorSupport;\r
import java.text.DecimalFormat;\r
import java.text.NumberFormat;\r
+import java.util.EnumSet;\r
import java.util.Vector;\r
\r
-import javax.measure.unit.SI;\r
import javax.measure.unit.Unit;\r
+import javax.swing.DefaultComboBoxModel;\r
+import javax.swing.JComboBox;\r
import javax.swing.JFrame;\r
import javax.swing.JLabel;\r
import javax.swing.JTable;\r
import org.apache.log4j.Logger;\r
import org.jscience.physics.amount.Amount;\r
\r
-import com.billkuker.rocketry.motorsim.CylindricalChamber;\r
+import com.billkuker.rocketry.motorsim.RocketScience;\r
import com.l2fprod.common.propertysheet.PropertySheetPanel;\r
\r
public class Editor extends PropertySheetPanel {\r
\r
private Object obj;\r
\r
- @SuppressWarnings("deprecation")\r
+ @SuppressWarnings({ "deprecation", "rawtypes", "unchecked" })\r
public Editor(Object o) {\r
obj = o;\r
\r
if (props[i].getName().equals("class"))\r
continue;\r
v.add(props[i]);\r
+ \r
+ if ( Enum.class.isAssignableFrom( props[i].getPropertyType() ) ){\r
+ getEditorRegistry().registerEditor(props[i].getPropertyType(), new EnumPropertyEditor(props[i].getPropertyType()));\r
+ }\r
+ \r
}\r
setProperties(v.toArray(new PropertyDescriptor[v.size()]));\r
\r
log.debug("Writing properties to object.");\r
writeToObject(obj);\r
} catch (Exception v) {\r
- // TODO\r
- v.printStackTrace();\r
+ log.error(v);\r
java.awt.Toolkit.getDefaultToolkit().beep();\r
} finally {\r
readFromObject(obj);\r
f.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);\r
f.setVisible(true);\r
}\r
- \r
+/* \r
public static void main(String args[]){\r
- CylindricalChamber o = new CylindricalChamber();\r
- o.setLength(Amount.valueOf(100.5, SI.MILLIMETER));\r
- o.setID(Amount.valueOf(30, SI.MILLIMETER));\r
+ Schedule40 o = new Schedule40();\r
+ o.setLength(Amount.valueOf(100, SI.MILLIMETER));\r
Editor e = new Editor(o);\r
e.showAsWindow();\r
}\r
- \r
+ */\r
public static class AmountRenderer implements TableCellRenderer {\r
@Override\r
public Component getTableCellRendererComponent(JTable table,\r
Object value, boolean isSelected, boolean hasFocus, int row,\r
int column) {\r
- Amount a = (Amount)value;\r
- return new JLabel(nf.format(a.doubleValue(a.getUnit())) + " " + a.getUnit() );\r
+ return new JLabel(RocketScience.ammountToString((Amount<?>)value));\r
+ }\r
+ \r
+ }\r
+ \r
+ public class EnumPropertyEditor<E extends Enum<E>> extends PropertyEditorSupport {\r
+ JComboBox editor = new JComboBox(){\r
+ private static final long serialVersionUID = 1L;\r
+ {\r
+ addActionListener(new ActionListener(){\r
+ @Override\r
+ public void actionPerformed(ActionEvent e) {\r
+ getTable().commitEditing();\r
+ }});\r
+ }\r
+ };\r
+ DefaultComboBoxModel model = new DefaultComboBoxModel();\r
+ Class<E> clazz;\r
+ public EnumPropertyEditor(Class<E> clazz){\r
+ this.clazz = clazz;\r
+ for ( E e : EnumSet.allOf(clazz) ){\r
+ model.addElement(e);\r
+ }\r
+ editor.setModel(model);\r
}\r
\r
+ @Override\r
+ public Object getValue() {\r
+ return editor.getSelectedItem();\r
+ }\r
+ \r
+ @Override\r
+ public boolean supportsCustomEditor() {\r
+ return true;\r
+ }\r
+ \r
+ @Override\r
+ public Component getCustomEditor() {\r
+ return editor;\r
+ }\r
}\r
\r
public static class AmountPropertyEditor extends PropertyEditorSupport {\r
\r
}\r
\r
- @SuppressWarnings("unchecked")\r
+ @SuppressWarnings({"rawtypes","unchecked"})\r
@Override\r
public void setValue(Object o) {\r
Amount a = (Amount) o;\r