* Added <code>createAddCommand(ChangeBoundsRequest request, EditPart child, Object constraint)</code> as a replacement for <code>createAddCommand(EditPart child, Object constraint)</code>, which was in turn deprecated (this is now handled similar as in case of change constraint commands).

+

** Added <code>createAddCommand(ChangeBoundsRequest request, EditPart child, Object constraint)</code> as a replacement for <code>createAddCommand(EditPart child, Object constraint)</code>, which was in turn deprecated (this is now handled similar as in case of change constraint commands).

* Added <code>getConstraintFor(Request request, GraphicalEditPart child, Rectangle rectangle)</code>, which subsumes the duplicate code fragments located in <code>getConstraintFor(ChangeBoundsRequest request, GraphicalEditPart child)</code> and <code>getConstraintFor(CreateRequest request)</code> before (both of these methods now delegate to the new method).

+

** Added <code>getConstraintFor(Request request, GraphicalEditPart child, Rectangle rectangle)</code>, which subsumes the duplicate code fragments located in <code>getConstraintFor(ChangeBoundsRequest request, GraphicalEditPart child)</code> and <code>getConstraintFor(CreateRequest request)</code> before (both of these methods now delegate to the new method).

−

<code>XYLayoutEditPolicy</code> was changed to overwrite the

+

*<code>XYLayoutEditPolicy</code> was changed to overwrite the

−

* Replaced overwritten version of <code>getConstraintFor(ChangeBoundsRequest request, GraphicalEditPart child)</code> with an overwritten version of the newly introduced <code>getConstraintFor(Request request, GraphicalEditPart child, Rectangle rect)</code>.

+

** Replaced overwritten version of <code>getConstraintFor(ChangeBoundsRequest request, GraphicalEditPart child)</code> with an overwritten version of the newly introduced <code>getConstraintFor(Request request, GraphicalEditPart child, Rectangle rect)</code>.

See [https://bugs.eclipse.org/bugs/show_bug.cgi?id=320852 320852] for details.

See [https://bugs.eclipse.org/bugs/show_bug.cgi?id=320852 320852] for details.

Draw2d

Refactoring of Geometry API

Geometry API was refactored to guarantee consistency between integer-precision and double-precision version of Point/PrecisionPoint, Dimension/PrecisionDimension, and Rectangle/PrecisionRectangle. Synchronization between the still exposed integer-precision fields (x, y, width, height) and the no-longer exposed double-precision fields (preciseX, preciseY, preciseWidth, preciseHeight) is performed automatically by precision classes now, so clients may use the precision versions transparently, being no longer forced to perform a manual update of the respective fields. See 124904, 142628, and 271235 for details.

Added createAddCommand(ChangeBoundsRequest request, EditPart child, Object constraint) as a replacement for createAddCommand(EditPart child, Object constraint), which was in turn deprecated (this is now handled similar as in case of change constraint commands).

Added getConstraintFor(Request request, GraphicalEditPart child, Rectangle rectangle), which subsumes the duplicate code fragments located in getConstraintFor(ChangeBoundsRequest request, GraphicalEditPart child) and getConstraintFor(CreateRequest request) before (both of these methods now delegate to the new method).

XYLayoutEditPolicy was changed to overwrite the

Replaced overwritten version of getConstraintFor(ChangeBoundsRequest request, GraphicalEditPart child) with an overwritten version of the newly introduced getConstraintFor(Request request, GraphicalEditPart child, Rectangle rect).

Refactoring of Primary Drag Edit Policies

NonResizableEditPolicy was changed by introducing hook methods to allow clients to customize the creation of handles and drag/select trackers used by them:

Added createDragHandle(List handles, int direction)

Added createMoveHandle(List handles, int direction)

Added createDragTracker(), which is used by createDragHandle(List handles, int direction) to construct the drag tracker for the created drag handle.

Added createSelectTracker(), which is used by createMoveHandle(List handles, int direction) to construct the select tracker for the created move handle.

ResizableEditPolicy was similarly changed by introducing the following methods:

Added createResizeHandle(List handles, int direction)

Added createResizeTracker(int), which is used by createResizeHandle(List handles, int direction) to create the resize tracker for the constructed resize handle.

The refactoring was performed in combination with the enhancement of ResizeTracker and CreationTool with support for constraints on resize and size-on-drop. See 67541 for details.

Enhancement of ResizeTracker and CreationTool

Extended ResizeTracker and CreationTool so that they now offer means to enforce certain constraints (by default, minimum and maximum size constraints) during resize as well as size-on-drop (dragging during creation). This was realized by adding methods to enforce size constraints:

ResizeTracker#enforceConstraintsForResize(ChangeBoundsRequest)

CreationTool#enforceConstraintsForSizeOnDropCreate(CreateRequest)

which are called whenever the source respectively target request is updated. By default, both ensure that minimum and maximum size constraints, which are inferred via respective hook methods:

ResizeTracker#getMaximumSizeFor(ChangeBoundsRequest)

ResizeTracker#getMinimumSizeFor(ChangeBoundsRequest)

CreationTool#getMaximumSizeFor(CreateRequest)

CreationTool#getMinimumSizeFor(CreateRequest)

Clients may overwrite the respective hook methods to infer maximum and minimum sizes for certain requests, or overwrite and adjust the enforcement of constraints as a whole (in case additional constraints have to be ensured). While the CreationTool may easily be exchanged with a subclass by specifying a tool class upon construction of a CreationToolEntry, the ResizableEditPolicy was enhanced to allow clients to specify a custom ResizeTracker as well, which will be used for all resize handles.

The logic example was enhanced to demonstrate how the new features can be used. See 67541 for details.

MarqueeSelectionTool

MarqueeSelectionTool was enhanced to now offer the following default marquee behaviors:

BEHAVIOR_CONNECTIONS_TOUCHED (supported since 3.1)

BEHAVIOR_CONNECTIONS_CONTAINED

BEHAVIOR_NODES_TOUCHED

BEHAVIOR_NODES_CONTAINED (supported since 3.1, default behavior)

BEHAVIOR_NODES_TOUCHED_AND_RELATED_CONNECTIONS

BEHAVIOR_NODES_CONTAINED_AND_RELATED_CONNECTIONS (supported since 3.1, formerly known as BEHAVIOR_NODES_AND_CONNECTIONS, which was in turn deprecated).

It was furthermore refactored to allow clients to customize marquee selection behavior via subclassing and overwriting one or more of the following methods:

performMarqueeSelect()

calculateMarqueeSelectedEditParts()

isMarqueeSelectable(EditPart)

The following methods are now also exposed (protected visibility) so clients can use access the current tool mode and the selection rectangle in their customization code:

getCurrentMarqueeSelectionRectangle()

getCurrentSelectionMode()

The logic example was enhanced to demonstrate all new marquee behaviors. See 67991 for details.

MarqueeToolEntry

MarqueeToolEntry has been enhanced to use different icons dependent on the marquee behavior of the tool.

BEHAVIOR_NODE_TOUCHED and BEHAVIOR_NODES_CONTAINED

BEHAVIOR_CONNECTIONS_TOUCHED and BEHAVIOR_CONNECTIONS_CONTAINED

BEHAVIOR_NODES_TOUCHED_AND_RELATED_CONNECTIONS and BEHAVIOR_NODES_CONTAINED_AND_RELATED_CONNECTIONS