+package org.simantics.g3d.property;\r
+\r
+import java.lang.reflect.InvocationTargetException;\r
+import java.lang.reflect.Method;\r
+\r
+import javax.vecmath.Vector3d;\r
+\r
+public class VectorPropertyManipulator implements PropertyManipulator {\r
+ \r
+ ValueProvider provider;\r
+ protected Object input;\r
+ \r
+ boolean editMode;\r
+ Vector3d editValue = null;\r
+ \r
+ public VectorPropertyManipulator(ValueProvider provider, Object input) {\r
+ this.provider = provider;\r
+ this.input = input;\r
+ }\r
+ \r
+ @Override\r
+ public int getValueCount() {\r
+ return 3;\r
+ }\r
+ \r
+ @Override\r
+ public String getDescription(int i) {\r
+ if (i == 0)\r
+ return "X";\r
+ if (i == 1)\r
+ return "Y";\r
+ if (i == 2)\r
+ return "Z";\r
+ return null;\r
+ }\r
+ \r
+ @Override\r
+ public String getValue(int i) {\r
+ try {\r
+ Vector3d v = _getValue();\r
+ if (v == null)\r
+ return null;\r
+ if (i == 0)\r
+ return Double.toString(v.x);\r
+ if (i == 1)\r
+ return Double.toString(v.y);\r
+ if (i == 2)\r
+ return Double.toString(v.z);\r
+ return null;\r
+ } catch (Exception e) {\r
+ return null;\r
+ }\r
+ }\r
+ \r
+ @Override\r
+ public String setValue(String value, int i) {\r
+ try {\r
+ Double d = Double.parseDouble(value);\r
+ Vector3d v = _getValue();\r
+ v = new Vector3d(v.x, v.y, v.z);\r
+ if (i == 0)\r
+ v.x = d;\r
+ if (i == 1)\r
+ v.y = d;\r
+ if (i == 2)\r
+ v.z = d;\r
+ editValue = v;\r
+ setValue(v);\r
+ } catch (Exception e) {\r
+ return e.getMessage();\r
+ }\r
+ return null;\r
+ }\r
+ \r
+ protected void setValue(Vector3d v) throws Exception {\r
+ provider.setValue(input, v);\r
+ }\r
+ \r
+ private Vector3d _getValue() throws Exception{\r
+ if (editMode)\r
+ return editValue;\r
+ return (Vector3d) provider.getValue(input);\r
+ }\r
+ \r
+ @Override\r
+ public boolean getEditMode() {\r
+ return editMode;\r
+ }\r
+ \r
+ @Override\r
+ public void setEditMode(boolean b) {\r
+ editMode = b;\r
+ if (editMode) {\r
+ try {\r
+ editValue = (Vector3d) provider.getValue(input);\r
+ } catch (Exception e) {\r
+ \r
+ }\r
+ }\r
+ \r
+ }\r
+\r
+}\r