yFiles for Java 3.3 is the newest major release available. (See also the entire yFiles for Java change log.)
HierarchicLayout
class is now able to arrange children of a specific root node in a compact bus-like way. These bus substructures are defined by the HierarchicLayoutData#Buses
property, and the new BusDescriptor
class provides more individual settings for the buses.EdgeRouter
class now features integrated edge label placement. Labels are automatically placed when the new property IntegratedEdgeLabelingEnabled
is enabled. The placement considers the optional PreferredPlacementDescriptor
of a label.EdgeRouter
class now supports port grouping of edges at their source and target. To specify the port group IDs, see the associated properties in the PolylineEdgeRouterData
class.EdgeRouter
class now supports orthogonal bus routing. The new BusDescriptor
class specifies the settings for a single bus.IGraph
interface and streamlines working with the results. In particular, it makes working with a special analysis graph class obsolete. The algorithms that are available with the new API include centrality measures, clustering, flow calculation, rank assignment, spanning tree, shortest path, and more. This is accompanied by the new GraphStructureAnalyzer
class that provides methods to check structural properties of a given graph. HierarchicLayout
class is now able to consider individual costs for crossing a group node border. These costs are defined with the HierarchicLayoutData#GroupBorderCrossingCosts
property.HierarchicLayout
class is now able to consider individual crossing costs for edges. They can be defined with the HierarchicLayoutData#EdgeCrossingCosts
property.DefaultLayerSequencer#getCrossingCost
allows for defining an individual crossing cost value for a specific pair of edges when using the said sequencer implementation for the HierarchicLayout
algorithm.HierarchicLayout#getOriginalEdge
method was added.HierarchicLayout
class is now able to uniformly distribute ports at group nodes - with a few restrictions. The new property HierarchicLayoutData#UniformPortAssignmentGroups
. defines the groups for which the feature should be enabled.OrganicLayout
class is now able to produce 3D layout results.OrganicLayout
class is now able to consider user-specified inertia and stress values for nodes.InteractiveOrganicLayout#CompactnessFactor
specifies the compactness of the result. If the graph contains several components, this feature can prevent that the components drift apart. LeftRightNodePlacer
class now supports layouts with multiple branches. With this feature, subtrees can not only be placed left/right of a single vertical bus, but left/right of multiple vertical buses (the branches). The new property BranchCount
allows to configure the number of branches.GridNodePlacer
offers the following new features:BusPlacement
. Available placements are LEADING
, TRAILING
and CENTER
.GridNodePlacer#AutomaticRowAssignmentEnabled
.GridNodePlacer#BUS_ALIGNED
aligns the root node with the bus.OrthogonalLayout
class is now able to consider custom crossing and bend costs for edges. They can be specified using the new properties OrthogonalLayoutData#EdgeCrossingCosts
and OrthogonalLayoutData#EdgeBendCosts
respectively.GivenCoordinatesStage
changes node locations and edge paths to user-specified values before invoking the core layout algorithm. To specify locations and paths, use the new GivenCoordinatesStageData
class.GenericPartitionGridStage
class offers generic support for partition grid structures.GraphEditorInputMode
class provides the new methods raiseSelection
, lowerSelection
, selectionToFront
and selectionToBack
that change the z-order of all selected IModelItems
.GraphModelManager
class has the new methods raise
, lower
, toFront
and toBack
that allow for changing the z-order of IModelItems
. All these z-order-related methods can also be triggered by the new commands RAISE
, LOWER
, TO_FRONT
and TO_BACK
.CreateEdgeInputMode
can now create edges in reversed direction, i.e. starting from target port.EdgeDirectionPolicy
supports starting creation at source, target, in the last direction, or depending on the port candidate.ToggleDirectionRecognizer
allows for changing the edge direction during creation. CreateEdgeInputMode#doStartEdgeCreation
that is used to programmatically start an interactive edge creation gesture now returns a Future
with the newly created edge as result. MoveInputMode#doStartDrag
that is used to programmatically start an interactive drag gesture now returns a Future
with the affected items as result.MoveLabelInputMode#MovingUnselectedLabelsAllowed
enables moving labels without having to select them first.GraphAnalysisDemo
shows how to use the new interfaces for the graph analysis algorithms and how to visualize their results.LogicGateDemo
shows how yFiles can be used for the visualization of a digital system consisted of logic gates.Neo4jDemo
shows how to integrate a Neo4j graph data base in your application.GraphStructureAnalyzer
class provides methods to check structural properties of a given graph.ItemCollection
and ItemMapping
property setters to LayoutData
classes with properties of type ItemCollection
or ItemMapping
. E.g. hierarchicLayoutData#getEdgeLayoutDescriptors().setConstant(newDescriptor)
can now be abbreviated to hierarchicLayoutData#setEdgeLayoutDescriptors(newDescriptor)
.HierarchicLayout
class now correctly calculates the group node bounds. Previously, the groups' insets were slightly too large (up to one pixel).HierarchicLayout
class now always places a port in the middle of a node side, if it is the only port on that side. Previously the port was only centered if the label was additionally placed on the edge.HierarchicLayout
class now also considers critical edge priorities for grouped edges.HierarchicLayout
class now requires less memory for graphs with sequence constraints.HierarchicLayout
class now uses the specified layer alignment (see NodeLayoutDescriptor#LayerAlignment
) to align sub-components (see HierarchicLayoutData#SubComponents
).HierarchicLayout
class no longer inserts superfluous bends for edges between group nodes if the input graph contains grouped edges.HierarchicLayout
, the number of edges crossing through group nodes without starting or ending in them when using the default algorithm settings was reduced. Furthermore, the behavior can be customized using the new group node border crossing costs (see property HierarchicLayoutData#GroupBorderCrossingCosts
).HierarchicLayout
class now also considers sequence constraints for grouped edges. HierarchicLayout
was improved with respect to the resulting edge lengths if the recursive group layering is enabled.HierarchicLayout
class now produces less overlapping elements for graphs with fixed coordinate hints.OrthogonalLayout#ParallelRoutesPreferenceEnabled
allows for controlling how parallel edges (multi-edges) are routed.RecursiveGroupLayout
class now allows to define a local PartitionGrid
structure for each recursively handled group node. See the new property RecursiveGroupLayoutData#GroupNodePartitionGrids
for details.EdgeRouter
class now generates less edge-edge overlaps and a better distribution of edge segments when the EdgeRouter#MaximumDuration
is strongly restricted or set to zero, or when the algorithm is stopped via the AbortHandler#stop
method.EdgeRouter
class now avoids superfluous bends that were in some cases caused by group nodes with (small) inset values.EdgeRouter
class has been improved for cases where an edge has a strong, external PortConstraint
or a fixed, external PortCandidate
.EdgeRouter
now supports edge grouping on both endpoints. Previously, an edge could only be part of either a source or a target group.EdgeRouter
class now generates a proper routing from a group node border to a port location inside this group node defined by a strong PortConstraint
or a fixed PortCandidate
. Previously, the route was only calculated to the border and then the last segment was extended without consideration of obstacles and other elements.GenericLabeling
algorithm and the quality of the label placements were improved.GenericLabeling
class was improved in case that there are multiple labels with a source or target preference near the same node. They may now be placed further away but avoid undesired overlaps.PortCalculator
class now considers edge label positions such that they are not affected by whether this stage is applied or not. Previously, label positions could be changed if the label position was stored relative to the first/last segment or the port.ParallelEdgeRouter
class now always clips the associated parallel edges on that bounds, too.RemoveCollinearBendsStage
.Scale
property now also allows zero and negative numbers as its value. This makes it possible to internally round coordinates to full integer values for the comparison of bend points and, thus, the stage can be made more fuzzy.TreeReductionStage
now marks non-tree edges if an IDataAcceptor
is registered with the input graph with key TreeReductionStage#NonTreeEdgeSelectionKey
. This way a user is able to query which edges the algorithm determined to be the non-tree edges.PlaceNodesAtBarycenterStage
allow for specifying the size of affected nodes, considering the grouping structure when calculating the barycenter of nodes as well as removing the bends of edges incident to affected nodes.Rows
and Columns
of class PartitionGrid
are now of type IEnumerable<RowDescriptor>
and IEnumerable<ColumnDescriptor>
instead of an un-typed YList
.PartitionGridData
class has new properties RowOrderOptimizationEnabled
and ColumnOrderOptimizationEnabled
to indicate whether or not the order of the rows respectively columns should be chosen automatically to minimize edge lengths.ChannelRoutingTool
class brings back the features of the ChannelRouter
class that was removed in version 3.0.LayoutData
classes is now easier:LayoutData
offers a new method combineWith
that combines the current instance with another LayoutData
instance.CompositeLayoutData
has an additional constructor that takes a variable number of LayoutData
instances.AbortHandler
, SourcePortConstraints
, TargetPortConstraints
, SourcePortCandidates
, and TargetPortCandidates
of ChannelEdgeRouterData
facilitate using these features with ChannelEdgeRouter
.RowIndices
and ColumnIndices
properties of the PartitionGridData
class can now also be used in combination with the Grid
property.ImprovingPortAssignment
boolean property of LayoutExecutor
and LayoutGraphAdapter
was replaced by the PortAdjustmentPolicy
property that offers more options how port locations should be adjusted after a layout calculation.CanvasComponent
: Added zoomToAnimated
overloads which take an optional event listener that is notified of the animation's end.IMapperRegistry#createDelegateMapper
has been renamed to createFunctionMapper
.ItemMapping#Delegate
has been renamed to Function.ContextItemMapping#ContextDelegate
has been renamed to ContextBiFunction
.ItemCollection#Delegate
has been renamed to Predicate.toList
and toArray
have been added to IEnumerable
.PointD
, RectD
, SizeD
, InsetsD
, OrientedRectangle
) to layout classes (YPoint
, YRectangle
, YDimension
, YInsets
, YOrientedRectangle
) and vice versa.IPoint#toPoint2D
and PointD#fromPoint2D
.IRectangle#toRectangle2D
and RectD#fromRectangle2D
.HandleInputMode
now clears the AffectedItems
after the Canceled
event has been raised instead of before.DefaultEdgePathCropper
's methods cropEdgePath
and cropEdgePathAtArrow
are no longer final.LayoutExecutor
class considers now the value of the LimitingFitContentZoomEnabled
property of the corresponding GraphComponent
.NodeStylePortStyleAdapter
and AbstractJComponentPortStyle
now have an Offset
property that allows to shift the port visualization so that it no longer is centered over the port.GraphModelManager
class has new factory methods for creating the ItemModelManager
of each item group.GraphModelManager#getModelItem
method now always returns the IModelItem
for an ICanvasObject
retrieved for it via getMainCanvasObject
. Previously this only worked in all cases for the ICanvasObject
retrieved via getCanvasObject
.addLabel
, createLabel
and editLabel
of GraphEditorInputMode
and TableEditorInputMode
that are used to start the respective interactive label editing gesture programmatically return now a Future
with the edited or newly created label as result.GraphEditorInputMode
provides new protected methods createLabelCore
and editLabelCore
to allow for overriding the default implementations.GraphEditorInputMode
provides a TextEditorInputModeConfigurator
to allow for configuring the TextEditorInputMode
before each label editing.GraphEditorInputMode#DeletedItem
event provides now context information about the state before the item has been deleted. For example, if a label has been deleted you now can get its old owner.GraphEditorInputMode#onDeletedItem
is no longer final.GraphClipboard#getId
method to facilitate retrieving the original item from which an item to be pasted has been copied from.GraphClipboard#ClipboardContext
provides access to the current IGraphClipboardContext
during a clipboard operation.CreateEdgeInputMode#ShowingTargetHighlightEnabled
specifies whether to enable or disable highlighting of potential targets for edge creation. Also, the method updateTargetHighlight
has been added to allow for further customization of the highlight.NavigationInputMode
: Added a property ScrollingToSelectionEnabled
that controls whether a node that is focused or selected with a keyboard gesture is automatically scrolled into the viewport if necessary.PortRelocationHandle#ShowingTargetHighlightEnabled
and PortRelocationHandleProvider#ShowingTargetHighlightEnabled
specify whether to enable or disable highlighting of potential targets for edge creation. Also, the method updateHighlight
has been added to the PortRelocationHandle
class to allow for further customization of the highlight.PortRelocationHandle#ShowingPortCandidatesEnabled
and PortRelocationHandleProvider#ShowingPortCandidatesEnabled
specify whether to enable or disable showing port candidates during edge relocation.PortStyleDecorationInstaller
class allows the use of an IPortStyle
to render the selection, highlight, or focus indicator of ports.RectangleIndicatorInstaller#Template
and OrientedRectangleIndicatorInstaller#Template
now return always the value that has been set by client code and are not modified by internal code anymore.EdgePathLabelModel#getGeometry
and EdgeSegmentLabelModel#getGeometry
has been strongly increased.GraphMLIOHandler
class now supports reading and writing arbitrary objects at graph level.SizeD
values.RectD
values.PointD
values.GraphBuilder#EdgeLabelProvider
was generalized from Function<TEdge,String>
to Function<TEdge,Object>
.Paths#findAllChains
method now correctly calculates the chains of input graphs with cycles.GraphChecker#isMultipleEdgeFree
method now returns the correct result for input graphs with self-loops.Bfs#getLayers
method now correctly stores the layer indices in the specified INodeMap
. Previously, the maximum layer index stored in the map exceeded the number of returned layers. EdgeRouter
class no longer produces bad, non-orthogonal edge segments in cases where a selected edge is grouped together with an un-selected edge and where both edges have strong PortConstraints
at their common source/target node.PortPlacementStage
class no longer destroys the grouping information for the core layout algorithm.EdgeRouter
class now correctly considers strong port constraints of edges that belong to a bus structure.HierarchicLayout
class no longer throws an exception if the component arrangement policy is set to ComponentArrangementPolicy#COMPACT
and bus routing is enabled (see property HierarchicLayoutData#Buses
).OrganicLayout
class now correctly considers input graphs where substructure handling is enabled and all nodes are located at coordinate (0,0)
. Previously, such inputs may have triggered an ArgumentException
.EdgeRouter
no longer throws an exception if all fixed edges of a bus are non orthogonal/octilinear.GenericLabeling
class no longer throws an ArgumentException
for some input graphs containing labeled edges with zero length.HierarchicLayout
class no longer throws an exception if it is wrapped by an instance of RecursiveGroupLayout
and the input graph contains layering constraints between elements of different groups.HierarchicLayout
class now correctly considers the group insets for input graphs with nested group nodes. Previously, it sometimes produced too large insets for inner groups.HierarchicLayout
class no longer throws an IllegalArgumentException
for some rare cases in incremental layout mode.HierarchicLayout
class now produces shorter, more direct edge routes for edges connecting at a group node and leaving on the the left/right group side. This only affects cases where the relevant group node also contains direct-content edges (see EdgeLayoutDescriptor#DirectGroupContentEdgeRoutingEnabled
). HierarchicLayout
class are now shorter and take up less space if possible. Previously, segments were sometimes unnecessarily long even though the minimum length settings allowed shorter segments.HierarchicLayout
class now produces less superfluous crossings if there are same-layer edges with PortConstraints
or PortCandidates
.HierarchicLayout
class now correctly handles port labels with zero height/width. Previously, such labels may have caused very large distances between some nodes.HierarchicLayout
class sometimes threw an IllegalArgumentException
for input graphs that contained incremental elements in combination with groups.HierarchicLayout
class sometimes threw an IllegalArgumentException
for input graphs that contained fixed elements in combination with both swimlanes and groups.HierarchicLayout
class now places sloped segments of grouped octilinear edges such that they are perfectly overlapping each other. Previously, it could happen that segments were slightly displaced with respect to each other.HierarchicLayout
class no longer causes non-orthogonal segments when the input contained port labels in conjunction with edge grouping.HierarchicLayout
class now correctly considers fixed nodes with layering constraints. In previous versions there were some rare cases where such inputs caused infinite looping issues.HierarchicLayout
class no longer produces intersections between edges and elements of a sub-component (see HierarchicLayoutData#SubComponents
). Note that this fix may sometimes cause less compact results within a layer.EdgeRouter
class for cases where a large number of fixed and overlapping edge segments exist. Previously, the search could become very slow in such scenarios.EdgeRouter
class now correctly groups edges associated with equal group IDs that have a different object ID.EdgeRouter
class now avoids unnecessary bends in cases that contain PortCandidates
with fixed offsets (or strong PortConstraints
) where the fixed port locations have a very similar x- or y-coordinate such that the path must consist of three segments with a single, very short middle segment. Previously, five segments in total were generated.EdgeRouter
class during routing when a Grid
is defined on which edges need to be routed is now fixed.EdgeRouter
class now correctly handles edges with external ports. Previously, such inputs may have caused an exception.EdgeRouter
class now correctly routes direct content edges with strong port constraints at the group nodes. Previously, the algorithm sometimes produced weird routes for such edges.EdgeRouter
class that sometimes caused a non-deterministic behavior.EdgeRouter
class that resulted in the violation of a PortCandidate
with fixed offsets or a strong PortConstraint
. The first was only triggered for constraints at the target side and only when the target node was additionally partly or fully covered by other obstacles (e.g. node labels). The second issue appeared in cases with the source and target node fully overlapping (e.g. an edge from a group to a child node).EdgeRouter
class no longer throws an exception if its PolylineRoutingEnabled
property is enabled and the input contains fixed, grouped edges.EdgeRouter
class now considers the correct NodeHalo
associated with the target node when handling the minimum last segment length setting. Previously it incorrectly considered the halo of the source node which could lead to unnecessarily long or too short last segments.EdgeRouter
class now correctly considers intersections between edges and labels of fixed edges if property EdgeLabelConsiderationEnabled
is enabled.EdgeRouter
class no longer throws an exception during routing in cases where the source or target node is covered by obstacles (i.e. by other nodes or labels).EdgeRouter
class now correctly considers intermediate routing points when using the polyline routing style (EdgeRouter#PolylineRoutingEnabled
). Previously, it could happen that intermediate points were not part of the final polyline edge path.EdgeRouter
class no longer throws an exception during the routing of some graphs with grouped edges.EdgeRouter
class no longer considers all PortCandidates
with multiple directions as fixed PortCandidates
.EdgeRouter
class now correctly handles cases where the maximum duration is exceeded and where previously an exception was triggered.StackOverflowError
in EdgeRouter
.OrganicLayout
class no longer throws an exception when using CycleSubstructureStyle#CIRCULAR
and arranging a cycle structure where at least one cycle node is also connected to a group node outside the cycle.OrganicLayout
class now produces deterministic results for group nodes if its property DeterministicModeEnabled
is enabled.OrthogonalLayout
class no longer causes an exception for some input graphs when property FaceMaximizationEnabled
is enabled.OrthogonalLayout
class no longer runs into an infinite loop for some input graphs that are tree structures with mixed edge directedness (see property OrthogonalLayout#EdgeDirectednessDpKey
). Note that the problem only occurred if property OrthogonalLayout#TreeStyle
is not set to TreeLayoutStyle#NONE
.OrthogonalLayout
class no longer throws an exception when its property UniformPortAssignmentEnabled
is enabled and the input contains parallel edges.RecursiveGroupLayout
, the values of the properties ComputedWidth
, ComputedHeight
and ComputedPosition
of the classes ColumnDescriptor
and RowDescriptor
are now correctly set after the layout if EdgeRouter
is the corresponding InterEdgeRouter
.CompactNodePlacer
class no longer throws an exception for input graphs with specified memento strategies (see TreeLayoutData#CompactNodePlacerStrategyMementos
or CompactNodePlacer#STRATEGY_MEMENTO_DPKEY
).CompactNodePlacer
class now correctly considers the specified values of the VerticalDistance
and HorizontalDistance
properties.CompactNodePlacer
class no longer throws an exception for some inputs with specified strategy memento information (either via property TreeLayoutData#CompactNodePlacerStrategyMementos
or with a mapper registered with key CompactNodePlacer#STRATEGY_MEMENTO_DPKEY
).SimpleNodePlacer
class no longer produces very long horizontal edge segments for inputs where it isn't required.GenericLabeling
class now correctly places labels of direct content edges (edges that directly connect a group node with a descendant, without leaving the group) with a free edge label model.GenericLabeling
class no longer calculates wrong label profit values (AbstractLabeling#getProfit
) for some edge labels. Previously, edges that had a PreferredPlacementDescriptor
were sometimes affected.GenericLabeling
class now produces valid results for edge labels that have a preferred distance to the edge (PreferredPlacementDescriptor#DistanceToEdge
) and at the same time multiple SideOfEdge
preferences (e.g. left of edge and on the edge). Previously, the algorithm sometimes violated the preferred distance even though it would have been possible to keep it.GenericLabeling
class now always prefers LabelCandidates
with higher profit values over others with lower profit (see AbstractLabeling#getProfit
). Previously, this sometimes happened even though both candidates did not intersect with other elements.GenericLabeling
class does no longer assume that all LabelCandidates
associated to a label have the same size. Previously, this caused unexpected labeling results if custom candidates with different sizes were given.GenericLabeling
that may have caused an IllegalArgumentException
for some input graphs that contain edges with zero length segments and labels associated with a free edge label model.SeriesParallelLayout
class now correctly handles input graphs with groups that only contain disconnected nodes. Previously, such inputs caused an exception.PartialLayout
class now correctly considers the specified PortCandidates
during orthogonal or octilinear routing of edges.PartialLayout
class does no longer reduce the size of fixed group nodes if the option PartialLayout#ResizeFixedGroups
is disabled.ComponentLayout
class now correctly handles input graphs with user-specified components that contain nodes with null
as their component ID (see property ComponentLayoutData#ComponentIds
). Previously, such inputs may have caused an exception.PolylineLayoutStage
does no longer generate overlaps between sloped, polyline segments created by the stage and unrelated other obstacles (e.g. nodes).OrganicRemoveOverlapsStage
no longer produces infinite loops in some rare cases. YGraphAdapter
that could trigger a NullPointerException
when boolean, integer or double values were requested from registered IMapper
but no value had been set beforehand.GraphEditorInputMode
where changing the value of ShowHandleItems
while handles were already displayed resulted in duplicate handles.EdgePathLabelModel
which could return an invalid geometry for parameters with a ratio < 0 and zero length edge segments.CanvasComponent#fitContent
has been fixed that sometimes resulted in a short flickering. null
key. null
key are taking into account by method getEntries
.CommandBindingAction
's actionPerformed
behavior to always pass the action's target to the associated KeyboardInputMode#ExecuteCommandHandler
and KeyboardInputMode#CanExecuteCommandHandler
instances instead of the action event's source.GeneralPath#flatten()
: Fixed unexpected behavior if a curve follows after a close operation. DefaultFolderNodeConverter#CopyFirstLabel
property is enabled.PortRelocationHandleProvider
where the settings ShowPortCandidates
and ShowTargetHighlight
were ignored.CreateEdgeInputMode#getPortOwner
which could return edges even if EdgeToEdgeConnectionsAllowed
was set to false. This could result in the edge's IPortCandidateProvider
being queried for candidates erroneously.CanvasComponent
's method compareRenderOrder
and when using GraphModelManager
's Comparator
property.GraphClipboard
's methods onElementCut
and onElementCopied
are no longer called for graph items which are not copied themselves but are owners of copied items.GraphClipboard
and a port is newly created during this operation, the new port now gets the old port's style and tag.UndoEngine
class if the tokens returned by getToken
were not disposed when the UndoEngine
got cleared.CreateEdgeInputMode
class now considers the value of the CanvasComponent#HitTestRadius
property when its StartingOverCandidateOnlyEnabled
property is enabled. CreateEdgeInputMode
class does not flicker, anymore.SmartEdgeLabelModel
, it was impossible to move a label from the left side of an edge to the right side. Instead, the label stopped at the edge.null
check for the GridVisualCreator#Pen
property works correctly now.IGridConstraintProvider
cannot be used in lookup methods since it has a generic type parameter. Therefore, new specific interfaces have been added for each item type (for example INodeGridConstraintProvider
).EdgeStyleDecorationInstaller
class no longer causes an exception when used on edges that are attached to other edges.ImprovingPortAssignment
boolean property of LayoutExecutor
and LayoutGraphAdapter
has been replaced by the PortAdjustmentPolicy
property.SingleItemCollection
's Item
property has been pulled up to ItemCollection
. Class SingleItemCollection
has been removed, its usages have been replaced by ItemCollection
.HierarchicLayoutData#AlternativeEdgePath
has been renamed to HierarchicLayoutData#AlternativeEdgePaths
.HierarchicLayoutData#AlternativeEdgePaths
now expects Iterable<IPoint>
instead of YPointPath
as mapped values.HierarchicLayoutData#AlternativeGroupBounds
now expects IRectangle
instead of YRectangle
as mapped values.BalloonLayoutData#TreeRoot
and TreeLayoutData#TreeRoot
has been changed to SingleItem<INode>
.TreeLayoutData#LeftRightPlacersLeftNodes
has been renamed to TreeLayoutData#LeftRightNodePlacerLeftNodes
.TreeLayoutData#DelegatingNodePlacersPrimaryNodes
has been renamed to TreeLayoutData#DelegatingNodePlacerPrimaryNodes
.SourceGroups
and TargetGroups
of RadialLayoutData
have been removed since edge grouping is not supported by the RadialLayout
class.Rows
and Columns
of class PartitionGrid
are now of type IEnumerable<RowDescriptor>
and IEnumerable<ColumnDescriptor>
instead of an un-typed YList
.PenaltySettings#InvalidEdgeGroupingPenalty
property has been removed. If edge groups are defined, the EdgeRouter
class now always considers them. Therefore, this setting no longer applies.EdgeRouter
class were made:AbstractSegmentInfo
is now of type Object
instead of Edge
. The provided type should be either PathRequest
for affected edges or Edge
for non-affected, fixed ones. Furthermore, the property AbstractSegmentInfo#Edge
has been removed as the info is not necessarily associated with an edge anymore.EdgeCellInfo
is now of type Object
instead of Edge
. The provided type should be either PathRequest
for affected edges or Edge
for non-affected, fixed ones.EdgeInfo
now additionally takes a parameter of type Edge
. Edge
from the constructor of Path
as well as the respective property were removed. A path is now not necessarily associated with an edge but only with the newly introduced PathRequest
.PathSearchResult#getEdgeInfo(Path)
was removed.CanvasComponent#Editable
and the associated event editableChanged
are not necessary and have been removed.IMapperRegistry#createDelegateMapper
has been renamed to createFunctionMapper
.ItemMapping#Delegate
has been renamed to Function
.ContextItemMapping#ContextDelegate
has been renamed to ContextBiFunction
.ItemCollection#Delegate
has been renamed to Predicate
.CommandBindingAction
's actionPerformed
behavior to always pass the action's target to the associated KeyboardInputMode#ExecuteCommandHandler
and KeyboardInputMode#CanExecuteCommandHandler
instances instead of the action event's source.GraphClipboard
's methods onElementCut
and onElementCopied
are no longer called for graph items which are not copied themselves but are owners of copied items. As a consequence, the methods cut
and copy
of the IClipboardHelper
implementations of these elements are no longer called, either.GeneralPath
and GeneralPath.PathCursor
are now final.PartialLayout#ResizeFixedGroups
to FixedGroupResizingEnabled
.HierarchicLayout
class now uses a higher crossing cost for group node borders. To specify custom values, use the property HierarchicLayoutData#GroupBorderCrossingCosts
.GroupingSupport
class no longer throws an IllegalArgumentException
if there is a node without associated ID (see GroupingKeys#NODE_ID_DPKEY
). Instead the class uses the node itself as ID.SimplexNodePlacer#BarycenterMode
property is now enabled by default. Thus, the HierarchicLayout
class with default settings now produces different (usually more symmetric) layouts. GridNodePlacer#RootAlignment
was changed to GridNodePlacer#BUS_ALIGNED
from AbstractRotatableNodePlacer#RootAlignment#TRAILING
.ParallelEdgeRouter
class now always clips the associated parallel edges on that bounds, too.ConcurrentModificationException
instead of an IllegalStateException
: FilteredGraphWrapper
: Changing graph items while iterating those using the IListEnumerable
returned by FilteredGraphWrapper#getNodes
, FilteredGraphWrapper#getEdges
, FilteredGraphWrapper#getLabels
or FilteredGraphWrapper#getPorts
.FilteredGraphWrapper
: Changing the edges at a port or node while iterating those edges using the IListEnumerable
returned by edgesAt
.GeneralPath
: Changing the path's structure while iterating the path using a PathCursor
returned by GeneralPath#createCursor
.ToolTipQueryEventArgs
is now set to null
. Thus, the tooltip is not displayed when the event is handled without setting the tooltip content. RectangleIndicatorInstaller#Template
and OrientedRectangleIndicatorInstaller#Template
now return always the value that has been set by client code and are not modified by internal code anymore.