]> gerrit.simantics Code Review - simantics/3d.git/blob - org.simantics.g3d/src/org/simantics/g3d/property/VectorPropertyManipulator.java
7a8df5e1ce83648ad759e1007c8e5984bae53abd
[simantics/3d.git] / org.simantics.g3d / src / org / simantics / g3d / property / VectorPropertyManipulator.java
1 /*******************************************************************************\r
2  * Copyright (c) 2012, 2013 Association for Decentralized Information Management in\r
3  * Industry THTH ry.\r
4  * All rights reserved. This program and the accompanying materials\r
5  * are made available under the terms of the Eclipse Public License v1.0\r
6  * which accompanies this distribution, and is available at\r
7  * http://www.eclipse.org/legal/epl-v10.html\r
8  *\r
9  * Contributors:\r
10  *     VTT Technical Research Centre of Finland - initial API and implementation\r
11  *******************************************************************************/\r
12 package org.simantics.g3d.property;\r
13 \r
14 import java.lang.reflect.InvocationTargetException;\r
15 import java.lang.reflect.Method;\r
16 \r
17 import javax.vecmath.Vector3d;\r
18 \r
19 public class VectorPropertyManipulator implements PropertyManipulator {\r
20         \r
21         ValueProvider provider;\r
22         protected Object input;\r
23         \r
24         boolean editMode;\r
25         Vector3d editValue = null;\r
26         \r
27         public VectorPropertyManipulator(ValueProvider provider, Object input) {\r
28                 this.provider = provider;\r
29                 this.input = input;\r
30         }\r
31         \r
32         @Override\r
33         public int getValueCount() {\r
34                 return 3;\r
35         }\r
36         \r
37         @Override\r
38         public String getDescription(int i) {\r
39                 if (i == 0)\r
40                         return "X";\r
41                 if (i == 1)\r
42                         return "Y";\r
43                 if (i == 2)\r
44                         return "Z";\r
45                 return null;\r
46         }\r
47         \r
48         @Override\r
49         public String getValue(int i) {\r
50                 try {\r
51                         Vector3d v = _getValue();\r
52                         if (v == null)\r
53                                 return null;\r
54                         if (i == 0)\r
55                                 return Double.toString(v.x);\r
56                         if (i == 1)\r
57                                 return Double.toString(v.y);\r
58                         if (i == 2)\r
59                                 return Double.toString(v.z);\r
60                         return null;\r
61                 } catch (Exception e) {\r
62                         return null;\r
63                 }\r
64         }\r
65         \r
66         @Override\r
67         public String setValue(String value, int i) {\r
68                 try {\r
69                         Double d = Double.parseDouble(value);\r
70                         Vector3d v = _getValue();\r
71                         v = new Vector3d(v.x, v.y, v.z);\r
72                         if (i == 0)\r
73                                 v.x = d;\r
74                         if (i == 1)\r
75                                 v.y = d;\r
76                         if (i == 2)\r
77                                 v.z = d;\r
78                         editValue = v;\r
79                         setValue(v);\r
80                 } catch (Exception e) {\r
81                         return e.getMessage();\r
82                 }\r
83                 return null;\r
84         }\r
85         \r
86         protected void setValue(Vector3d v) throws Exception {\r
87                 provider.setValue(input, v);\r
88         }\r
89         \r
90         private Vector3d _getValue() throws Exception{\r
91                 if (editMode)\r
92                         return editValue;\r
93                 return (Vector3d) provider.getValue(input);\r
94         }\r
95         \r
96         @Override\r
97         public boolean getEditMode() {\r
98                 return editMode;\r
99         }\r
100         \r
101         @Override\r
102         public void setEditMode(boolean b) {\r
103                 editMode = b;\r
104                 if (editMode) {\r
105                         try {\r
106                                 editValue = (Vector3d) provider.getValue(input);\r
107                         } catch (Exception e) {\r
108                                 \r
109                         }\r
110                 }\r
111                 \r
112         }\r
113 \r
114 }\r