Revision 1575 org.gvsig.vectorediting/trunk/org.gvsig.vectorediting/org.gvsig.vectorediting.swing/org.gvsig.vectorediting.swing.impl/src/main/java/org/gvsig/vectorediting/swing/impl/contextmenu/DefaultDynamicEditingPointPanel.java
DefaultDynamicEditingPointPanel.java | ||
---|---|---|
46 | 46 |
*/ |
47 | 47 |
package org.gvsig.vectorediting.swing.impl.contextmenu; |
48 | 48 |
|
49 |
import java.awt.event.ActionEvent; |
|
50 |
import java.awt.event.ActionListener; |
|
51 |
import java.awt.event.ItemEvent; |
|
52 |
import java.awt.event.ItemListener; |
|
53 |
import java.util.Objects; |
|
54 |
import javax.swing.DefaultComboBoxModel; |
|
49 | 55 |
import javax.swing.JComponent; |
56 |
import org.apache.commons.lang3.StringUtils; |
|
57 |
import org.apache.commons.lang3.tuple.Pair; |
|
58 |
import org.gvsig.expressionevaluator.swing.CalculatorController; |
|
59 |
import org.gvsig.expressionevaluator.swing.ExpressionEvaluatorSwingLocator; |
|
60 |
import org.gvsig.expressionevaluator.swing.ExpressionEvaluatorSwingManager; |
|
61 |
import org.gvsig.fmap.dal.DataTypes; |
|
62 |
import org.gvsig.fmap.geom.Geometry; |
|
63 |
import org.gvsig.fmap.geom.GeometryLocator; |
|
50 | 64 |
|
51 | 65 |
import org.gvsig.fmap.geom.primitive.Point; |
66 |
import org.gvsig.fmap.geom.type.GeometryType; |
|
67 |
import org.gvsig.fmap.geom.type.GeometryTypeNotSupportedException; |
|
68 |
import org.gvsig.fmap.geom.type.GeometryTypeNotValidException; |
|
69 |
import org.gvsig.temporarystorage.TemporaryStorageGroup; |
|
70 |
import org.gvsig.temporarystorage.TemporaryStorageLocator; |
|
71 |
import org.gvsig.tools.locator.LocatorException; |
|
72 |
import org.gvsig.tools.swing.api.ListElement; |
|
73 |
import org.gvsig.tools.swing.api.ToolsSwingLocator; |
|
74 |
import org.gvsig.tools.swing.api.ToolsSwingManager; |
|
52 | 75 |
|
53 | 76 |
/** |
54 | 77 |
* @author fdiaz |
... | ... | |
60 | 83 |
* |
61 | 84 |
*/ |
62 | 85 |
private static final long serialVersionUID = 2398169399771503091L; |
86 |
private final Point defaultPoint; |
|
87 |
private final CalculatorController pickers[]; |
|
88 |
private CalculatorController pickerX; |
|
89 |
private CalculatorController pickerY; |
|
90 |
private CalculatorController pickerZ; |
|
91 |
private CalculatorController pickerM; |
|
92 |
private final GeometryType geomType; |
|
63 | 93 |
|
64 | 94 |
/** |
95 |
* @param geomType |
|
65 | 96 |
* @param point |
66 | 97 |
*/ |
67 |
public DefaultDynamicEditingPointPanel(Point point) { |
|
68 |
super(point); |
|
98 |
public DefaultDynamicEditingPointPanel(GeometryType geomType, Point point) { |
|
99 |
super(); |
|
100 |
this.defaultPoint = point; |
|
101 |
if( geomType==null ) { |
|
102 |
if( this.defaultPoint==null ) { |
|
103 |
try { |
|
104 |
this.geomType = GeometryLocator.getGeometryManager().getGeometryType( |
|
105 |
Geometry.TYPES.POINT, |
|
106 |
Geometry.SUBTYPES.GEOM2D |
|
107 |
); |
|
108 |
} catch (GeometryTypeNotSupportedException | GeometryTypeNotValidException | LocatorException ex) { |
|
109 |
throw new IllegalArgumentException("Can't create the geometry type, and params are null."); |
|
110 |
} |
|
111 |
} else { |
|
112 |
this.geomType = this.defaultPoint.getGeometryType(); |
|
113 |
} |
|
114 |
} else { |
|
115 |
this.geomType = geomType; |
|
116 |
} |
|
117 |
this.pickers = new CalculatorController[this.geomType.getDimension()]; |
|
118 |
this.initComponents(); |
|
69 | 119 |
} |
70 | 120 |
|
121 |
private void initComponents() { |
|
122 |
ToolsSwingManager toolsSwingManager = ToolsSwingLocator.getToolsSwingManager(); |
|
123 |
ExpressionEvaluatorSwingManager evaluatorManager = ExpressionEvaluatorSwingLocator.getManager(); |
|
124 |
|
|
125 |
toolsSwingManager.translate(this.rdbEnterTheCoordinatesManually); |
|
126 |
toolsSwingManager.translate(this.rdbUseAPointPreviouslyCaptured); |
|
127 |
|
|
128 |
toolsSwingManager.addClearButton(this.txtX); |
|
129 |
toolsSwingManager.addClearButton(this.txtY); |
|
130 |
toolsSwingManager.addClearButton(this.txtZ); |
|
131 |
toolsSwingManager.addClearButton(this.txtM); |
|
132 |
|
|
133 |
toolsSwingManager.setDefaultPopupMenu(this.txtX); |
|
134 |
toolsSwingManager.setDefaultPopupMenu(this.txtY); |
|
135 |
toolsSwingManager.setDefaultPopupMenu(this.txtZ); |
|
136 |
toolsSwingManager.setDefaultPopupMenu(this.txtM); |
|
137 |
|
|
138 |
this.pickerX = evaluatorManager.createCalculatorController( |
|
139 |
this.txtX, DataTypes.DOUBLE |
|
140 |
); |
|
141 |
this.pickerY = evaluatorManager.createCalculatorController( |
|
142 |
this.txtY, DataTypes.DOUBLE |
|
143 |
); |
|
144 |
this.pickerZ = evaluatorManager.createCalculatorController( |
|
145 |
this.txtZ, DataTypes.DOUBLE |
|
146 |
); |
|
147 |
this.pickerM = evaluatorManager.createCalculatorController( |
|
148 |
this.txtM, DataTypes.DOUBLE |
|
149 |
); |
|
150 |
this.pickers[0] = this.pickerX; |
|
151 |
this.pickers[1] = this.pickerY; |
|
152 |
if( this.geomType.hasZ() && this.geomType.hasM() ) { |
|
153 |
this.pickers[2] = this.pickerZ; |
|
154 |
this.pickers[3] = this.pickerM; |
|
155 |
} else if( this.geomType.hasZ() ) { |
|
156 |
this.pickers[2] = this.pickerZ; |
|
157 |
} else if( this.geomType.hasM() ) { |
|
158 |
this.pickers[2] = this.pickerM; |
|
159 |
} |
|
160 |
|
|
161 |
addHierarchyChanged(); |
|
162 |
|
|
163 |
TemporaryStorageGroup points = TemporaryStorageLocator.getTemporaryStorageManager() |
|
164 |
.create("Points",Point.class); |
|
165 |
|
|
166 |
DefaultComboBoxModel model = new DefaultComboBoxModel(); |
|
167 |
model.addElement(new ListElement("", null)); |
|
168 |
for (Pair<String, Object> pair : points.asList()) { |
|
169 |
model.addElement(new ListElement(pair.getKey(), (Point)(pair.getValue()))); |
|
170 |
} |
|
171 |
this.cboCapturedPoints.setModel(model); |
|
172 |
this.cboCapturedPoints.addItemListener(new ItemListener() { |
|
173 |
@Override |
|
174 |
public void itemStateChanged(ItemEvent e) { |
|
175 |
if( e.getStateChange()==ItemEvent.SELECTED ) { |
|
176 |
setPoint(((ListElement<Point>)e.getItem()).getValue()); |
|
177 |
} |
|
178 |
} |
|
179 |
}); |
|
180 |
this.rdbEnterTheCoordinatesManually.addActionListener(new ActionListener() { |
|
181 |
@Override |
|
182 |
public void actionPerformed(ActionEvent e) { |
|
183 |
updateEnabledState(); |
|
184 |
} |
|
185 |
}); |
|
186 |
this.rdbUseAPointPreviouslyCaptured.addActionListener(new ActionListener() { |
|
187 |
@Override |
|
188 |
public void actionPerformed(ActionEvent e) { |
|
189 |
updateEnabledState(); |
|
190 |
} |
|
191 |
}); |
|
192 |
this.rdbEnterTheCoordinatesManually.setSelected(true); |
|
193 |
this.updateEnabledState(); |
|
194 |
} |
|
195 |
|
|
196 |
private void updateEnabledState() { |
|
197 |
|
|
198 |
if( this.rdbEnterTheCoordinatesManually.isSelected()) { |
|
199 |
this.cboCapturedPoints.setEnabled(false); |
|
200 |
|
|
201 |
this.txtX.setEnabled(true); |
|
202 |
this.txtY.setEnabled(true); |
|
203 |
this.txtZ.setEnabled(false); |
|
204 |
this.txtM.setEnabled(false); |
|
205 |
|
|
206 |
this.lblX.setEnabled(true); |
|
207 |
this.lblY.setEnabled(true); |
|
208 |
this.lblZ.setEnabled(false); |
|
209 |
this.lblM.setEnabled(false); |
|
210 |
if( geomType.hasZ() && geomType.hasM() ) { |
|
211 |
this.txtZ.setEnabled(true); |
|
212 |
this.lblZ.setEnabled(true); |
|
213 |
this.txtM.setEnabled(true); |
|
214 |
this.lblM.setEnabled(true); |
|
215 |
} else if( geomType.hasZ() ) { |
|
216 |
this.txtZ.setEnabled(true); |
|
217 |
this.lblZ.setEnabled(true); |
|
218 |
} else if( geomType.hasM() ) { |
|
219 |
this.txtM.setEnabled(true); |
|
220 |
this.lblM.setEnabled(true); |
|
221 |
} |
|
222 |
} |
|
223 |
if( this.rdbUseAPointPreviouslyCaptured.isSelected()) { |
|
224 |
this.cboCapturedPoints.setEnabled(true); |
|
225 |
|
|
226 |
this.txtX.setEnabled(false); |
|
227 |
this.txtY.setEnabled(false); |
|
228 |
this.txtZ.setEnabled(false); |
|
229 |
this.txtM.setEnabled(false); |
|
230 |
|
|
231 |
this.lblX.setEnabled(false); |
|
232 |
this.lblY.setEnabled(false); |
|
233 |
this.lblZ.setEnabled(false); |
|
234 |
this.lblM.setEnabled(false); |
|
235 |
} |
|
236 |
} |
|
237 |
|
|
238 |
public void setPoint(Point point) { |
|
239 |
if( point == null ) { |
|
240 |
this.pickerX.set(null); |
|
241 |
this.pickerY.set(null); |
|
242 |
this.pickerZ.set(null); |
|
243 |
this.pickerM.set(null); |
|
244 |
return; |
|
245 |
} |
|
246 |
this.pickerX.set( point.getX() ); |
|
247 |
this.pickerY.set( point.getY() ); |
|
248 |
GeometryType theGeomType = point.getGeometryType(); |
|
249 |
if( theGeomType.hasZ() ) { |
|
250 |
this.pickerZ.set(point.getCoordinateAt(Geometry.DIMENSIONS.Z)); |
|
251 |
} |
|
252 |
if( theGeomType.hasM() ) { |
|
253 |
this.pickerM.set(point.getCoordinateAt(point.getDimension()-1)); |
|
254 |
} |
|
255 |
} |
|
256 |
|
|
257 |
private void addHierarchyChanged() { |
|
258 |
this.txtX.addHierarchyListener(new DefaultHierarchyListener()); |
|
259 |
} |
|
260 |
|
|
71 | 261 |
/** |
72 | 262 |
* @return this as JComponent |
73 | 263 |
*/ |
... | ... | |
80 | 270 |
* @return String value of coordinate i |
81 | 271 |
*/ |
82 | 272 |
public String getValue(int i) { |
83 |
return getCoordinateTextField(i).getText();
|
|
273 |
return Objects.toString(this.pickers[i].get(),"");
|
|
84 | 274 |
} |
85 | 275 |
|
86 | 276 |
/** |
... | ... | |
88 | 278 |
* @param value |
89 | 279 |
*/ |
90 | 280 |
public void setValue(int i, String value) { |
91 |
getCoordinateTextField(i).setText(value); |
|
281 |
if( StringUtils.isBlank(value) ) { |
|
282 |
this.pickers[i].set(null); |
|
283 |
return; |
|
284 |
} |
|
285 |
this.pickers[i].coerceAndSet(value); |
|
92 | 286 |
} |
93 | 287 |
} |
Also available in: Unified diff