Revisão | d26e81a1ae8a4cbc4c09bd89652a71ee80feb721 (tree) |
---|---|
Hora | 2021-06-04 03:27:32 |
Autor | sebastian_bugiu |
Commiter | sebastian_bugiu |
Now key event handling is working.
@@ -44,13 +44,7 @@ | ||
44 | 44 | import javafx.beans.property.SimpleObjectProperty; |
45 | 45 | import javafx.event.EventHandler; |
46 | 46 | import javafx.geometry.Point3D; |
47 | -import javafx.scene.AmbientLight; | |
48 | -import javafx.scene.Group; | |
49 | -import javafx.scene.Node; | |
50 | -import javafx.scene.Parent; | |
51 | -import javafx.scene.PerspectiveCamera; | |
52 | -import javafx.scene.PointLight; | |
53 | -import javafx.scene.SubScene; | |
47 | +import javafx.scene.*; | |
54 | 48 | import javafx.scene.control.Toggle; |
55 | 49 | import javafx.scene.control.ToggleButton; |
56 | 50 | import javafx.scene.input.*; |
@@ -78,6 +72,11 @@ | ||
78 | 72 | TRANSLATION, ROTATION, SCALING; |
79 | 73 | } |
80 | 74 | |
75 | + private Modifier currentModifier = Modifier.TRANSLATION; | |
76 | + private Node currentIntersectedNode; | |
77 | + private double currentIntersectedNodeDistance; | |
78 | + private Point3D currentIntersectedNodeInitialPos; | |
79 | + | |
81 | 80 | private AmbientLight ambientLight = new AmbientLight(Color.DARKGREY); |
82 | 81 | private SimpleBooleanProperty ambientLightEnabled = new SimpleBooleanProperty(false) { |
83 | 82 | @Override |
@@ -125,183 +124,7 @@ | ||
125 | 124 | @SuppressWarnings({ "unused" }) |
126 | 125 | private double dragStartX, dragStartY, |
127 | 126 | dragStartRotateX, dragStartRotateY; |
128 | - private final EventHandler<KeyEvent> keyEventHandler = event -> { | |
129 | - /* | |
130 | - if (!Double.isNaN(event.getZoomFactor()) && event.getZoomFactor() > 0.8 && event.getZoomFactor() < 1.2) { | |
131 | - double z = cameraPosition.getZ()/event.getZoomFactor(); | |
132 | - z = Math.max(z,-1000); | |
133 | - z = Math.min(z,0); | |
134 | - cameraPosition.setZ(z); | |
135 | - } | |
136 | - */ | |
137 | - System.out.println("KeyEvent ..."); | |
138 | - Timeline timeline = getTimeline(); | |
139 | - Duration currentTime; | |
140 | - double CONTROL_MULTIPLIER = 0.1; | |
141 | - double SHIFT_MULTIPLIER = 0.1; | |
142 | - double ALT_MULTIPLIER = 0.5; | |
143 | - //System.out.println("--> handleKeyboard>handle"); | |
144 | - | |
145 | - // event.getEventType(); | |
146 | - | |
147 | - switch (event.getCode()) { | |
148 | - case F: | |
149 | - if (event.isControlDown()) { | |
150 | - //onButtonSave(); | |
151 | - } | |
152 | - break; | |
153 | - case O: | |
154 | - if (event.isControlDown()) { | |
155 | - //onButtonLoad(); | |
156 | - } | |
157 | - break; | |
158 | - case Z: | |
159 | - if (event.isShiftDown()) { | |
160 | - cameraXform.ry.setAngle(0.0); | |
161 | - cameraXform.rx.setAngle(0.0); | |
162 | - camera.setTranslateZ(-300.0); | |
163 | - } | |
164 | - cameraXform2.t.setX(0.0); | |
165 | - cameraXform2.t.setY(0.0); | |
166 | - break; | |
167 | - /* | |
168 | - case SPACE: | |
169 | - if (timelinePlaying) { | |
170 | - timeline.pause(); | |
171 | - timelinePlaying = false; | |
172 | - } | |
173 | - else { | |
174 | - timeline.play(); | |
175 | - timelinePlaying = true; | |
176 | - } | |
177 | - break; | |
178 | - */ | |
179 | - case UP: | |
180 | - if (event.isControlDown() | |
181 | - && event.isShiftDown()) { | |
182 | - cameraXform2.t.setY(cameraXform2.t.getY() | |
183 | - - 10.0 | |
184 | - * CONTROL_MULTIPLIER); | |
185 | - } else if (event.isAltDown() | |
186 | - && event.isShiftDown()) { | |
187 | - cameraXform.rx.setAngle(cameraXform.rx.getAngle() | |
188 | - - 10.0 | |
189 | - * ALT_MULTIPLIER); | |
190 | - } else if (event.isControlDown()) { | |
191 | - cameraXform2.t.setY(cameraXform2.t.getY() | |
192 | - - 1.0 | |
193 | - * CONTROL_MULTIPLIER); | |
194 | - } else if (event.isAltDown()) { | |
195 | - cameraXform.rx.setAngle(cameraXform.rx.getAngle() | |
196 | - - 2.0 | |
197 | - * ALT_MULTIPLIER); | |
198 | - } else if (event.isShiftDown()) { | |
199 | - double z = camera.getTranslateZ(); | |
200 | - double newZ = z | |
201 | - + 5.0 | |
202 | - * SHIFT_MULTIPLIER; | |
203 | - camera.setTranslateZ(newZ); | |
204 | - } | |
205 | - break; | |
206 | - case DOWN: | |
207 | - if (event.isControlDown() | |
208 | - && event.isShiftDown()) { | |
209 | - cameraXform2.t.setY(cameraXform2.t.getY() | |
210 | - + 10.0 | |
211 | - * CONTROL_MULTIPLIER); | |
212 | - } else if (event.isAltDown() | |
213 | - && event.isShiftDown()) { | |
214 | - cameraXform.rx.setAngle(cameraXform.rx.getAngle() | |
215 | - + 10.0 | |
216 | - * ALT_MULTIPLIER); | |
217 | - } else if (event.isControlDown()) { | |
218 | - cameraXform2.t.setY(cameraXform2.t.getY() | |
219 | - + 1.0 | |
220 | - * CONTROL_MULTIPLIER); | |
221 | - } else if (event.isAltDown()) { | |
222 | - cameraXform.rx.setAngle(cameraXform.rx.getAngle() | |
223 | - + 2.0 | |
224 | - * ALT_MULTIPLIER); | |
225 | - } else if (event.isShiftDown()) { | |
226 | - double z = camera.getTranslateZ(); | |
227 | - double newZ = z | |
228 | - - 5.0 | |
229 | - * SHIFT_MULTIPLIER; | |
230 | - camera.setTranslateZ(newZ); | |
231 | - } | |
232 | - break; | |
233 | - case RIGHT: | |
234 | - if (event.isControlDown() | |
235 | - && event.isShiftDown()) { | |
236 | - cameraXform2.t.setX(cameraXform2.t.getX() | |
237 | - + 10.0 | |
238 | - * CONTROL_MULTIPLIER); | |
239 | - } else if (event.isAltDown() | |
240 | - && event.isShiftDown()) { | |
241 | - cameraXform.ry.setAngle(cameraXform.ry.getAngle() | |
242 | - - 10.0 | |
243 | - * ALT_MULTIPLIER); | |
244 | - } else if (event.isControlDown()) { | |
245 | - cameraXform2.t.setX(cameraXform2.t.getX() | |
246 | - + 1.0 | |
247 | - * CONTROL_MULTIPLIER); | |
248 | - } else if (event.isShiftDown()) { | |
249 | - currentTime = timeline.getCurrentTime(); | |
250 | - timeline.jumpTo(Frame.frame(Math.round(Frame.toFrame(currentTime) | |
251 | - / 10.0) | |
252 | - * 10 | |
253 | - + 10)); | |
254 | - // timeline.jumpTo(Duration.seconds(currentTime.toSeconds() + ONE_FRAME)); | |
255 | - } else if (event.isAltDown()) { | |
256 | - cameraXform.ry.setAngle(cameraXform.ry.getAngle() | |
257 | - - 2.0 | |
258 | - * ALT_MULTIPLIER); | |
259 | - } else { | |
260 | - currentTime = timeline.getCurrentTime(); | |
261 | - timeline.jumpTo(Frame.frame(Frame.toFrame(currentTime) | |
262 | - + 1)); | |
263 | - // timeline.jumpTo(Duration.seconds(currentTime.toSeconds() + ONE_FRAME)); | |
264 | - } | |
265 | - break; | |
266 | - case LEFT: | |
267 | - if (event.isControlDown() | |
268 | - && event.isShiftDown()) { | |
269 | - cameraXform2.t.setX(cameraXform2.t.getX() | |
270 | - - 10.0 | |
271 | - * CONTROL_MULTIPLIER); | |
272 | - } else if (event.isAltDown() | |
273 | - && event.isShiftDown()) { | |
274 | - cameraXform.ry.setAngle(cameraXform.ry.getAngle() | |
275 | - + 10.0 | |
276 | - * ALT_MULTIPLIER); // - | |
277 | - } else if (event.isControlDown()) { | |
278 | - cameraXform2.t.setX(cameraXform2.t.getX() | |
279 | - - 1.0 | |
280 | - * CONTROL_MULTIPLIER); | |
281 | - } else if (event.isShiftDown()) { | |
282 | - currentTime = timeline.getCurrentTime(); | |
283 | - timeline.jumpTo(Frame.frame(Math.round(Frame.toFrame(currentTime) | |
284 | - / 10.0) | |
285 | - * 10 | |
286 | - - 10)); | |
287 | - // timeline.jumpTo(Duration.seconds(currentTime.toSeconds() - ONE_FRAME)); | |
288 | - } else if (event.isAltDown()) { | |
289 | - cameraXform.ry.setAngle(cameraXform.ry.getAngle() | |
290 | - + 2.0 | |
291 | - * ALT_MULTIPLIER); // - | |
292 | - } else { | |
293 | - currentTime = timeline.getCurrentTime(); | |
294 | - timeline.jumpTo(Frame.frame(Frame.toFrame(currentTime) | |
295 | - - 1)); | |
296 | - // timeline.jumpTo(Duration.seconds(currentTime.toSeconds() - ONE_FRAME)); | |
297 | - } | |
298 | - break; | |
299 | - default: | |
300 | - break; | |
301 | - } | |
302 | - //System.out.println(cameraXform.getTranslateX() + ", " + cameraXform.getTranslateY() + ", " + cameraXform.getTranslateZ()); | |
303 | - | |
304 | - }; | |
127 | + private EventHandler<KeyEvent> keyEventHandler; | |
305 | 128 | private PointLight light1 = new PointLight(Color.WHITE); |
306 | 129 | private SimpleBooleanProperty light1Enabled = new SimpleBooleanProperty(false) { |
307 | 130 | @Override |
@@ -450,18 +273,15 @@ | ||
450 | 273 | cameraPosition.setZ(z); |
451 | 274 | } |
452 | 275 | }; |
453 | - private Modifier currentModifier = Modifier.TRANSLATION; | |
454 | - private Node currentIntersectedNode; | |
455 | - private double currentIntersectedNodeDistance; | |
456 | - private Point3D currentIntersectedNodeInitialPos; | |
276 | + | |
457 | 277 | |
458 | 278 | |
459 | 279 | private HashMap<Node, NodeData> nodeMap = new HashMap<>(); |
460 | 280 | |
461 | 281 | { |
462 | 282 | contentProperty().addListener((ov, oldContent, newContent) -> { |
463 | - autoScalingGroup.getChildren() | |
464 | - .remove(oldContent); | |
283 | +// autoScalingGroup.getChildren() | |
284 | +// .remove(oldContent); | |
465 | 285 | autoScalingGroup.getChildren() |
466 | 286 | .add(newContent); |
467 | 287 | setWireFrame(newContent, wireframe); |
@@ -472,6 +292,181 @@ | ||
472 | 292 | }); |
473 | 293 | } |
474 | 294 | { |
295 | + keyEventHandler = event -> { | |
296 | + System.out.println("KeyEvent ..."); | |
297 | + Timeline timeline = getTimeline(); | |
298 | + Duration currentTime; | |
299 | + double CONTROL_MULTIPLIER = 0.1; | |
300 | + double SHIFT_MULTIPLIER = 0.1; | |
301 | + double ALT_MULTIPLIER = 0.5; | |
302 | + //System.out.println("--> handleKeyboard>handle"); | |
303 | + | |
304 | + // event.getEventType(); | |
305 | + | |
306 | + switch (event.getCode()) { | |
307 | + case F: | |
308 | + if (event.isControlDown()) { | |
309 | + //onButtonSave(); | |
310 | + } | |
311 | + break; | |
312 | + case O: | |
313 | + if (event.isControlDown()) { | |
314 | + //onButtonLoad(); | |
315 | + } | |
316 | + break; | |
317 | + case Z: | |
318 | + if (event.isShiftDown()) { | |
319 | + cameraXform.ry.setAngle(0.0); | |
320 | + cameraXform.rx.setAngle(0.0); | |
321 | + camera.setTranslateZ(-300.0); | |
322 | + } | |
323 | + cameraXform2.t.setX(0.0); | |
324 | + cameraXform2.t.setY(0.0); | |
325 | + break; | |
326 | + /* | |
327 | + case SPACE: | |
328 | + if (timelinePlaying) { | |
329 | + timeline.pause(); | |
330 | + timelinePlaying = false; | |
331 | + } | |
332 | + else { | |
333 | + timeline.play(); | |
334 | + timelinePlaying = true; | |
335 | + } | |
336 | + break; | |
337 | + */ | |
338 | + case UP: | |
339 | + if (event.isControlDown() | |
340 | + && event.isShiftDown()) { | |
341 | + cameraXform2.t.setY(cameraXform2.t.getY() | |
342 | + - 10.0 | |
343 | + * CONTROL_MULTIPLIER); | |
344 | + } else if (event.isAltDown() | |
345 | + && event.isShiftDown()) { | |
346 | + cameraXform.rx.setAngle(cameraXform.rx.getAngle() | |
347 | + - 10.0 | |
348 | + * ALT_MULTIPLIER); | |
349 | + } else if (event.isControlDown()) { | |
350 | + cameraXform2.t.setY(cameraXform2.t.getY() | |
351 | + - 1.0 | |
352 | + * CONTROL_MULTIPLIER); | |
353 | + } else if (event.isAltDown()) { | |
354 | + cameraXform.rx.setAngle(cameraXform.rx.getAngle() | |
355 | + - 2.0 | |
356 | + * ALT_MULTIPLIER); | |
357 | + } else if (event.isShiftDown()) { | |
358 | + double z = camera.getTranslateZ(); | |
359 | + double newZ = z | |
360 | + + 5.0 | |
361 | + * SHIFT_MULTIPLIER; | |
362 | + camera.setTranslateZ(newZ); | |
363 | + } | |
364 | + break; | |
365 | + case DOWN: | |
366 | + if (event.isControlDown() | |
367 | + && event.isShiftDown()) { | |
368 | + cameraXform2.t.setY(cameraXform2.t.getY() | |
369 | + + 10.0 | |
370 | + * CONTROL_MULTIPLIER); | |
371 | + } else if (event.isAltDown() | |
372 | + && event.isShiftDown()) { | |
373 | + cameraXform.rx.setAngle(cameraXform.rx.getAngle() | |
374 | + + 10.0 | |
375 | + * ALT_MULTIPLIER); | |
376 | + } else if (event.isControlDown()) { | |
377 | + cameraXform2.t.setY(cameraXform2.t.getY() | |
378 | + + 1.0 | |
379 | + * CONTROL_MULTIPLIER); | |
380 | + } else if (event.isAltDown()) { | |
381 | + cameraXform.rx.setAngle(cameraXform.rx.getAngle() | |
382 | + + 2.0 | |
383 | + * ALT_MULTIPLIER); | |
384 | + } else if (event.isShiftDown()) { | |
385 | + double z = camera.getTranslateZ(); | |
386 | + double newZ = z | |
387 | + - 5.0 | |
388 | + * SHIFT_MULTIPLIER; | |
389 | + camera.setTranslateZ(newZ); | |
390 | + } | |
391 | + break; | |
392 | + case RIGHT: | |
393 | + if (event.isControlDown() | |
394 | + && event.isShiftDown()) { | |
395 | + cameraXform2.t.setX(cameraXform2.t.getX() | |
396 | + + 10.0 | |
397 | + * CONTROL_MULTIPLIER); | |
398 | + } else if (event.isAltDown() | |
399 | + && event.isShiftDown()) { | |
400 | + cameraXform.ry.setAngle(cameraXform.ry.getAngle() | |
401 | + - 10.0 | |
402 | + * ALT_MULTIPLIER); | |
403 | + } else if (event.isControlDown()) { | |
404 | + cameraXform2.t.setX(cameraXform2.t.getX() | |
405 | + + 1.0 | |
406 | + * CONTROL_MULTIPLIER); | |
407 | + } else if (event.isShiftDown()) { | |
408 | + currentTime = timeline.getCurrentTime(); | |
409 | + timeline.jumpTo(Frame.frame(Math.round(Frame.toFrame(currentTime) | |
410 | + / 10.0) | |
411 | + * 10 | |
412 | + + 10)); | |
413 | + // timeline.jumpTo(Duration.seconds(currentTime.toSeconds() + ONE_FRAME)); | |
414 | + } else if (event.isAltDown()) { | |
415 | + cameraXform.ry.setAngle(cameraXform.ry.getAngle() | |
416 | + - 2.0 | |
417 | + * ALT_MULTIPLIER); | |
418 | + } else { | |
419 | + currentTime = timeline.getCurrentTime(); | |
420 | + timeline.jumpTo(Frame.frame(Frame.toFrame(currentTime) | |
421 | + + 1)); | |
422 | + // timeline.jumpTo(Duration.seconds(currentTime.toSeconds() + ONE_FRAME)); | |
423 | + } | |
424 | + break; | |
425 | + case LEFT: | |
426 | + if (event.isControlDown() | |
427 | + && event.isShiftDown()) { | |
428 | + cameraXform2.t.setX(cameraXform2.t.getX() | |
429 | + - 10.0 | |
430 | + * CONTROL_MULTIPLIER); | |
431 | + } else if (event.isAltDown() | |
432 | + && event.isShiftDown()) { | |
433 | + cameraXform.ry.setAngle(cameraXform.ry.getAngle() | |
434 | + + 10.0 | |
435 | + * ALT_MULTIPLIER); // - | |
436 | + } else if (event.isControlDown()) { | |
437 | + cameraXform2.t.setX(cameraXform2.t.getX() | |
438 | + - 1.0 | |
439 | + * CONTROL_MULTIPLIER); | |
440 | + } else if (event.isShiftDown()) { | |
441 | + currentTime = timeline.getCurrentTime(); | |
442 | + timeline.jumpTo(Frame.frame(Math.round(Frame.toFrame(currentTime) | |
443 | + / 10.0) | |
444 | + * 10 | |
445 | + - 10)); | |
446 | + // timeline.jumpTo(Duration.seconds(currentTime.toSeconds() - ONE_FRAME)); | |
447 | + } else if (event.isAltDown()) { | |
448 | + cameraXform.ry.setAngle(cameraXform.ry.getAngle() | |
449 | + + 2.0 | |
450 | + * ALT_MULTIPLIER); // - | |
451 | + } else { | |
452 | + currentTime = timeline.getCurrentTime(); | |
453 | + timeline.jumpTo(Frame.frame(Frame.toFrame(currentTime) | |
454 | + - 1)); | |
455 | + // timeline.jumpTo(Duration.seconds(currentTime.toSeconds() - ONE_FRAME)); | |
456 | + } | |
457 | + break; | |
458 | + case D: | |
459 | + if (currentIntersectedNode != null) { | |
460 | + autoScalingGroup.getChildren().remove(currentIntersectedNode); | |
461 | + resetCurrentIntersectedNode(); | |
462 | + } | |
463 | + break; | |
464 | + default: | |
465 | + break; | |
466 | + } | |
467 | + //System.out.println(cameraXform.getTranslateX() + ", " + cameraXform.getTranslateY() + ", " + cameraXform.getTranslateZ()); | |
468 | + | |
469 | + }; | |
475 | 470 | mouseEventHandler = event -> { |
476 | 471 | // System.out.println("MouseEvent ..."); |
477 | 472 |
@@ -496,9 +491,7 @@ | ||
496 | 491 | |
497 | 492 | PickResult pickResult = event.getPickResult(); |
498 | 493 | if (pickResult.getIntersectedNode() instanceof SubScene) { |
499 | - currentIntersectedNode = null; | |
500 | - currentIntersectedNodeDistance = -1.0; | |
501 | - currentIntersectedNodeInitialPos = null; | |
494 | + resetCurrentIntersectedNode(); | |
502 | 495 | } else { |
503 | 496 | currentIntersectedNode = pickResult.getIntersectedNode(); |
504 | 497 | if (currentIntersectedNode.getTransforms().size() == 0) { |
@@ -623,6 +616,12 @@ | ||
623 | 616 | }; |
624 | 617 | } |
625 | 618 | |
619 | + private void resetCurrentIntersectedNode() { | |
620 | + currentIntersectedNode = null; | |
621 | + currentIntersectedNodeDistance = -1.0; | |
622 | + currentIntersectedNodeInitialPos = null; | |
623 | + } | |
624 | + | |
626 | 625 | public ContentModel() { |
627 | 626 | // CAMERA |
628 | 627 | camera.setNearClip(1.0); // TODO: Workaround as per RT-31255 |
@@ -921,7 +920,7 @@ | ||
921 | 920 | zAxis.setMaterial(blueMaterial); |
922 | 921 | } |
923 | 922 | |
924 | - private void rebuildSubScene() { | |
923 | + public void rebuildSubScene() { | |
925 | 924 | SubScene oldSubScene = this.subScene.get(); |
926 | 925 | if (oldSubScene != null) { |
927 | 926 | oldSubScene.setRoot(new Region()); |
@@ -939,13 +938,19 @@ | ||
939 | 938 | subScene.setCamera(camera); |
940 | 939 | // SCENE EVENT HANDLING FOR CAMERA NAV |
941 | 940 | subScene.addEventHandler(MouseEvent.ANY, mouseEventHandler); |
941 | +// subScene.setOnKeyPressed(keyEventHandler); | |
942 | 942 | subScene.addEventHandler(KeyEvent.ANY, keyEventHandler); |
943 | - // subScene.addEventFilter(KeyEvent.ANY, keyEventHandler); | |
943 | +// subScene.addEventFilter(KeyEvent.ANY, keyEventHandler); | |
944 | 944 | subScene.addEventHandler(ZoomEvent.ANY, zoomEventHandler); |
945 | 945 | subScene.addEventHandler(ScrollEvent.ANY, scrollEventHandler); |
946 | + root3D.addEventHandler(KeyEvent.ANY, keyEventHandler); | |
947 | + root3D.setFocusTraversable(true); | |
946 | 948 | |
947 | - // Scene scene = subScene.getScene(); | |
948 | - // scene.addEventFilter(KeyEvent.ANY, keyEventHandler); | |
949 | + subScene.setOnKeyPressed(event -> System.out.println("subScene keyPressed")); | |
950 | + root3D.setOnKeyPressed(event -> System.out.println("root3d key pressed")); | |
951 | + | |
952 | +// Scene scene = subScene.getScene(); | |
953 | +// scene.addEventHandler(KeyEvent.ANY, keyEventHandler); | |
949 | 954 | |
950 | 955 | /* |
951 | 956 | subScene.sceneProperty().addListener(new ChangeListener() { |
@@ -74,11 +74,16 @@ | ||
74 | 74 | } |
75 | 75 | FXMLLoader loader = new FXMLLoader(); |
76 | 76 | loader.setLocation(getClass().getResource("/resources/com/javafx/experiments/jfx3dviewer/main.fxml")); |
77 | - Scene scene = new Scene(loader.<Parent> load(), | |
77 | + Parent parent = loader.<Parent>load(); | |
78 | + MainController controller = loader.getController(); | |
79 | + controller.setParent(parent); | |
80 | + Scene scene = new Scene(parent, | |
78 | 81 | 1024, 600); |
79 | 82 | stage.setScene(scene); |
80 | 83 | stage.show(); |
81 | 84 | |
85 | + controller.setFocusOnSplitPane(); | |
86 | + | |
82 | 87 | stage.setOnCloseRequest(event -> sessionManager.saveSession()); |
83 | 88 | |
84 | 89 | // org.scenicview.ScenicView.show(contentModel.getSubScene().getRoot()); |
@@ -64,6 +64,7 @@ | ||
64 | 64 | import javafx.scene.control.SplitPane; |
65 | 65 | import javafx.scene.control.ToggleButton; |
66 | 66 | import javafx.scene.input.Dragboard; |
67 | +import javafx.scene.input.KeyEvent; | |
67 | 68 | import javafx.scene.input.TransferMode; |
68 | 69 | import javafx.scene.layout.Region; |
69 | 70 | import javafx.scene.shape.Box; |
@@ -101,6 +102,8 @@ | ||
101 | 102 | private String[] supportedFormatRegex; |
102 | 103 | private TimelineController timelineController; |
103 | 104 | private int triangleCount = 0; |
105 | + private Parent parent; | |
106 | + private Parent navigationPanel; | |
104 | 107 | |
105 | 108 | public void export(ActionEvent event) { |
106 | 109 | FileChooser chooser = new FileChooser(); |
@@ -148,7 +151,7 @@ | ||
148 | 151 | public void initialize(URL location, ResourceBundle resources) { |
149 | 152 | try { |
150 | 153 | // CREATE NAVIGATOR CONTROLS |
151 | - Parent navigationPanel = FXMLLoader.load(MainController.class.getResource("/resources/com/javafx/experiments/jfx3dviewer/navigation.fxml")); | |
154 | + navigationPanel = FXMLLoader.load(MainController.class.getResource("/resources/com/javafx/experiments/jfx3dviewer/navigation.fxml")); | |
152 | 155 | // CREATE SETTINGS PANEL |
153 | 156 | settingsPanel = FXMLLoader.load(MainController.class.getResource("/resources/com/javafx/experiments/jfx3dviewer/settings.fxml")); |
154 | 157 | // SETUP SPLIT PANE |
@@ -359,4 +362,20 @@ | ||
359 | 362 | bounds.getWidth(), bounds.getHeight(), |
360 | 363 | bounds.getDepth())); |
361 | 364 | } |
365 | + | |
366 | + public void setParent(Parent parent) { | |
367 | + this.parent = parent; | |
368 | + } | |
369 | + | |
370 | + public Parent getParent() { | |
371 | + return parent; | |
372 | + } | |
373 | + | |
374 | + public void setFocusOnSplitPane() { | |
375 | + splitPane.requestFocus(); | |
376 | + contentModel.rebuildSubScene(); | |
377 | +// navigationPanel.requestFocus(); | |
378 | +// navigationPanel.setOnKeyPressed(event -> System.out.println("navigationPanel key pressed")); | |
379 | + contentModel.getSubScene().requestFocus(); | |
380 | + } | |
362 | 381 | } |
@@ -42,18 +42,18 @@ | ||
42 | 42 | <?import javafx.scene.paint.*?> |
43 | 43 | <?import com.javafx.experiments.jfx3dviewer.*?> |
44 | 44 | |
45 | -<VBox id="root" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns:fx="http://javafx.com/fxml" fx:controller="com.javafx.experiments.jfx3dviewer.MainController"> | |
45 | +<VBox id="root" focusTraversable="true" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/16" fx:controller="com.javafx.experiments.jfx3dviewer.MainController"> | |
46 | 46 | <ToolBar> |
47 | 47 | <items> |
48 | 48 | <SplitMenuButton fx:id="openMenuBtn" mnemonicParsing="false" onAction="#open" text="Open..."> |
49 | 49 | <items> |
50 | - <CheckMenuItem mnemonicParsing="false" text="Load as Polygons" fx:id="loadAsPolygonsCheckBox" /> | |
51 | - <CheckMenuItem mnemonicParsing="false" text="Optimize" fx:id="optimizeCheckBox" /> | |
50 | + <CheckMenuItem fx:id="loadAsPolygonsCheckBox" mnemonicParsing="false" text="Load as Polygons" /> | |
51 | + <CheckMenuItem fx:id="optimizeCheckBox" mnemonicParsing="false" text="Optimize" /> | |
52 | 52 | </items> |
53 | 53 | </SplitMenuButton> |
54 | 54 | <Button mnemonicParsing="false" onAction="#export" text="Export..." /> |
55 | 55 | <!--HBox.hgrow="ALWAYS"--> |
56 | - <Pane maxWidth="1.7976931348623157E308" prefHeight="-1.0" prefWidth="-1.0" HBox.hgrow="ALWAYS"/> | |
56 | + <Pane maxWidth="1.7976931348623157E308" prefHeight="-1.0" prefWidth="-1.0" HBox.hgrow="ALWAYS" /> | |
57 | 57 | <TimelineDisplay fx:id="timelineDisplay" /> |
58 | 58 | <HBox id="playControls" prefHeight="-1.0" prefWidth="-1.0"> |
59 | 59 | <children> |
@@ -95,7 +95,7 @@ | ||
95 | 95 | <ToggleButton fx:id="settingsBtn" mnemonicParsing="false" onAction="#toggleSettings" text="Settings" /> |
96 | 96 | </items> |
97 | 97 | </ToolBar> |
98 | - <SplitPane fx:id="splitPane" dividerPositions="" focusTraversable="true" prefHeight="160.0" prefWidth="200.0" VBox.vgrow="ALWAYS" /> | |
98 | + <SplitPane fx:id="splitPane" focusTraversable="true" prefHeight="160.0" prefWidth="200.0" VBox.vgrow="ALWAYS" /> | |
99 | 99 | <ToolBar id="statusBar" styleClass="bottom"> |
100 | 100 | <items> |
101 | 101 | <Label fx:id="status" text="Label" /> |