diff --git a/extras/src/main/java/edu/umd/cs/piccolox/event/PSelectionEventHandler.java b/extras/src/main/java/edu/umd/cs/piccolox/event/PSelectionEventHandler.java index 5cb5318..f645775 100644 --- a/extras/src/main/java/edu/umd/cs/piccolox/event/PSelectionEventHandler.java +++ b/extras/src/main/java/edu/umd/cs/piccolox/event/PSelectionEventHandler.java @@ -783,13 +783,14 @@ * @param e the key press event */ public void keyPressed(final PInputEvent e) { - if (e.getKeyCode() == KeyEvent.VK_DELETE && deleteKeyActive) { + if (e.getKeyCode() == KeyEvent.VK_DELETE && deleteKeyActive && !selection.isEmpty()) { final Iterator selectionEn = selection.keySet().iterator(); while (selectionEn.hasNext()) { final PNode node = (PNode) selectionEn.next(); node.removeFromParent(); } selection.clear(); + postSelectionChanged(); } } diff --git a/extras/src/test/java/edu/umd/cs/piccolox/event/PSelectionEventHandlerTest.java b/extras/src/test/java/edu/umd/cs/piccolox/event/PSelectionEventHandlerTest.java index 24468c8..22e9db0 100755 --- a/extras/src/test/java/edu/umd/cs/piccolox/event/PSelectionEventHandlerTest.java +++ b/extras/src/test/java/edu/umd/cs/piccolox/event/PSelectionEventHandlerTest.java @@ -54,6 +54,24 @@ selectionChanged = false; } + public void testSelectionChange() + { + PCanvas canvas = new PCanvas(); + PLayer layer = canvas.getLayer(); + PNode node = new PNode(); + layer.addChild(node); + + PSelectionEventHandler selectionHandler = new PSelectionEventHandler(layer, layer); + assertTrue(selectionHandler.getSelectionReference().isEmpty()); + + PNotificationCenter notificationCenter = PNotificationCenter.defaultCenter(); + notificationCenter.addListener(this, "selectionChanged", PSelectionEventHandler.SELECTION_CHANGED_NOTIFICATION, null); + + selectionHandler.select(node); + assertTrue(selectionHandler.getSelectionReference().contains(node)); + assertTrue(selectionChanged); + } + /** * {@link http://code.google.com/p/piccolo2d/issues/detail?id=177} */ @@ -76,15 +94,56 @@ PInputEvent event = new PInputEvent(null, keyEvent); selectionHandler.keyPressed(event); assertTrue(selectionHandler.getSelectionReference().isEmpty()); + assertTrue(selectionChanged); + } - // fix this assertion to fix issue 177 linked above - //assertTrue(selectionChanged); + public void testKeyboardDeleteInactive() + { + PCanvas canvas = new PCanvas(); + PLayer layer = canvas.getLayer(); + PNode node = new PNode(); + layer.addChild(node); + + PSelectionEventHandler selectionHandler = new PSelectionEventHandler(layer, layer); + selectionHandler.setDeleteKeyActive(false); + selectionHandler.select(node); + assertTrue(selectionHandler.getSelectionReference().contains(node)); + + PNotificationCenter notificationCenter = PNotificationCenter.defaultCenter(); + notificationCenter.addListener(this, "selectionChanged", PSelectionEventHandler.SELECTION_CHANGED_NOTIFICATION, null); + + KeyEvent keyEvent = new KeyEvent(canvas, -1, System.currentTimeMillis(), 0, KeyEvent.VK_DELETE); + PInputEvent event = new PInputEvent(null, keyEvent); + selectionHandler.keyPressed(event); + assertTrue(selectionHandler.getSelectionReference().contains(node)); + assertFalse(selectionChanged); + } + + public void testKeyboardDeleteEmptySelection() + { + PCanvas canvas = new PCanvas(); + PLayer layer = canvas.getLayer(); + + PSelectionEventHandler selectionHandler = new PSelectionEventHandler(layer, layer); + selectionHandler.setDeleteKeyActive(true); + assertTrue(selectionHandler.getSelectionReference().isEmpty()); + + PNotificationCenter notificationCenter = PNotificationCenter.defaultCenter(); + notificationCenter.addListener(this, "selectionChanged", PSelectionEventHandler.SELECTION_CHANGED_NOTIFICATION, null); + + KeyEvent keyEvent = new KeyEvent(canvas, -1, System.currentTimeMillis(), 0, KeyEvent.VK_DELETE); + PInputEvent event = new PInputEvent(null, keyEvent); + selectionHandler.keyPressed(event); + assertTrue(selectionHandler.getSelectionReference().isEmpty()); + assertFalse(selectionChanged); } /** * Selection changed, called by PNotificationCenter. + * + * @param notification notification */ - public void selectionChanged() + public void selectionChanged(final PNotification notification) { this.selectionChanged = true; }