Revision: 711
Author: allain.lalonde
Date: Wed Oct 14 14:57:34 2009
Log: CheckStyle hunting in PSWTBoundsHandle
http://code.google.com/p/piccolo2d/source/detail?r=711
Modified:
/piccolo2d.java/trunk/swt/src/main/java/edu/umd/cs/piccolox/swt/PSWTBoundsHandle.java
=======================================
---
/piccolo2d.java/trunk/swt/src/main/java/edu/umd/cs/piccolox/swt/PSWTBoundsHandle.java
Thu Jul 30 14:59:39 2009
+++
/piccolo2d.java/trunk/swt/src/main/java/edu/umd/cs/piccolox/swt/PSWTBoundsHandle.java
Wed Oct 14 14:57:34 2009
@@ -56,100 +56,142 @@
* @author Jesse Grosjean
*/
public class PSWTBoundsHandle extends PSWTHandle {
-
- /**
- *
- */
+ private final class HandleCursorEventHandler extends
PBasicInputEventHandler {
+ boolean cursorPushed = false;
+
+ public void mouseEntered(final PInputEvent aEvent) {
+ if (!cursorPushed) {
+ aEvent.pushCursor(getCursorFor(((PBoundsLocator)
getLocator()).getSide()));
+ cursorPushed = true;
+ }
+ }
+
+ public void mouseExited(final PInputEvent aEvent) {
+ final PPickPath focus =
aEvent.getInputManager().getMouseFocus();
+
+ if (cursorPushed && isNewFocus(focus)) {
+ aEvent.popCursor();
+ cursorPushed = false;
+ }
+ }
+
+ private boolean isNewFocus(final PPickPath focus) {
+ return (focus == null || focus.getPickedNode() !=
PSWTBoundsHandle.this);
+ }
+
+ public void mouseReleased(final PInputEvent event) {
+ if (cursorPushed) {
+ event.popCursor();
+ cursorPushed = false;
+ }
+ }
+ }
+
private static final long serialVersionUID = 1L;
private PBasicInputEventHandler handleCursorHandler;
- public static void addBoundsHandlesTo(final PNode aNode) {
- aNode.addChild(new
PSWTBoundsHandle(PBoundsLocator.createEastLocator(aNode)));
- aNode.addChild(new
PSWTBoundsHandle(PBoundsLocator.createWestLocator(aNode)));
- aNode.addChild(new
PSWTBoundsHandle(PBoundsLocator.createNorthLocator(aNode)));
- aNode.addChild(new
PSWTBoundsHandle(PBoundsLocator.createSouthLocator(aNode)));
- aNode.addChild(new
PSWTBoundsHandle(PBoundsLocator.createNorthEastLocator(aNode)));
- aNode.addChild(new
PSWTBoundsHandle(PBoundsLocator.createNorthWestLocator(aNode)));
- aNode.addChild(new
PSWTBoundsHandle(PBoundsLocator.createSouthEastLocator(aNode)));
- aNode.addChild(new
PSWTBoundsHandle(PBoundsLocator.createSouthWestLocator(aNode)));
+ /**
+ * Adds bounds handles to all corners and edges of the provided node.
+ *
+ * @param node to decorate with bounds handles.
+ */
+ public static void addBoundsHandlesTo(final PNode node) {
+ node.addChild(new
PSWTBoundsHandle(PBoundsLocator.createEastLocator(node)));
+ node.addChild(new
PSWTBoundsHandle(PBoundsLocator.createWestLocator(node)));
+ node.addChild(new
PSWTBoundsHandle(PBoundsLocator.createNorthLocator(node)));
+ node.addChild(new
PSWTBoundsHandle(PBoundsLocator.createSouthLocator(node)));
+ node.addChild(new
PSWTBoundsHandle(PBoundsLocator.createNorthEastLocator(node)));
+ node.addChild(new
PSWTBoundsHandle(PBoundsLocator.createNorthWestLocator(node)));
+ node.addChild(new
PSWTBoundsHandle(PBoundsLocator.createSouthEastLocator(node)));
+ node.addChild(new
PSWTBoundsHandle(PBoundsLocator.createSouthWestLocator(node)));
}
- public static void addStickyBoundsHandlesTo(final PNode aNode, final
PCamera camera) {
- camera.addChild(new
PSWTBoundsHandle(PBoundsLocator.createEastLocator(aNode)));
- camera.addChild(new
PSWTBoundsHandle(PBoundsLocator.createWestLocator(aNode)));
- camera.addChild(new
PSWTBoundsHandle(PBoundsLocator.createNorthLocator(aNode)));
- camera.addChild(new
PSWTBoundsHandle(PBoundsLocator.createSouthLocator(aNode)));
- camera.addChild(new
PSWTBoundsHandle(PBoundsLocator.createNorthEastLocator(aNode)));
- camera.addChild(new
PSWTBoundsHandle(PBoundsLocator.createNorthWestLocator(aNode)));
- camera.addChild(new
PSWTBoundsHandle(PBoundsLocator.createSouthEastLocator(aNode)));
- camera.addChild(new
PSWTBoundsHandle(PBoundsLocator.createSouthWestLocator(aNode)));
+ /**
+ * Adds sticky bounds handles to all corners and edges of the provided
node
+ * and for display on the provided camera.
+ *
+ * @param node to decorate with bounds handles.
+ * @param camera camera onto which the handles should be stuck
+ */
+ public static void addStickyBoundsHandlesTo(final PNode node, final
PCamera camera) {
+ camera.addChild(new
PSWTBoundsHandle(PBoundsLocator.createEastLocator(node)));
+ camera.addChild(new
PSWTBoundsHandle(PBoundsLocator.createWestLocator(node)));
+ camera.addChild(new
PSWTBoundsHandle(PBoundsLocator.createNorthLocator(node)));
+ camera.addChild(new
PSWTBoundsHandle(PBoundsLocator.createSouthLocator(node)));
+ camera.addChild(new
PSWTBoundsHandle(PBoundsLocator.createNorthEastLocator(node)));
+ camera.addChild(new
PSWTBoundsHandle(PBoundsLocator.createNorthWestLocator(node)));
+ camera.addChild(new
PSWTBoundsHandle(PBoundsLocator.createSouthEastLocator(node)));
+ camera.addChild(new
PSWTBoundsHandle(PBoundsLocator.createSouthWestLocator(node)));
}
- public static void removeBoundsHandlesFrom(final PNode aNode) {
+ /**
+ * Removes all bounds handles from the specified node.
+ *
+ * @param node node from which to remove bounds handles
+ */
+ public static void removeBoundsHandlesFrom(final PNode node) {
final ArrayList handles = new ArrayList();
- final Iterator i = aNode.getChildrenIterator();
+ final Iterator i = node.getChildrenIterator();
while (i.hasNext()) {
final PNode each = (PNode) i.next();
if (each instanceof PSWTBoundsHandle) {
handles.add(each);
}
}
- aNode.removeChildren(handles);
+ node.removeChildren(handles);
}
- public PSWTBoundsHandle(final PBoundsLocator aLocator) {
- super(aLocator);
+ /**
+ * Creates a bounds handle that will use the provided bounds locator to
+ * position itself.
+ *
+ * @param locator locator to use when positioning this handle
+ */
+ public PSWTBoundsHandle(final PBoundsLocator locator) {
+ super(locator);
}
+ /**
+ * Installs handlers responsible for updating the attached node's
bounds and
+ * for updating the cursor when the mous enters a handle.
+ */
protected void installHandleEventHandlers() {
super.installHandleEventHandlers();
- handleCursorHandler = new PBasicInputEventHandler() {
- boolean cursorPushed = false;
-
- public void mouseEntered(final PInputEvent aEvent) {
- if (!cursorPushed) {
- aEvent.pushCursor(getCursorFor(((PBoundsLocator)
getLocator()).getSide()));
- cursorPushed = true;
- }
- }
-
- public void mouseExited(final PInputEvent aEvent) {
- final PPickPath focus =
aEvent.getInputManager().getMouseFocus();
-
- if (cursorPushed && isNewFocus(focus)) {
- aEvent.popCursor();
- cursorPushed = false;
- }
- }
-
- private boolean isNewFocus(final PPickPath focus) {
- return (focus == null || focus.getPickedNode() !=
PSWTBoundsHandle.this);
- }
-
- public void mouseReleased(final PInputEvent event) {
- if (cursorPushed) {
- event.popCursor();
- cursorPushed = false;
- }
- }
- };
+ handleCursorHandler = new HandleCursorEventHandler();
addInputEventListener(handleCursorHandler);
}
/**
* Return the event handler that is responsible for setting the mouse
cursor
* when it enters/exits this handle.
+ *
+ * @return handler responsible for keeping the mouse cursor up to date
*/
public PBasicInputEventHandler getHandleCursorEventHandler() {
return handleCursorHandler;
}
+ /**
+ * Callback invoked when the user has started to drag a handle.
+ *
+ * @param aLocalPoint point in the handle's coordinate system at which
the
+ * drag was started
+ * @param aEvent Piccolo2d Event representing the start of the drag
+ */
public void startHandleDrag(final Point2D aLocalPoint, final
PInputEvent aEvent) {
final PBoundsLocator l = (PBoundsLocator) getLocator();
l.getNode().startResizeBounds();
}
+ /**
+ * Callback invoked when the user is dragging the handle. Updates the
+ * associated node appropriately.
+ *
+ * @param aLocalDimension magnitude of drag in the handle's coordinate
+ * system
+ * @param aEvent Piccolo2d Event representing the start of the drag
+ */
public void dragHandle(final PDimension aLocalDimension, final
PInputEvent aEvent) {
final PBoundsLocator l = (PBoundsLocator) getLocator();
@@ -199,6 +241,8 @@
case SwingConstants.SOUTH_EAST:
b.setRect(b.x, b.y, b.width + dx, b.height + dy);
break;
+ default:
+ // Leave bounds untouched
}
boolean flipX = false;
@@ -223,6 +267,13 @@
n.setBounds(b);
}
+ /**
+ * Callback invoked when the handle stops being dragged.
+ *
+ * @param aLocalPoint point in the handle's coordinate system at which
the
+ * drag was stopped
+ * @param aEvent Piccolo2d Event representing the stop of the drag
+ */
public void endHandleDrag(final Point2D aLocalPoint, final PInputEvent
aEvent) {
final PBoundsLocator l = (PBoundsLocator) getLocator();
l.getNode().endResizeBounds();
@@ -238,98 +289,107 @@
}
}
+ /**
+ * Flips the handles around if needed. this is necessary since a node
can
+ * become inverted when it's width or height becomes negative.
+ *
+ * @param flipX whether to allow flipping in the horizontal direction
+ * @param flipY whether to allow flipping in the vertical direction
+ */
public void flipHandleIfNeeded(final boolean flipX, final boolean
flipY) {
- final PBoundsLocator l = (PBoundsLocator) getLocator();
-
- if (flipX || flipY) {
- switch (l.getSide()) {
- case SwingConstants.NORTH: {
- if (flipY) {
- l.setSide(SwingConstants.SOUTH);
- }
- break;
- }
-
- case SwingConstants.SOUTH: {
- if (flipY) {
- l.setSide(SwingConstants.NORTH);
- }
- break;
- }
-
- case SwingConstants.EAST: {
- if (flipX) {
- l.setSide(SwingConstants.WEST);
- }
- break;
- }
-
- case SwingConstants.WEST: {
- if (flipX) {
- l.setSide(SwingConstants.EAST);
- }
- break;
- }
-
- case SwingConstants.NORTH_WEST: {
- if (flipX && flipY) {
- l.setSide(SwingConstants.SOUTH_EAST);
- }
- else if (flipX) {
- l.setSide(SwingConstants.NORTH_EAST);
- }
- else if (flipY) {
- l.setSide(SwingConstants.SOUTH_WEST);
- }
-
- break;
- }
-
- case SwingConstants.SOUTH_WEST: {
- if (flipX && flipY) {
- l.setSide(SwingConstants.NORTH_EAST);
- }
- else if (flipX) {
- l.setSide(SwingConstants.SOUTH_EAST);
- }
- else if (flipY) {
- l.setSide(SwingConstants.NORTH_WEST);
- }
- break;
- }
-
- case SwingConstants.NORTH_EAST: {
- if (flipX && flipY) {
- l.setSide(SwingConstants.SOUTH_WEST);
- }
- else if (flipX) {
- l.setSide(SwingConstants.NORTH_WEST);
- }
- else if (flipY) {
- l.setSide(SwingConstants.SOUTH_EAST);
- }
- break;
- }
-
- case SwingConstants.SOUTH_EAST: {
- if (flipX && flipY) {
- l.setSide(SwingConstants.NORTH_WEST);
- }
- else if (flipX) {
- l.setSide(SwingConstants.SOUTH_WEST);
- }
- else if (flipY) {
- l.setSide(SwingConstants.NORTH_EAST);
- }
- break;
- }
- }
+ if (!flipX && !flipY) {
+ return;
+ }
+
+ final PBoundsLocator l = (PBoundsLocator) getLocator();
+ switch (l.getSide()) {
+ case SwingConstants.NORTH:
+ if (flipY) {
+ l.setSide(SwingConstants.SOUTH);
+ }
+ break;
+
+ case SwingConstants.SOUTH:
+ if (flipY) {
+ l.setSide(SwingConstants.NORTH);
+ }
+ break;
+
+ case SwingConstants.EAST:
+ if (flipX) {
+ l.setSide(SwingConstants.WEST);
+ }
+ break;
+
+ case SwingConstants.WEST:
+ if (flipX) {
+ l.setSide(SwingConstants.EAST);
+ }
+ break;
+
+ case SwingConstants.NORTH_WEST:
+ if (flipX && flipY) {
+ l.setSide(SwingConstants.SOUTH_EAST);
+ }
+ else if (flipX) {
+ l.setSide(SwingConstants.NORTH_EAST);
+ }
+ else if (flipY) {
+ l.setSide(SwingConstants.SOUTH_WEST);
+ }
+ break;
+
+ case SwingConstants.SOUTH_WEST:
+ if (flipX && flipY) {
+ l.setSide(SwingConstants.NORTH_EAST);
+ }
+ else if (flipX) {
+ l.setSide(SwingConstants.SOUTH_EAST);
+ }
+ else if (flipY) {
+ l.setSide(SwingConstants.NORTH_WEST);
+ }
+ break;
+
+ case SwingConstants.NORTH_EAST:
+ if (flipX && flipY) {
+ l.setSide(SwingConstants.SOUTH_WEST);
+ }
+ else if (flipX) {
+ l.setSide(SwingConstants.NORTH_WEST);
+ }
+ else if (flipY) {
+ l.setSide(SwingConstants.SOUTH_EAST);
+ }
+ break;
+
+ case SwingConstants.SOUTH_EAST:
+ if (flipX && flipY) {
+ l.setSide(SwingConstants.NORTH_WEST);
+ }
+ else if (flipX) {
+ l.setSide(SwingConstants.SOUTH_WEST);
+ }
+ else if (flipY) {
+ l.setSide(SwingConstants.NORTH_EAST);
+ }
+ break;
+ default:
+ // Do nothing
}
// reset locator to update layout
setLocator(l);
}
+ /**
+ * Returns an appropriate cursor to display when the mouse is over a
handle
+ * on the side provided.
+ *
+ * @param side value from SwingConstants
+ *
+ * @return Appropriate cursor, or null if no appropriate cursor can be
found
+ */
public Cursor getCursorFor(final int side) {
switch (side) {
case SwingConstants.NORTH:
@@ -355,7 +415,8 @@
case SwingConstants.SOUTH_EAST:
return new Cursor(Cursor.SE_RESIZE_CURSOR);
- }
- return null;
+ default:
+ return null;
+ }
}
}
--~--~---------~--~----~------------~-------~--~----~
Piccolo2D Developers Group: http://groups.google.com/group/piccolo2d-dev?hl=en
-~----------~----~----~----~------~----~------~--~---