yFiles FLEX Change Log

yFiles FLEX 1.9 changes since 1.8

General

Server (Java)

The bundled yFiles for Java release has been updated to version 2.12.0.1

Bugfixes

Server (Java)

Bug in com.yworks.yfiles.server.graphml.flexio.FlexIOTools fixed that broke committing the edge label layout for labels using a FreeEdgeLabelModel as part of an CompositeEdgeLabelModel.

yFiles FLEX 1.8 changes since 1.7

Major New Features

Client

The new com.yworks.canvas.ViewportLimiter can be used to restrict the region that is viewable in the canvas. The following convenience methods using ViewportLimiter have been added to class CanvasComponent:

setLimitedZoom(newZoom:Number):void

setLimitedViewport(target:IRectangle):void

setLimitedViewpoint(vp:Point):void

setLimitedCenter(center:Point):void

increaseZoom(factor:Number=1.2):void

decreaseZoom(factor:Number=1.2):void

get limitedMinZoom():Number

Server

EdgeRouter: A new edge routing algorithm that produces polyline edge routes. The segments of an edge are either orthogonal (i.e., the slope of each segment is a multiple of 90 degrees) or octilinear (i.e., the slope of each segment is a multiple of 45 degrees).

PolylineLayoutStage: A layout stage that adds polyline segments to the orthogonal edge paths of a graph.

Added support for octilinear edge routing to the IncrementalHierarchicLayouter. Different edge routing styles can be specified using class RoutingStyle.

PreferredPlacementDescriptor: A new descriptor that allows to specify advanced preferred placement information for edge labels.

Minor New Features

Demos

The new PreferredLabelPlacementDemo shows how to configure the PreferredPlacementDescriptor of labels and how this affects the label placement of different layouters. The demo also shows how the descriptors can be transferred to the server. Note that this demo will only work with a yFiles for Java server.

General

Server (Java)

The bundled yFiles for Java release has been updated to version 2.10.1

Dependencies to third party software from ACME Labs have been removed

Server (.NET)

The bundled yFiles.NET release has been updated to version 3.6

Improvements

Client

The com.yworks.ui.GraphCanvasComponent#morphGraph function always replaced label instances on update, causing the label selection to be lost. Labels will now be mapped to existing instances on update. This behavior can be reverted using the com.yworks.ui.GraphCanvasComponent#replaceLabelsOnUpdate property.

Demos and Tutorials

Added the new viewport limiter functionality to the OrgChartDemo: the viewable region is restricted to the content rectangle.

Added class demo/resources/Icons containing new icons for buttons.

Fixed some tutorial steps.

Fixed bug in MultiPageLayoutDemo that could lead to wrong page numbers.

Bugfixes

Client

Fixed a bug that prevented com.yworks.canvas.input.MultiplexingInputModes from correctly disabling their child modes when the enabled property is set to false.

Fixed a bug that caused the top and left margins passed to com.yworks.canvas.CanvasComponent#updateContentRect to be added to the resulting content rect twice.

yFiles FLEX 1.7 changes since 1.6.0.2

Major New Features

Client

New Comprehensive Support for Swimlane Diagrams

New model class com.yworks.graph.model.Table provides extensive support for tabular presentation of subgraphs which is well suited for the visual presentation of swimlane layouts. Flexible visualization for table elements by means of existing node styles is provided by implementations of the com.yworks.graph.drawing.ITableNodeStyle interface.

New dedicated InputMode com.yworks.graph.input.TableEditorInputMode which can be used either standalone or as a child mode of com.yworks.graph.input.GraphEditorInputMode and which provides support for user interaction specific to the tabular data representation of an associated node.

The TableEditorDemo and TableLayoutDemo demonstrate the capabilities of table visualization editing, as well as automatic layout of swimlane diagrams.

Advanced configuration options for the model items' render order

Different layering policies for edges, labels and ports can be used to pick a layering strategy best matching your use case. These policies for example include rendering ports and labels close to their owner or in a separate layer on top of all nodes.

The rendering order of model items in the same layer (like nodes on the same hierarchy level) can be changed using the raise(), lower(), toFront() and toBack() methods of the com.yworks.ui.GraphCanvasComponent's com.yworks.graph.model.GraphModelManager.

This rendering order (or z-order) can be persisted when serializing the graph to GraphML and reestablished on parsing the GraphML file.

The interface com.yworks.graph.model.IZOrderSupport has been added and is used to manage the z-order of the model items.

Improved rendering performance due to consistent usage of the new com.yworks.canvas.drawing.IDisplayObjectCreator interface.

Minor New Features

Client

The new styles com.yworks.graph.drawing.SimpleAbstractNodeStyle, com.yworks.graph.drawing.SimpleAbstractEdgeStyle, com.yworks.graph.drawing.SimpleAbstractPortStyle and com.yworks.graph.drawing.SimpleAbstractLabelStyle can be used as base classes for custom styles that want to use their own rendering and modify the shape related behavior like hit testing or edge intersection. Overriding their default implementations for those behaviors is easy to achieve as demonstrated in the new Custom Style Tutorial.

The new class com.yworks.graph.model.EdgeSelectionDisplayObjectCreator can be used to conveniently customize the visualization of selected edges.

The new com.yworks.remote.LoadHandler supports loading GraphML files directly from the client's file system. This class complements the com.yworks.remote.UploadHandler with a server independent variant.

The new com.yworks.remote.SaveHandler supports saving GraphML files directly to the client's file system. This class complements the com.yworks.remote.DownloadHandler with a server independent variant.

The new com.yworks.remote.ImageSaveHandler supports exporting the canvas as bitmap image directly to the client's file system. This class complements the com.yworks.remote.ImageExportHandler with a server independent variant.

The new com.yworks.graph.drawing.TLFLabelStyle can be used to draw labels with the Flex Text Engine and the Text Layout Framework.

General

The yFiles FLEX client libraries now don't include the Flex framework libraries anymore.

Server (Java)

The bundled yFiles for Java release has been updated to version 2.9.0.2

Server (.NET)

The bundled yFiles.NET release has been updated to version 3.5

Demos

The Flex 3 compatible demos are no longer provided.

Improvements

Client

All events now override the clone() method to return a clone of themselves.

com.yworks.canvas.input.MultiplexingInputMode now implements com.yworks.canvas.input.IConcurrentInputMode. Thus, MultiplexingInputModes themselves can now be sub modes of another multiplexing input mode.

Label editing: the com.yworks.graph.input.GraphEditorInputMode has a new labelEditableItems property and shouldLabelBeEdited() callback to allow to specify which labels can be edited.

An optional parameter of type com.yworks.support.ILookup has been added to all methods of com.yworks.support.ITypeConverter. It can be used to gather additional information for the conversion.

The hit testing for several node styles that are using a com.yworks.canvas.drawing.GeneralPath has been improved to allow for fuzzy hit testing.

The new property clickHitTestOrder was added to com.yworks.graph.input.GraphEditorInputMode. This property allows to configure the priority of graph items which are selected upon mouse clicks.

The utility method getGroupedGraph was added to com.yworks.graph.model.GroupedGraphUtil. It simplifies retrieving the IGroupedGraph instance from a passed IInputModeContext.

The utility method getTextSize was added to com.yworks.canvas.drawing.YGraphics and calculates the size a text String would need in a TextField if a specified TextFormat was used. It can be used e.g. in custom label style implementations to position the text.

The signature of the applyStroke method of com.yworks.canvas.drawing.YGraphics was changed. It now accepts two optional parameter bounds and origin that allow you to specify the bounds and the origin of the shape that the stroke is applied to which is mainly useful for gradient strokes.

Node reparenting: the com.yworks.graph.input.GraphEditorInputMode now dispatches an event of type com.yworks.graph.input.GraphEditorHierarchyEvent.NODE_REPARENTED if a node was reparented interactively.

The context for template styles (com.yworks.graph.drawing.TemplateStyleDataContext) now implements com.yworks.support.ILookup.

A com.yworks.support.LookupChain now dispatches a com.yworks.support.LookupChainEvent when a chain link was added or removed.

The com.yworks.util.ColorStruct class now has getter for the red, green and blue part of the set color.

When a roundtrip has been completed the com.yworks.remote.RoundtripHandler now always dispatches a RoundtripEvent.ROUNDTRIP_COMPLETE event, no matter whether the update property is set to false or true.

The com.yworks.graph.model.FilteredGraphWrapper can now be used as master graph for a FoldingManager.

The graph implementations now dispatch com.yworks.graph.model.GraphEvent's sub classes com.yworks.graph.model.NodeEvent, EdgeEvent, LabelEvent, PortEvent, and BendEvent instead of com.yworks.graph.model.GraphEvent. The new events provide access to the item's former owner after the element has been removed.

The method getSegmentCount was added to com.yworks.canvas.drawing.GeneralPath and returns the number of lineTo and close operations in this path.

The property actionButtonProviderDecorator has been added to com.yworks.graph.model.ItemDecorator to allow for easier decoration of the com.yworks.graph.input.IActionButtonProvider interface.

The static utility method polyLineIntersects was added to com.yworks.canvas.geom.GeomSupport and checks if a polygonal line intersects a rectangle.

The static utility method calculateSegmentTangent was added to com.yworks.canvas.geom.GeomSupport and calculates the tangent point and vector on a polygonal path at a given segment and ratio.

The property dragNodeCreator was added to com.yworks.graph.input.NodeDropInputMode to make customizing the input mode easier.

For com.yworks.graph.input.NodeDropInputMode and com.yworks.graph.input.StripeDropInputMode support has been added to hide the drag image while the node or stripe preview is displayed.

com.yworks.graph.input.GraphEditorInputMode: the property clickableItems and the callbacks shouldBeClickable, shouldBeClickSelectable, and shouldBeMarqueeSelectable were added to provide more control over selection and event dispatching. The callback shouldBeMarqueeSelectable was added to the com.yworks.canvas.input.MainInputMode as well.

The handling of embedded SWF classes by the com.yworks.graph.drawing.ImageNodeStyle has been improved so that cloned style instances reload the SWF data correctly.

com.yworks.remote.RoundtripHandler has a new property requestTimeout which allows to set a timeout for server requests.

com.yworks.graph.input.GraphEditorInputMode offers more settings for auto adjustment of the content rect after user operations.

The print methods of com.yworks.canvas.CanvasComponent and com.yworks.canvas.CanvasPrinter as well as the export method of com.yworks.remote.ImageExportHandler now accept an optional Sprite parameter that can be used to pass a customized sprite instance for printing/export.

The com.yworks.canvas.input.ContextMenuInputMode has a new autoRegisterAtApplication property that per default sets the application's contextMenu property to its own ContextMenu instance.

Java style GraphML parsing: unknown realizers are parsed with a fallback realizer to parse their geometry, anyway. The fallback realizers can be set on the com.yworks.io.graphml.realizer.RealizerSerializerManager.

com.yworks.canvas.drawing.YGraphics.applyFill now applies its transformation matrix to given gradient fills.

Reduced memory usage of a model item: a mapper which supports lookup decoration now is created lazily.

Made available scrolling-related properties on the CanvasComponent to facilitate customization of the canvas scrolling behavior: hasVerticalScrollBar, hasHorizontalScrollBar, minHorizontalScrollPosition, maxHorizontalScrollPosition, minVerticalScrollPosition,maxVerticalScrollPosition.

A protected fitContentCore() method is now available on CanvasComponent. As fitContent() just queues fitContentCore() for execution during the next validation, the fit content behavior can now be adjusted by overriding fitContentCore().

If no fill or stroke is set for an IShapeNodeStyle element in a GraphML file, the GraphML parser will now correctly set the corresponding style property to null instead of assigning a default stroke/fill.

When using a folded graph, the master item for a created graph item can now be obtained when the creation event is dispatched on the view graph.

The com.yworks.util.FilteredCollectionModel can now be used in for each loops.

Custom user tags can now be added to the default com.yworks.graph.model.IBend implementation using the com.yworks.support.ITagOwner functionality.

The com.yworks.graph.input.CreateEdgeInputMode now uses the com.yworks.graph.model.IHitTestIterator retrieved from the context when trying to find a node at a given position.

The input mode created using com.yworks.graph.input.GraphEditorInputMode#createMoveUnselectedInputMode() now supports undo/redo functionality.

If the content rectangle is changed implicitly because a graph item was moved, only a single undo/redo unit is now created for the content rectangle change and the move operation.

When only a single parameter is provided to the constructor of an com.yworks.support.AbstractUndoUnit, the parameter is now used as the name for both the undo and the redo operation.

com.yworks.graph.input.NodeDropInputMode will now copy the user tag of the dragged node to the node created by the drag operation.

com.yworks.graph.drawing.TemplateNodeStyle components can now define a complete property and dispatch a complete event when using asynchronous resources to make sure that these resources are included for printing and image export.

When parsing ports with enabled port location model parsing, the location model will now consistently take precedence over the explicit port location data.

The com.yworks.graph.drawing.ImageNodeStyle now also supports loading and displaying remote SWFs. ImageNodeStyle should now be used for all image-based node visualizations. com.yworks.graph.drawing.SWFNodeStyle is now deprecated.

The com.yworks.io.graphml.writer.serializer.PrimitivesSerializer and com.yworks.io.graphml.reader.deserializer.PrimitivesDeserializer have been added to DefaultGraphMLIOHandler's and RoundtripHandler's default (de)serializer registry. This allows for automatic (de)serialization of primitives (like int or Number) as elements, which is required if they are used as user tags.

com.yworks.canvas.CanvasComponent and com.yworks.ui.GraphCanvasComponent have a new property mouseInterval Setting this property to values > 0 lets the canvas discard some mouse events which don't have a visible effect. This can improve performance.

Class com.yworks.graph.input.SimpleEdgePositionHandler can be added to the edge's lookup to let the bends of selected edges be moved with the edge.

Server (Java)

Support for ports has been greatly improved. Now it is possible to:

create and remove node ports as well as edges between node ports.

reuse ports for dummy edges of a folded graph.

specify visual and geometric port information.

use a port location model to specify how a change of the port owner's layout affects the port's location

automatically update the port location after the endpoints of edges are changed by a layout run.

The factory methods createParameterFromSource and createParameterFromTarget have been added to com.yworks.yfiles.server.graphml.flexio.data.RotatedSliderEdgeLabelModel and com.yworks.yfiles.server.graphml.flexio.data.RotatedSideSliderEdgeLabelModel.

com.yworks.yfiles.server.graphml.flexio.serializer.ReflectionBasedSerializer: method serializeContent has been extracted from serializeItem to allow for easier customizations.

User tags of classes which are serialized as markup extensions (e.g. view states or tables) now are written and read to / from GraphML.

The com.yworks.yfiles.server.graphml.flexio.data.FreeNodeLabelModel now gets mapped correctly to the corresponding java y.layout.FreeNodeLabelModel during layout roundtrips.

The server-side GraphML output will now recognize default values for more GraphML attributes and omit the corresponding data elements instead of writing the default value repeatedly.

The classes com.yworks.yfiles.server.graphml.support.GraphRoundtripSupport and Graph2DRoundtripSupport now have the base classes GraphRoundtripSupportBase and Graph2DRoundtripSupportBase, respectively, which provide roundtrip support without dependencies on a servlet API.

Serializing shared instances to GraphML has been improved. Per default shared styles, user tags and location model parameter for nodes, edges, labels and ports are now supported. Custom classes may implement the com.yworks.yfiles.server.graphml.support.ISharedInstanceProvider interface to provide objects that could be shared as well.

Demos

The new Custom Style Tutorial demonstrates how to create custom styles for nodes, labels, edges and ports that use as well a custom visualization as a customized behavior.

The new RenderOrderDemo shows how to use the new configuration options for the render order of model items.

The new MultiPageLayoutDemo shows how to use the MultiPageLayouter to break down a large graph into smaller pages. The MultiPageLayouter is part of the yFiles FLEX Client Layout Extension or of the server parts of the yFiles for Java or .NET server bundles.

Some z-order operations like raising and lowering model items have been added to the GraphCanvas demo.

Bugfixes

Client

Bug fixed that sometimes caused a wrong port candidate to be picked on edge creation.

Bug fixed that sometimes caused an infinite loop on serializing a folded graph that reuses master ports for its dummy edges.

Bug fixed that used the master graph's defaults for port style and port location model when explicitly creating a port on the view graph.

Bug fixed that caused group nodes, that had been reparented, to be placed behind all its new sibling nodes.

Bug fixed in com.yworks.ui.GraphCanvasComponent.morphGraph() which prevented morphing a change in the folding state of a node.

Bug fixed: an edge label's position was not updated after removal of a bend.

Bug fixed in com.yworks.graph.model.FilteredGraphWrapper which could cause edgesAtPort and edgesAtPortOwner to return incorrect edges.

Bug fixed in com.yworks.graph.model.FilteredGraphWrapper which could create incorrect graphs when elements are added while the predicate has changed and the graph state is not in sync with the changes.

Embedded SWFs that are displayed in the canvas component are now correctly printed with the CanvasComponent's print() method, or when using the CanvasPrinter. Also, when using the ImageExportHandler, the SWF's will be correctly exported to the resulting image.

CanvasPrinter now tries to use reasonable values if no margin or printRectangle is set. If no such values can be determined a verbose Error is thrown before printing starts.

Bug fixed: the com.yworks.graph.model.GraphCopier now copies the user tags of copied model items, too. This also affects clipboard operations: on cut, copy, and paste the copied items' user tags are now copied, too.

Bug fixed which prevented user tags on dummy bends to be kept after folding operations.

CSSLabelStyle: changed the default styleName from CSSLabelStyle to .CSSLabelStyle. This causes CSS properties to be applied correctly to the label text.

The advanced anti-aliasing properties (antiAliasType, sharpness, thickness, gridFitType) that were introduced with the Flash Text Engine (FTE) are now correctly applied to labels rendered with the SimpleLabelStyle or CSSLabelStyle.

Labels are now only truncated with trailing ellipses if the text does not contain HTML markup. Before, the markup was lost during truncation. HTML labels are now just clipped at the label bounds.

The com.yworks.remote.UploadHandler now uses the default fileFilter if no filter was set explicitly.

Bug fixed in com.yworks.io.graphml.reader.deserializer.AbstractTemplateStyleDeserializer which prevented Strings from being properly deserialized as styleTag in TemplateNodeStyle and TemplateLabelStyle.

Bug fixed in com.yworks.graph.input.CreateEdgeInputMode which indicated that the newly created edge snapped to a target node while it did not.

Fixed hit testing for the ShapeNodeStyle's round rectangle shape.

Hit testing of the SimplePortStyle now considers the stroke width.

The com.yworks.remote.RoundtripHandler now always dispatches the complete event when the result has been received, even if it is configured to not update the client-side graph.

Fixed a bug that caused the default node styles set on a folded graph to be ignored when parsing a folded graph using the com.yworks.remote.RoundtripHandler.

When updating a folded graph, the folding state of leaf nodes is now correctly applied.

Gradients are now rotated correctly when a rotation is applied to the com.yworks.canvas.drawing.YGraphics context.

The hasColor attribute is now considered correctly when parsing yFiles for Java GraphML input.

The arrow deserializer now is able to deserialize ArrowType.SIMPLE, too.

The com.yworks.canvas.input.MagnifierInputMode now respects its canvas's enableMouseChildren policy. This fixes a bug which prevented template components from being interactive when viewed with the magnifier.

Fixed snap line indicator for equal node sizes which sometimes had an incorrect size at the node which was resized.

Fixed a bug in com.yworks.canvas.input.MoveInputMode which prevented snapping from being re-enabled after temporarily disabling it with the CTRL-key.

Server (Java)

Empty group nodes are not parsed in as normal (non-group) nodes anymore.

Bug fixed in com.yworks.yfiles.server.graphml.flexio.deserializer.AbstractTemplateStyleDeserializer which prevented Strings from being properly deserialized as styleTag in TemplateNodeStyle and TemplateLabelStyle.

If a label uses a parameter for com.yworks.yfiles.server.graphml.flexio.data.FreeNodeLabelModel respectively com.yworks.yfiles.server.graphml.flexio.data.FreeEdgeLabelModel, this parameter is updated correctly after a new layout has been calculated for this label.

Server (.NET)

Bug fixed in yWorks.yFiles.Graph.Web.Style.AbstractTemplateStyleDeserializer which prevented Strings from being properly deserialized as StyleTag in TemplateNodeStyle and TemplateLabelStyle.

Bug fixed which caused node or edge style deserializers being invoked three times per node.

Incompatible Changes

Client

Most rendering code that previously used the com.yworks.canvas.drawing.IPaintable interface now uses the new com.yworks.canvas.drawing.IDisplayObjectCreator interface instead for improved rendering performance (e.g. all style renderers now implement IDisplayObjectCreator instead of IPaintable). Please see the migration guide for details on the resulting incompatibilities.

The minimum supported Flex SDK now is Flex 3.5, the minimum required Flash Player version is 10.

com.yworks.graph.input.GraphEditorInputMode now delegates label editing to an internal helper class.

The default rendering layers of ports, labels and edges have changed. Ports and labels are now rendered just on top of their owner instead of in a separate layer on top of all nodes and edges. Edges use the com.yworks.graph.model.EdgeLayerPolicy.SEPARATE_LAYER policy that corresponds to the previous default. The old default behavior can be reestablished by setting com.yworks.graph.model.LabelLayerPolicy.SEPARATE_LAYER as labelLayerPolicy and com.yworks.graph.model.PortLayerPolicy.SEPARATE_LAYER as portLayerPolicy in the GraphModelManager.

The usage of com.yworks.graph.model.GraphModelManager.drawEdgesBehindGroupedNodes is now deprecated. Instead the (default) edge layer policy com.yworks.graph.model.EdgeLayerPolicy.BEHIND_GROUP_NODES should be used.

When a roundtrip has been completed the com.yworks.remote.RoundtripHandler now dispatches a RoundtripEvent.ROUNDTRIP_COMPLETE event when the update property is set to false, too.

The private class com.yworks.graph.model.PathGeometrySelectionPaintable has been made deprecated. Uses should be replaced by com.yworks.graph.model.EdgeSelectionDisplayObjectCreator.

The graph implementations now dispatch com.yworks.graph.model.GraphEvent's sub classes com.yworks.graph.model.NodeEvent, EdgeEvent, LabelEvent, PortEvent, and BendEvent instead of com.yworks.graph.model.GraphEvent. As these events are sub classes of the GraphEvent, listeners to GraphEvent will continue working without changes. IGraph implementations which dispatch GraphEvents should dispatch the appropriate sub classes for the changed items.

com.yworks.graph.drawing.SimpleNodeStyle has been deprecated. It is recommended to use its replacement com.yworks.graph.drawing.SimpleAbstractNodeStyle instead.

The method createTextRenderer in com.yworks.graph.drawing.IconLabelStyleRenderer has been removed.

The type of property autoAdjustContentRect of class com.yworks.graph.input.GraphEditorInputMode has been changed from Boolean to com.yworks.graph.input.AdjustContentRectPolicy.

The com.yworks.canvas.input.ContextMenuInputMode now sets the application's contextMenu property to its own ContextMenu instance. Setting the input mode's autoRegisterAtApplication property to false prevents this behavior.

A new method setBendTag has been added to interface com.yworks.graph.model.IChangeDummyEdgeAppearanceCallback. Classes which implement this interface have to implement this method.

If no fill or stroke is set for a ShapeNodeStyle in a GraphML file, the GraphML parser will now set the corresponding style property to null instead of assigning a default stroke/fill.

The method iterateHits of com.yworks.graph.model.IFilteredHitTestIterator has been renamed to iterateFilteredHits.

The com.yworks.remote.RoundtripHandler defaults have been changed to write port location models. This increases the size of the GraphML and can be switched off if not wanted.

Server (Java)

Class com.yworks.yfiles.server.graphml.flexio.data.NodeScaledParameterExtension was moved to package com.yworks.yfiles.server.graphml.flexio.data.javamarkup.

Classes com.yworks.yfiles.server.graphml.flexio.serializer.FlexReflectionBasedSerializer and com.yworks.yfiles.server.graphml.flexio.deserializer.FlexReflectionBasedDeserializer were removed.

Class com.yworks.yfiles.server.graphml.flexio.LabelDeserializer now serializes only a single <y:Label> element instead of a <y:Labels> list. Class com.yworks.yfiles.server.graphml.flexio.LabelInputHandler was introduced to manage node and edge labels.

The methods readGraph(HttpServletRequest, Graph), sendGraph(Graph, HttpServletResponse), and sendError(String, HttpServletResponse) were removed from class com.yworks.yfiles.server.graphml.support.AbstractGraphRoundtripSupport. These methods are defined in the interface com.yworks.yfiles.server.graphml.support.ServletRoundtripSupport or its implementations GraphRoundtripSupport or Graph2DRoundtripSupport instead.

yFiles FLEX 1.6.0.2 changes since 1.6.0.1

Bugfixes

Client

Fixed a bug which could break com.yworks.graph.model.RotatedSliderEdgeLabelModel's getParameters() method with edges with zero length segments.

Fixed com.yworks.canvas.CanvasComponent not properly dispatching mouse events if the canvas is scaled.

com.yworks.graph.model.GraphClipboard can handle a missing filter function now. This also fixes method paste in com.yworks.ui.GraphCanvasComponent.

Fixed com.yworks.graph.model.GraphClipboard's cut and copy which prevented the onElementCut and onElementCopied callbacks from being invoked in folded graphs.

Server (Java)

Bug in com.yworks.yfiles.server.graphml.flexio.deserializer.ReflectionBasedDeserializer fixed that sometimes caused an ArrayIndexOutOfBoundsException if the property name of a XML child node couldn't be resolved.

com.yworks.yfiles.server.graphml.folding.EdgeViewState now contains a tag property as on client side.

Fixed bug which caused an infinite loop when a list of nodes were grouped in a folded graph with multiple views which have different local roots.

Fixed bug which might have disabled mouse interactivity for com.yworks.graph.drawing.TemplateNodeStyle when com.yworks.canvas.CanvasComponent.enableMouseChildren was set to CanvasComponent.MOUSE_CHILDREN_AUTO

Fixed bug in com.yworks.graph.input.GraphEditorInputMode which committed label text changes to the wrong label when a new label was added after a label edit was cancelled on a node with an existing label.

Fixed possible null pointer error in com.yworks.graph.input.CreateEdgeInputMode which could occur when grid snapping was enabled.

Server (Java)

Bug in class com.yworks.yfiles.server.graphml.flexio.serializer.ImageSerializer fixed that prevented it from serializing java.awt.image.BufferedImage data as created e.g. by the com.yworks.yfiles.server.graphml.flexio.deserializer.ImageDeserializer.

Regression fixed that prevented parsing labels of com.yworks.yfiles.server.graphml.folding.NodeViewStates and com.yworks.yfiles.server.graphml.folding.EdgeViewStates.

yFiles FLEX 1.6 changes since 1.5

General

Major New Features

New rotated slider edge label models

The new edge label model com.yworks.graph.model.RotatedSliderEdgeLabelModel has been added that combines the advantages of the old com.yworks.graph.model.SliderEdgeLabelModel and the com.yworks.graph.model.RotatingEdgeLabelModel. It provides label positions either centered on the edge path or at a specified distance on either of its sides. The rotation angle of the label can be defined as absolute value or as relative to the closest edge segment.

Java server side support for RotatedSliderEdgeLabelModel has been added including a mapping mechanism to the y.layout.RotatedSliderEdgeLabelModel.

The new edge label model com.yworks.graph.model.RotatedSideSliderEdgeLabelModel offers a behavior similar to the RotatedSliderEdgeLabelModel but provides label positions on both sides of the edge path.

Improvements

Client

New com.yworks.graph.model.CompositeLabelModel added that can be used to combine other com.yworks.graph.model.ILabelModels, provides possible parameters of all combined models and finds the best parameter for a given label layout out of these.

The new com.yworks.graph.model.DescriptorWrapperLabelModel can be used to wrap an existing edge or node label model and decorate it with an com.yworks.graph.model.ILabelCandidateDescriptor.

The concept of label candidate descriptors has been added that allows to describe additional properties of candidate ILabelModelParameters that can be used by automatic labeling algorithms.

The method getSnapLines has been added to the com.yworks.graph.input.snapLines.NodeReshapeSnapResultProvider to simplify the customization of snapping during a node resize gesture. It is used to provide the snap lines that shall be checked for valid snap results.

Method pickBestParameter added to com.yworks.graph.model.DefaultLabelModelParameterFinder that returns the label model parameter from a given iterator that best matches a given label layout.

Optional parameters for the properties angle, distance and edgeRelativeDistance have been added to the constructor of com.yworks.graph.model.RotatingEdgeLabelModel.

autoFlip property added to the com.yworks.graph.drawing.SimpleLabelStyle that allows to disable the automatic flipping of the label text if it would be upside-down.

New support class com.yworks.canvas.TagChangedInvalidator allows to automatically trigger a repaint when the user object assigned to model item changes.

The new method zoomToRect of com.yworks.canvas.CanvasComponent allows to conveniently adjust the view port to show a given rectangle in world coordinates. The optional parameter maxZoom allows to specify a maximum zoom level that shall be used by this operation.

Method fitGraphBounds of the com.yworks.canvas.CanvasComponent now has an optional margins parameter which allows to conveniently add margins to the graph.

The new utility class com.yworks.canvas.input.HitTestUtil offers the static method getClosestHits() that filters those hits from a given list of IModelItemss that are closest to the given location.

The new error event com.yworks.graph.anim.GraphMorphErrorEvent is dispatched by com.yworks.ui.GraphCanvasComponent if an error occurs during a morph operation.

Hit testing has been improved to use the closest IModelItem inside the hit radius if no IModelItem is hit directly. Previously the distance from the location hasn't been considered as long as it didn't exceed the hit radius.

The com.yworks.io.graphml.reader.deserializer.ReflectionBasedDeserializer now always prefers to use the com.yworks.support.MarkupExtension of a class over instantiating the class directly. Particularly this is now the case if the class and its extension are in different packages but these packages are mapped to the same namespace in the com.yworks.io.SymbolicPackageNameRegistry. Furthermore it is more tolerant when the attribute or property names of the parsed XML node and the target class only differ in upper and lower case.

The performance of reflection based deserialization has been improved.

The com.yworks.graph.input.snapLines.NodeReshapeSnapResultProvider that is used by default to provide snap results for node resize gestures now supports snapping to the additional snap lines provided by the getAdditionalSnapLines method of the com.yworks.graph.input.snapLines.GraphSnapContext.

The com.yworks.graph.model.DefaultLabelModelParameterFinder has a new property angularDeviationFactor that influences how much the angular deviation is weighted in the metric calculated for the label parameter.

The com.yworks.graph.model.GenericLabelModel now supports to pass an com.yworks.graph.model.ILabelCandidateDescriptor when adding a label model parameter. This descriptor is returned if the context retrieved via the GenericLabelModel's getContext() method is queried for a ILabelCandidateDescriptor.

Method adjustContentRect of the com.yworks.graph.input.GraphEditorInputMode now only adds an undo unit to the undo queue if the content rectangle changed.

Class com.yworks.ui.tree.HierarchyTreeView now extends mx.collections.ArrayCollection instead of implementing mx.collections.ICollectionView and mx.core.IMXMLObject itself. This was necessary to work around an incompatible API change of the Adobe FLEX 4.5 SDK.

The inputMode property is now the default property of com.yworks.ui.GraphCanvasComponent.

The domain check in the license validation has been made case insensitive.

Server (Java)

Improved support for (de)serialization via MarkupExtensions.

The com.yworks.yfiles.server.graphml.flexio.deserializer.ReflectionBasedDeserializer now always prefers to use the com.yworks.support.MarkupExtension of a class over instantiating the class directly.

The performance of reflection based deserialization has been improved.

com.yworks.yfiles.server.graphml.flexio.data.ShapeNodeStyle now provides constants for all shapes which are supported by the client.

Server (.NET)

Added support class for the client's ShinyPlateNodeStyle: yWorks.yFiles.Graph.Web.Style.Markup.ShinyPlateNodeStyle

The insets of yWorks.yFiles.Graph.Web.Style.Markup.CollapsibleNodeStyleDecorator now are taken into account for layouts.

The automatic mapper deserialization is more tolerant with missing default values of simple type.

Demos

The Business Process Diagram Demo has been updated. It now uses a PartitionGrid to configure the layout on server side and the TemplateNodeStyle to visualize swim lanes and pools.

.NET server side support for the Business Process Diagram Demo has been added.

The new EdgeLabelingDemo shows how to configure different edge label models as well as how to apply the generic edge labeling algorithm.

The new IncrementalHierarchicLayouterDemo shows how the IncrementalHierarchicLayouter can be used together with custom user interaction functionality.

The new LayerConstraintsDemo shows how to use layer constraints with the IncrementalHierarchicLayouterto restrict the node layering.

The new MixedLayoutDemo shows how to apply different layouts to group nodes and their contents.

The new SequenceConstraintsDemo shows how to use sequence constraints with the IncrementalHierarchicLayouterto restrict the node sequencing.

The SwimlaneDemo now provides functionality to move nodes to different swim lanes.

The new PortCandidateDemo shows how PortCandidateSets can be used with IncrementalHierarchicLayouterto control from what side edges connect to certain node types in the automatic layout process.

The demo.components.IconButton can now be used with scalable icons like SVG.

Bugfixes

Client

Bug in com.yworks.io.graphml.realizer.CompatResourceInputHandler removed that prevented the input handler to accept any key.

com.yworks.graph.input.CreateEdgeInputMode now cancels the edge creation if the graph structure changes during the edge creation gesture which lead to illegal states.

Bug removed that caused an exception if a node was moved with an active GraphSnapContext while no INodeSnapResultProvider could be found in the node's lookup.

Bug in com.yworks.graph.drawing.IconLabelStyleRenderer removed that could break the rendering when it was used as renderer of an com.yworks.graph.drawing.IconLabelStyleDecorator.

Bug fixed that could break the node reparenting if a custom com.yworks.graph.model.IHitTestIterator was added to the lookup chain.

com.yworks.graph.input.NodeDropInputMode now handles ports correctly.

Small memory leak fixed that happened when creating an edge with deactivated snapping.

Creating edges and moving labels will now correctly update the graph bounds.

Bridges will now be correctly printed.

Values of mappers that have been added to the com.yworks.io.graphml.GraphMLIOHandler or com.yworks.remote.RoundtripHandler having simple type have always been parsed and set as String values instead of their specified type (like Boolean or int).

The com.yworks.io.graphml.writer.serializer.LineTypeSerializer now supports dashed-dotted LineTypes.

Fixed the GraphML deserialization of rectangles sent from a .NET server.

Fixed a bug that could cause com.yworks.graph.input.HandleInputMode.addHandle() to break.

Fixed a bug in com.yworks.graph.input.snapLines.GraphSnapContext that caused its property collectPortSnapLines to be ignored.

Server (Java)

Bug in method syncLabels(y.base.Edge edge, boolean createIfNotExisting) in com.yworks.yfiles.server.graphml.flexio.FlexIOTools removed that sometimes prevented existing edge layouts to be synchronized with the location described by the corresponding label model parameter.

Server (.NET)

Fixed a bug in yWorks.yFiles.Graph.Web.GraphRoundtripSupport which prevented handling node insets if folding was enabled.

Incompatible Changes

Client

Method getContext(label:ILabel, parameter:ILabelModelParameter):ILookup was added to the com.yworks.graph.model.ILabelModel interface to provide a lookup context for a combination of label and parameter. This method is used to lookup an com.yworks.graph.model.ILabelCandidateDescriptor for such a combination. Custom implementations may return com.yworks.support.Lookups.EMPTY if they don't want to provide a label candidate descriptor.

If a mapper had been added to the com.yworks.io.graphml.GraphMLIOHandler or com.yworks.remote.RoundtripHandler for values of simple type, these values have wrongly been parsed and set as String values instead of parsing these Strings to the set type (like Boolean or int). Custom code that works around this bug by looking up the values as Strings and converting them to the correct type itself can now be changed to directly lookup the values as e.g. Boolean or int.

In the interface com.yworks.io.graphml.reader.IAttributeFactory the type of the value parameter of the method createAttribute has been changed from String to * to fix the bug mentioned above.

The signature of the constructor of com.yworks.io.graphml.reader.AttributeInputHandler has been changed to public function AttributeInputHandler(attrName:String, scopeType:String, contentType:String, attributeFactory:IAttributeFactory).

Server (.NET)

The reflection based serialization classes have been moved into the yFilesViewer assembly. Thus, the namespace of the XmlnsDefinition and XmlnsPrefix attributes has been changed from yWorks.yFiles.Graph.Web.GraphML.Compat.Support to yWorks.Canvas.Support.

The following classes are now deprecated

com.yworks.graph.drawing.ComponentNodeStyle should be replaced by the more flexible and better supported com.yworks.graph.drawing.TemplateNodeStyle.

com.yworks.graph.model.SliderEdgeLabelModel and com.yworks.graph.model.RotatingEdgeLabelModel should be replaced by one of the new label models com.yworks.graph.model.RotatedSliderEdgeLabelModel or com.yworks.graph.model.RotatedSideSliderEdgeLabelModel which combine the features of the old edge label models.

yFiles FLEX 1.5 changes since 1.4.2

General

The GraphML extension library GraphML.jar is no longer distributed with yFiles FLEX. Instead of the GraphML extension package, the java server side now uses the yFiles for Java integrated GraphML support (available since 2.7).

Major New Features

Interactive snapping of moved graph elements

So called SnapLines are collected e.g. from graph elements that describe where a moved element can snap to. Existing default implementations of com.yworks.graph.input.snapLines.ISnapLineProvider that provide snap lines for edges (com.yworks.graph.input.snapLines.EdgeSnapLineProvider) and nodes (com.yworks.graph.input.snapLines.NodeSnapLineProvider) can be extended or replaced easily and additional providers can be used as demonstrated in the CustomSnappingDemo.

A so called SnapResult represents a snap to a specific location. During a move gesture all possible SnapResults are collected and the best result is chosen and applied.Default implementations of snap result providers used during node movement (com.yworks.graph.input.snapLines.NodeSnapResultProvider) and node resizing (com.yworks.graph.input.snapLines.NodeReshapeSnapResultProvider) can be customized and the providers e.g. for bends, edges and ports can be replaced by custom implementations of the corresponding snap result provider interfaces.

Diverse visualizations of performed snaps show why the moved object was snapped to this location. The default implementations of the different snap result paintables provide useful data for custom snap result paintings.

The central class com.yworks.graph.input.snapLines.GraphSnapContext offers many properties for an easy customization of the snapping feature.

Snapping of graph elements to grid points and/or grid lines is integrated in the new snapping feature.

Interactive orthogonal edge creation and editing

Using orthogonal edge creation, all edge segments are kept orthogonal throughout the whole creation gesture.

Several convenience methods for working with (grouped) graphs are offered by com.yworks.graph.model.GraphUtil and com.yworks.graph.model.GroupedGraphUtil.

Several new arrow types that were introduced with yFiles for Java 2.7 are now supported.

Support for dashed-dotted com.yworks.graph.drawing.compat.LineTypes was added.

The com.yworks.graph.drawing.SWFNodeStyle now supports AVM1 swfs.

The new interface com.yworks.graph.model.IEdgePortHandleProvider offers better means to provide custom com.yworks.canvas.input.IHandle implementations for the source and target port of an edge.

com.yworks.io.binary.ExternalizableGraph now allows to override the createGraph method.

The alignment of the text of a com.yworks.graph.drawing.SimpleLabelStyle now gets (de-)serialized.

com.yworks.canvas.CanvasComponent has a new property enableMouseChildren that allows to set the policy whether to propagate mouse events to the children in the display list which can dramatically influence the CPU usage and Flash Player performance.

com.yworks.canvas.CanvasComponent has two new properties mouseWheelZoomCenteredRecognizer and mouseWheelZoomMouseLocationRecognizer that allow to customize which modifier should be used to zoom to the canvas' center or the mouse location, respectively, via the mouse wheel.

The callback method printCanceled was added to com.yworks.canvas.CanvasPrinter and is called if the print job couldn't be started.

The method cubicTo was added to com.yworks.canvas.drawing.GeneralPath and appends a cubic bezier curve to the path elements.

The method drawString in com.yworks.canvas.drawing.YGraphics was improved to better consider rotation when calculating the text size.

New static functions addInsetsToRectangle, findLineIntersection, rectanglesAreEqual and getConstrainedLocation were added to com.yworks.canvas.geom.GeomSupport.

A static function createFrom was added to com.yworks.canvas.geom.YPoint that takes an com.yworks.canvas.geom.IPoint as argument.

The event type DRAG_STARTED was added to com.yworks.canvas.input.DragEvent and is dispatched by the com.yworks.canvas.input.MoveInputMode and the com.yworks.canvas.input.HandleInputMode after the drag has been initialized.

New recognizers were added to com.yworks.canvas.input.EventRecognizer:

NO_MODIFIER_PRESSED checks if no SHIFT, ALT or CTRL key was held down in the provided com.yworks.canvas.input.CanvasMouseEvent.

MODIFIER_ALT checks if the ALT key was held down in the provided flash.events.KeyboardEvent, flash.events.MouseEvent or com.yworks.canvas.input.CanvasMouseEvent.

SPACE_PRESSED checks if the SPACE key was pressed down in the provided flash.events.KeyboardEvent.

SPACE_RELEASED checks if the SPACE key was released in the provided flash.events.KeyboardEvent.

CTRL_RELEASED checks if the CTRL key released in the provided flash.events.KeyboardEvent.

BACKSPACE_PRESSED checks if the BACKSPACE key was pressed down in the provided flash.events.KeyboardEvent.

com.yworks.canvas.input.HandleInputMode and com.yworks.canvas.input.MoveInputMode support the new snapping features which can also be temporarily disabled using the CTRL key.

The method createChildInputModeContext of class com.yworks.canvas.input.MultiplexingInputMode was made public.

The com.yworks.canvas.input.OverviewInputMode now uses the mouse wheel zoom factor of the com.yworks.ui.GraphOverviewComponent it is used with.

The static factory method createReshapeableHandles in com.yworks.canvas.input.ReshapeableHandles was added that creates a default instance that provides 8 handles for each corner and side for the given rectangle.

The com.yworks.graph.anim.GraphMorpher now supports morphing node and edge view states. In addition the new method addReshapeable allows to add any com.yworks.canvas.geom.IReshapeable to the morphing.

The com.yworks.graph.drawing.CollapsibleNodeStyleDecorator now includes the collapse icon bounds in the isInside method which is relevant if the decorated style is non-rectangular. Furthermore it updates the node style as well as the collapse icon when the button's action was triggered.

The com.yworks.graph.drawing.DefaultPositionHandler now allows protected access to the reshapeable property.

Subclasses of the com.yworks.graph.drawing.DelegatingNodeStyle now have access to the wrapped style.

The imageClass property of com.yworks.graph.drawing.ImageNodeStyle is now accessible.

A property dropShadow was added to the com.yworks.graph.drawing.PanelNodeStyle to be able to disable the drop shadow that is used per default.

The rendering of the com.yworks.graph.drawing.ShapeNodeStyle using the type com.yworks.graph.drawing.ShapeNodeShape.rectangle3d was improved.

A purple stroke was added to com.yworks.graph.drawing.Strokes.

com.yworks.graph.input.CreateBendInputMode supports the new orthogonal edge editing feature including a recognizer to force splitting an orthogonal segment when starting to drag it.

The new class com.yworks.graph.input.EdgeDragInputModeBase that was added as super class of com.yworks.graph.input.CreateBendInputMode simplifies customizing edge drag behavior.

The com.yworks.graph.input.CreateEdgeInputMode was improved:

It supports the new snapping features which can also be temporarily disabled pressing the CTRL key.

It supports orthogonal edge creation which can be enabled using the orthogonalEdgeCreation property.

It supports dynamic port candidates for the source and target port as well as a modifier to toggle if the dynamic port candidates shall be used or ignored.

The modifier used to enforce the creation of a bend instead of setting the target (default: CTRL) can now be customized.

An event of the new type com.yworks.graph.input.GraphEditorEvent.EDGE_CREATION_STARTED is dispatched after initializing the edge creation.

com.yworks.graph.input.CroppedPortLocationModelParameterHandle now already crops the position during the move gesture not only when finishing it.

The com.yworks.graph.input.GraphEditorInputMode was improved:

An event of the new type com.yworks.graph.input.GraphEditorEvent.LABEL_CHANGED is dispatched after the text of a label was edited interactively.

Support for orthogonal edge editing was added.

Newly created nodes are snapped to grid points if a com.yworks.canvas.input.INodeGridConstraintProvider can be found in the context's lookup.

After pasting graph elements the contentRect property of the used com.yworks.ui.GraphCanvasComponent gets updated.

After grouping the selection the selection is changed to only include the newly created group node and an event of type com.yworks.graph.input.GraphEditorEvent.NODE_CREATED is dispatched

com.yworks.graph.input.PortLocationModelParameterHandle supports snapping and orthogonal edge editing. Furthermore its subclasses now have access to the handle's port.

The isValidParent method of com.yworks.graph.input.ReparentNodeHandler now checks if the newParent isn't a descendant of node and if newParent is either a group node or a collapsed folder node.

Providing label model parameter is now easier to customize as the method getCandidateParameters of com.yworks.graph.model.DefaultLabelModelParameterFinder first uses the label's lookup to find an ILabelModelParameterProvider.

com.yworks.graph.model.DefaultPortCandidate was refactored and now supports creation and usage of dynamic port candidates as well as access to the used port location model and the port style used for new ports.

Updating bridges during movement can be configured on the com.yworks.canvas.input.MainInputMode, com.yworks.canvas.input.HandleInputMode, and com.yworks.canvas.input.MoveInputMode using the new property bridgeUpdateMode.

The static method getPathToRoot was added to com.yworks.graph.model.Hierarchies and allows to conveniently get a list of the ancestors of a node.

com.yworks.graph.model.PortRelocationModel was refactored and now supports dynamic port candidates.

Flipping of rotated labels isn't influenced by the com.yworks.graph.model.RotatingEdgeLabelModel anymore but is only handled by the label style renderer.

The callback method onCancel was added to com.yworks.remote.ImageExportHandler, com.yworks.remote.UploadHandler and com.yworks.remote.DownloadHandler.

In addition the callback method onProgress was added to com.yworks.remote.DownloadHandler and the name of the last successfully downloaded file is stored in its new property fileName.

The color of fonts and com.yworks.graph.drawing.compat.LineTypes now gets (de-)serialized.

com.yworks.io.graphml.reader.AbstractInputHandler has two new static utility methods getAttributeName and getAttributeType that return the values of the attributes GraphMLConstants.ATTR_TYPE respectively GraphMLConstants.ATTR_NAME of a given XML node.

com.yworks.canvas.drawing.YGraphics now allows to nest calls to save() and restore().

A new class com.yworks.remote.AbstractRoundtripHandler can be used as base class for customized roundtrip handlers. com.yworks.remote.RoundtripHandler inherits from this class.

The com.yworks.io.graphml.writer.serializer.StrokeSerializer and com.yworks.io.graphml.reader.deserializer.StrokeDeserializer now can handle mx.graphics.SolidColorStroke.

com.yworks.graph.input.MoveLabelInputMode: Pressing the Ctrl key while dragging allows to move the label independently from the candidates.

Java server

Server side support of the new ShinyPlaneNodeStyle was added.

Several new arrow types that were introduced with yFiles for Java 2.7 are now supported.

com.yworks.yfiles.server.graphml.flexio.binary.ExternalizableGraph now allows to customize the used com.yworks.yfiles.server.graphml.support.GraphRoundtripSupport as it creates the support via the new protected method createGraphRoundtripSupport.The inner static class CustomGraphRoundtripSupport that is used per default is also made protected and therefore can be extended as well.

com.yworks.yfiles.server.graphml.flexio.compat.Stroke can be configured to be deserialized at Flex side as mx.graphics.Stroke and mx.graphics.SolidColorStroke. The com.yworks.yfiles.server.graphml.flexio.serializer.StrokeSerializer and com.yworks.yfiles.server.graphml.flexio.deserializer.StrokeDeserializer support this.

.NET server

The new property UseSolidColorStroke on yWorks.yFiles.Graph.Web.GraphRoundtripSupport determines whether Pens will be deserialized at Flex side as mx.graphics.Stroke and mx.graphics.SolidColorStroke.

Demos

The new SnapLineDemo demonstrates the effect of the different snapping settings.

The new CustomSnappingDemo demonstrates how to further customize snapping in multiple ways.

The new OrthogonalEdgesDemo demonstrates how the orthogonal edge editing can be customized.

All demos were updated to use the more convenient com.yworks.graph.model.GraphDecorator instead of custom com.yworks.support.IContextLookupChainLink implementations.

The BusinessProcessDiagramDemo was refactored to handle the resizing of swim lanes and pools during a node move gesture in an easier and more stable way.

The GraphCanvas demo was extended to support snapping, orthogonal edge editing, grid and dynamic port candidates.

The GridDemo was updated to use the new grid support.

The PortCandidateProviderDemo was extended to demonstrate dynamic port candidates.

The BridgeDemo shows the different modes for updating bridges during interactive movement of graph elements.

The DragNDropDemo uses the improved drag'n'drop support.

Bugfixes

Client

Fixed a bug that caused a null pointer exception if self loops of nodes inside collapsed nodes had been removed twice.

Fixed a memory leak in com.yworks.support.WeakReference which is used in the context of folding.

Fixed a bug in the removeInputMode method of com.yworks.canvas.CanvasComponent that prevented the passed input mode to be canceled if it couldn't be stopped before uninstalling it.

Fixed a bug that could cause a null pointer exception when using mx.core.ScrollPolicy.ON for the scroll bars of com.yworks.canvas.CanvasComponent.

Setting the horizontalScrollPosition or verticalScrollPosition property of com.yworks.canvas.CanvasComponent does now update the scroll bar handles.

Fixed a bug in com.yworks.canvas.CanvasComponent that sometimes prevented the scroll bars to be updated correctly. Most prominently this could occurs during a morphGraph call for a com.yworks.ui.GraphCanvasComponent.

Fixed a potentially negative size of a fill in com.yworks.canvas.drawing.RectangularHighlightPaintable that could be caused by rounding errors.

Fixed a bug in the static method pointLineDistance of com.yworks.canvas.geom.GeomSupport that sometimes returned Number.NaN if the line is vertical and the point lies on the line.

Fixed com.yworks.canvas.input.CompositePositionHandler's cancelDrag and dragFinished method to update its x and y properties.

Fixed a bug in com.yworks.canvas.input.LabelPositionHandler that could cause a null pointer exception when canceling or finishing the drag of a label.

Fixed com.yworks.canvas.input.MoveViewportInputMode to respect the autoDrag property of the com.yworks.canvas.CanvasComponent it is used in.

Fixed a bug in com.yworks.canvas.input.OverviewInputMode that caused an exception if the overview handle was dragged but no clientCanvas was set.

The com.yworks.canvas.model.CollectionModelManager does now remove the com.yworks.canvas.model.IModelItemDescriptors of previously added objects correctly when method clear is called on the underlying com.yworks.util.ICollectionModel.

Fixed a memory leak in com.yworks.canvas.model.CollectionModelManager that could occur for items that had been added to the underlying collection several times.

Fixed a bug in com.yworks.graph.drawing.NodeStyleLabelStyleRenderer that wrongly positioned the label style used as foreground of the label.

Fixed a bug that could be triggered when removing a bend in a compound edit for folded graphs.

Fixed com.yworks.graph.model.DefaultGraph throwing events of type com.yworks.graph.model.GraphEvent.GRAPH_CHANGED for new nodes, edges, labels ports and bends before these elements had been added to the undo queue.

Fixed a bug that prevented the removal of a mapper from the default implementation of com.yworks.graph.model.IMapperRegistry.

Fixed a bug that didn't prevent to set a node as leaf which still has children.

Fixed a memory leak that could occur with undo of edge operations in a folded graph.

Fixed a bug in the copy method of com.yworks.graph.model.GraphCopier that sometimes used the wrong root of the target node hierarchy.

Fixed a bug in com.yworks.remote.ImageExportHandler that prevented to scale the exported image up.

Fixed com.yworks.util.FilteredCollectionModel not reacting on a reset of the filtered collection model.

Cancelling a drag with a MoveInputMode created by com.yworks.canvas.input.MainInputMode.createMoveUnselectedInputMode() now places the nodes back at their original position.

Many bugs have been fixed in the folding environment. All of them could only be triggered programmatically.

Fixed programmatic edge creation.

setLeaf() and set localRoot not included in Undo queue.

Various bugs that occurred in rare cases due to corrupted internal data structures have been fixed.

Server (Java)

Fixed a bug in the type converter used for insets that switched top and right insets upon converting from a string.

Fixed a bug in the deserializer for PanelNodeStyle that prevented reading the style's insets.

Fixed that deserializing an ImageIcon having a non-integer width or height value did throw an error as an integer was expected.

Demos

Fixed the OrgChart demo to sometimes show artifacts if the used demo.orgchart.PersonNode components were cached as bitmap.

Fixed the demo.businessProcessDiagram.CustomArrow used in the BusinessProcessDiagramDemo not being able to be serialized properly.

Most prominent incompatible changes

Client

The default recognizer in com.yworks.graph.input.CreateEdgeInputMode to remove the last bend has changed. You have to press the BACKSPACE key now instead of using <SHIFT + click>.Pressing the SHIFT key while hovering over the source or target node now activates resolving dynamic port candidates of these nodes.

The default value of the mouseWheelZoomFactor property of com.yworks.ui.GraphOverviewComponent was changed from 1.02 to 1.2.

Some refactoring were necessary to support dynamic ports:

The graph parameter was removed from all method signatures of com.yworks.graph.model.IEdgePortCandidateProvider and com.yworks.graph.model.IPortCandidateProvider. Implementations may receive the graph from the passed context via context.lookup(IGraph) as IGraph.

In com.yworks.graph.model.IPortCandidate the property type was replaced by a more general candidateTag which may be any Object and the property valid was replaced by validity which can also indicate a dynamic port candidate. Furthermore the method getPortCandidateAt was added to resolve dynamic port candidates and the signature of method createInstance was changed to take the context for the port candidate is created in as parameter.

The method groupSelection of com.yworks.graph.input.GraphEditorInputMode doesn't create an empty group node anymore if the selection didn't contain any node.

Server (Java)

Due to the change to the yFiles for Java integrated GraphML support a major refactoring of the I/O classes was necessary:

For the scopes of data key elements the enumeration class y.io.graphml.KeyScope is used instead of the constants defined in org.graphdrawing.graphml.GraphMLConstants.

For the types of data key elements the enumeration class y.io.graphml.KeyType is used instead of the constants defined in org.graphdrawing.graphml.attr.AttributeConstants.

The interface com.yworks.yfiles.graphml.flexio.ISerializer was replaced by y.io.graphml.output.SerializationHandler.

The interface com.yworks.yfiles.graphml.flexio.IDeserializer was replaced by y.io.graphml.input.DeserializationHandler

com.yworks.yfiles.graphml.flexio.deserializer.AbstractDeserializer now extends y.io.graphml.input.AbstractDeserializer.Subclasses of AbstractDeserializer have to implement the method public Object deserializeNode(Node xmlNode, GraphMLParseContext context) throws GraphMLParseException (which replaced the earlier method deserializeElementContent).All deserializers and usages have been adjusted accordingly.

Class com.yworks.yfiles.server.graphml.support.GraphMLLayoutGraphIOHandler was refactored and does now extend y.io.graphml.GraphMLHandler. Methods and properties having a counterpart in GraphMLHandler have been removed. In addition the following did change:

The property outputEncoding was removed. Instead there is now a write method that takes the encoding as an argument.

The properties readEmbeddedResources, writeEmbeddedResources, errorHandler, graphMLCoreNS, fileFormatString, fileNameExtension, validationEnabled and writeDTDEnabled as well as the methods canRead and canWrite are not longer supported or used and therefore have been removed.

The methods to add attributes have been removed. Instead appropriate InputHandler and OutputHandler have to be added directly.

Further incompatible changes

Client

Some recognizer in com.yworks.canvas.input.EventRecognizer were altered to use a concise naming scheme for SHIFT, CTRL and ALT modifier:

EventRecognizers.CTRL_PRESSED was renamed to EventRecognizers.MODIFIER_CTRL.

Instead a new EventRecognizers.CTRL_PRESSED function was introduced that recognizes a key down keyboard event for the CTRL key.

The EventRecognizers.SHIFT_PRESSED function now only returns true if the pressed key was the SHIFT key, not if any key was pressed while the SHIFT key was hold down.

The EventRecognizers.MODIFIER_SHIFT function now only returns true if the SHIFT key was pressed in the passed flash.events.KeyboardEvent, flash.events.MouseEvent or com.yworks.canvas.input.CanvasMouseEvent.

The method groupSelection of com.yworks.graph.input.GraphEditorInputMode now returns the newly created group node.

com.yworks.canvas.input.IHandle and com.yworks.canvas.input.IPositionHandler were refactored:

The method handleMove of IPositionHandler doesn't take the delta since the last call anymore. The signature of the method changedfrom handleMove( context:IInputModeContext, originalX:Number, originalY:Number, newX:Number, newY:Number, dx:Number, dy:Number ):Booleanto handleMove( context:IInputModeContext, originalX:Number, originalY:Number, newX:Number, newY:Number):Boolean.Implementations requiring this delta should store the newX and newY values passed in the last handleMove and calculate the delta in the next call.

Several functions of IPositionHandler have been pulled up into its new super interface com.yworks.canvas.input.IDragHandler.

IHandle now inherits from IDragHandler instead of IPositionHandler and therefore doesn't include the setPosition method anymore.

The signature of the method getHandles():Collection of the interface com.yworks.canvas.input.IHandleProvider was changed to getHandles(context:IInputModeContext):Collection which allows more flexibility when calculating the returned collection.

The signature of the constructor of com.yworks.canvas.model.CollectionModelManager was changedfrom public function CollectionModelManager( canvas:CanvasComponent, model:ICollectionModel=null, mapper:IMapper=null )to public function CollectionModelManager( canvas:CanvasComponent, model:ICollectionModel=null, mapper:DictionaryMapper=null ).The restriction to a com.yworks.support.DictionaryMapper was necessary to have access to all keys in the mapper.

The method updateDescriptor of com.yworks.canvas.model.ModelManager was changed to return whether the descriptor had any com.yworks.canvas.ICanvasObjects after the update. The signature changedfrom public function updateDescriptor( descriptor:IModelItemDescriptor ):voidto public function updateDescriptor( descriptor:IModelItemDescriptor ):Boolean.

To be able to be used to visualize snap results, the signatures of the following methods of model related classes have been changed to take or return any instance of Object instead of a com.yworks.canvas.model.IModelItem:

The functions getCanvasObjects and getMainCanvasObject of com.yworks.canvas.model.CollectionModelManager.

The getter for property item of the interface com.yworks.canvas.model.IModelItemDescriptor.

The canInstall and installItem functions of class com.yworks.canvas.model.IModelItemInstaller.

The install and add functions of class com.yworks.canvas.model.ModelManager.

The method reparent was added to the interface com.yworks.graph.input.IReparentNodeHandler. Implementations can get the graph instance to work upon from the passed context via context.lookup(IGraph) as IGraph.

Further refactoring were necessary to support dynamic ports:

The createInstance method of com.yworks.graph.model.AbstractPortCandidateProvider now expects an com.yworks.graph.model.DefaultPortCandidate as parameter instead of any implementation of com.yworks.graph.model.IPortCandidate. In addition the method getCandidateAt that is used to resolve a dynamic port candidate into a non-dynamic one as well as the method createCallbackPortAt that can be used to create a port candidate using a suggested location and label model were added.

Class com.yworks.yfiles.server.graphml.flexio.StyleOutputHandler was replaced by y.io.graphml.output.ComplexDataProviderOutputHandlers using appropriate com.yworks.yfiles.server.graphml.flexio.StyleSerializer.

The classes LabelInputHandler and StyleInputHandler of package com.yworks.yfiles.server.graphml.flexio were replaced by y.io.graphml.input.ComplexDataAcceptorInputHandlers using appropriate com.yworks.yfiles.server.graphml.flexio.LabelDeserializer and com.yworks.yfiles.server.graphml.flexio.StyleDeserializer, respectively.

The interface com.yworks.yfiles.server.graphml.flexio.SerializerRegistry was removed. Input and output handler that did use this interface to (de)serializer child elements can use the methods y.io.graphml.output.GraphMLWriteContext.serialize(Object item) and y.io.graphml.input.GraphMLParseContext.deserialize(Node targetNode) instead.The class com.yworks.yfiles.server.graphml.flexio.FlexIOTools offers new static support methods like public static boolean canBeSerialized(Object item, GraphMLWriteContext context) and public static boolean trySerialize(Object item, GraphMLWriteContext context) that can be used in this context as well.

com.yworks.yfiles.server.graphml.flexio.serializer.AbstractEdgeStyleSerializer and com.yworks.yfiles.server.graphml.flexio.deserializer.AbstractEdgeStyleDeserializer now use the (de)serialization method of the context to (de)serialize source and target arrows. Therefore their methods getArrowSerializer respectively getArrowDeserializer and deserializerArrow were removed.

In com.yworks.yfiles.server.graphml.support.AbstractGraphRoundtripSupport the following methods did change:

public XmlWriter createXmlWriter(OutputStream os) may now throw an GraphMLWriteException

In com.yworks.yfiles.server.graphml.support.GraphRoundtripSupport the following method did change:

protected SerializerRegistry createSerializerRegistry() was removed. Instead the method protected void addRegisteredHandlers(GraphMLHandler handler) is called by configureHandler to add SerializationHandler and DeserializationHandler to the GraphMLHandler.

method public XmlWriter writeStartDocument(String prefix, String docTag, String nsURI) throws GraphMLWriteException was changed to public XmlWriter writeStartDocument() so the first element has to be written using additional writeStartElement and writeEndElement calls.

the methods writeRaw, setDTD, setWriteXmlDeclaration and setEncoding have been removed.

The Lookup class moved from package org.graphdrawing.graphml.util. to y.io.graphml. Imports have to be adjusted accordingly.

com.yworks.yfiles.server.graphml.support.DotnetHierarchyGraphElementFactory now implements the interface y.io.graphml.input.GraphElementFactory instead of extending yext.graphml.compat.DotnetGraphElementFactory.

The class com.yworks.yfiles.server.graphml.folding.markup.Port does now implement the y.io.graphml.Port interface and has a new owner property.

y.geom.YInsets are now used instead of java.awt.Insets for node insets which allows to use double precision.

com.yworks.yfiles.server.graphml.flexio.data.DelegatingStyle now implements the interfaces INodeStyle, IEdgeStyle, ILabelStyle and IPortStyle of the same package.

The return type of getWidth() and getHeight() of the interface com.yworks.yfiles.server.graphml.flexio.data.IIcon was changed from int to double to be analog to the client thereby avoiding data loss during roundtrips.

yFiles FLEX 1.4.2 changes since 1.4.1.2

Improvements

Client

The keyboard shortcut for multi-selection can now be configured using the new GraphEditorInputMode#multiSelectionRecognizer property.

The default modifier for detail selection has been changed from ctrl to shift, in order to prevent clashes of detail- and multi-selection. The old behavior can be restored using the GraphEditorInputMode#detailSelectionRecognizer (see the README for details).

Bugfixes

Client

Fixed a memory leak which kept template components and model items styled with TemplateNodeStyle or TemplateLabelStyle in memory.

Fixed a bug in the default implementation of com.yworks.graph.model.IChangeDummyEdgeAppearanceCallback that caused the target port locations and styles configured using the IDummyEdgeConverter callbacks to be assigned to the source ports instead of target ports.

Fixed a bug that prevented correct deserialization of ports at dummy (collapsed) nodes in folded graphs. For correct deserialization, the dummy port view states are now serialized using the follwing attr.name property: attr.name="http://www.yworks.com/xml/yfiles-graphml/1.0/portviewstates". In previous yFiles FLEX versions, the attr.name for port view states was attr.name="PortViewStates".

Documentation

The tutorial chapters about data binding are corrected for folding enabled graphs.

yFiles FLEX 1.4.1 changes since 1.4.0.2

General

The filename of the Flex 3 compatible yFiles FLEX client library is now yfiles-flex-Flex3.swc. In previous yFiles FLEX releases, the filename was yfiles-flex.swc

Added a yFiles FLEX client library for use with the Flex 4 SDK.

Added separate client demo sources for Flex 4.

Added Flex 4 sources for the getting started guide.

Bugfixes

Client

Fixed a bug in the com.yworks.support.UndoEngine which prevented setting the maximum size.

Server (Java)

Fixed a bug in the com.yworks.yfiles.server.graphml.flexio.ObjectAttributeInputHandler which caused a NullPointerException if an empty element was read.

Fixed a bug in the com.yworks.yfiles.server.graphml.servlets.UploadServlet which lead to an exception if no file was uploaded and the server input stream did not support reset.

yFiles FLEX 1.4.0.2 changes since 1.4.0.1

Bugfixes

Client

Fixed a bug in the FoldingLayoutStage that caused an Exception when handling selfloop edges at children of collapsed nodes.

Fixed a bug in GraphCanvasComponent#morphGraph() that prevented correct disabling of auto adjusting group node bounds during graph layout animations of folded graphs. This sometimes resulted in incorrect group node bounds after layout animations of folded graphs.

Fixed a bug in FilteredGraphWrapper which caused an Error when the wrapper was initialized with a non-empty graph.

GraphMLIOHandler: The GraphEvent which is dispatched after reading a graph now contains the parsed graph instead of the master graph if the graph is a folded graph.

MagnifierInputMode: a IDisplayObjectContext is now used for rendering inside the magnifier "Lens". Items using TemplateStyle are now correctly enlarged with the magnifier.

yFiles FLEX 1.4.0.1 changes since 1.4

General

yFiles FLEX Client: added server side libraries for compatibility with yFiles for Java 2.6 and 2.7

Bugfixes

Client

Changing the port location programatically now forces a repaint of edges which start/end at that port

Java Server

Insets for group nodes can handle non-integer values

.NET Server

Insets for group nodes can handle non-integer values

Minor Improvements

Improved CollapsibleTreeDemo: now uses the TemplateNodeStyle

Improved the functionality of the AuxComponentDemo

yFiles FLEX 1.4 changes since 1.3.2

Major New Features

Support for folding operations in hierarchically grouped graphs

Class com.yworks.graph.model.FoldingManager can be used to establish a model-view setup where so-called managed views provide support for folding operations in a hierarchically grouped graph.

Interface com.yworks.graph.model.IFoldedGraph defines the contract for working with the folding-enabled graph in a managed view. It enables collapsing of group nodes and expanding of previously collapsed group nodes.

The various IInputMode implementations fully support working with folding-enabled graphs. Both collapsing and expanding group nodes and also navigating into and out of group nodes is covered.

A new node style decorator, com.yworks.graph.drawing.ICollapsibleNodeStyleDecorator, has been added. It is specifically designed to support the user interaction part of folding operations with group nodes by means of a collapse/expand "handle."

Class HierarchyTreeView provides additional folding-related support for displaying the hierarchy of a folding-enabled graph in a Tree control.

Visual Enhancements

Class com.yworks.canvas.model.BridgeManager provides support for so-called bridges in edge paths that resolve the visual ambiguity induced by edge crossings.

Enhanced User Interaction Support

A new interactive magnifying glass "tool" enables local zooming in the canvas.

A new navigation input mode enables users to conveniently select nodes using the cursor keys.

General

Distributed as bundle with a yFiles for Java or yFiles .NET server component.

Bugfixes

Client

com.yworks.io.graphml.JavaCompatGraphMLIOHandler and com.yworks.io.graphml.DotnetCompatGraphMLIOHandler now read and write the node and edge ids (node-2-id, edge-2-id) by default.

Bends can now be selected with mouse clicks.

Java compatibility mode: embedded image resources can now be read on server side.

Edge creation: highlight is removed when a drag is cancelled over the source node.

com.yworks.io.graphml.reader.ObjectMapperAttributeInputHandler can now handle shared references.

Fixed dragging behavior of bends on self loop edges.

Fixed incorrect bend relocation when moving nodes together with bends is aborted.

Fixed memory leak in the graph implementation.

The com.yworks.graph.input.CreateEdgeInputMode resets the cursor after edge creation.

Fixed the viewpoint calculation for animated layouts of folded graphs

Server (.NET)

GraphRoundtripSupport.AttributeMapperInputHandler can now read attributes with scope graph.

Incompatible Changes

Client

AbstractInputMode's method install() is final now. All subclassing input modes have to refactor overriding methods public override function install( context:IInputModeContext ) to protected override functioninstallCore(context:IInputModeContext) and calls inside this method to the super implementation to super.installCore()

com.yworks.canvas.input.MainInputMode or com.yworks.graph.input.GraphEditorInputMode: the graphCanvas, selectionModel and collectionModel are not set at the time installing is dispatched. When initializing the input modes move all code which accesses these properties to a handler for the installed event. Note: any other customizations must still be carried out in the installing event handler.

Interface com.yworks.graph.model.IPortCandidate's property get location():IPoint was replaced by get locationModelParameter():IPortLocationModelParameter. Implement get locationModelParameter():IPortLocationModelParameter. To preserve the current functionality, a IPortLocationModelParameter instance can be generated from a given location by new NodeScaledPortLocationModel().createAbsoluteParameter(location.x, location.y).

Method addPortWithParameter( portOwner:IPortOwner, modelParameter:IPortLocationModelParameter ):IPort and the defaultNodePortModelParameter property have been added to the com.yworks.graph.model.IGraph interface.

JavaCompatGraphMLIOHandler and DotnetCompatGraphMLIOHandler now read and write the node and edge ids (node-2-id, edge-2-id) by default. Developers who have registered node and edge attributes for these ids have to remove them.

GraphMoveInputMode now takes the movable items from the parent input mode if the movableItems property is set to null.

The interface com.yworks.support.IServiceProvider has been removed. Occurrences of this interface have been replaced by com.yworks.support.ILookup, which provides the same functionality.

The default value of com.yworks.canvas.CanvasComponent#mouseWheelZoom has been changed from 1.2 to 1.02.

The mappers which keep the node and edge IDs now use "weak" references on nodes and edges: Node and edge instances are eligible for garbage collection after they are removed from the graph and if no other reference to the instance is kept elsewhere.

Server (Java)

The default value of the com.yworks.yfiles.server.graphml.flexio.data.TemplateStyle's dataPropertyName has been changed to "dataObject" in order to match the corresponding default value of the client-side template style implementation.

yFiles FLEX 1.3.2 changes since 1.3.1

Major New Features

The yFiles FLEX client and server components now support automatic reflection based (de)serialization of custom data objects from/to GraphML.

New com.yworks.graph.drawing.ITemplateStyle allows to easily use custom context-aware MXML template components for node- and label visualizations.

General

Minor Improvements

Client

New com.yworks.graph.drawing.IDelegatingStyle along with abstract implementations for node-, edge-, label- and port styles allows to conveniently decorate existing styles.

"User tags" (user defined data objects) that are associated with graph items through the ITagOwner interface are now properly (de)serialized, if the GraphMLIOhandler's supportUserTags flag is set.

A font scaling incompatibility between the flex client and a .NET server component can now be adjusted through corresponding properties of the RoundtripHandler (client) or GraphRoundtripSupport (server) instance.

Many properties provided by the yFiles FLEX that couldn't be used for data binding before are now bindable.

Some yFiles FLEX classes now provide a default constructor, such that they can be instantiated using MXML, e.g. GraphEditorInputMode.

New class com.yworks.graph.model.FilteredGraphWrapper allows to conveniently create a filtered view of a graph.

Improved support for the Flex Builder design view.

New interface com.yworks.graph.model.IPortLocationChangeListener allows to register for port location changes on the default graph using the com.yworks.graph.model.IPortLocationChangeReporter interface.

Improved com.yworks.canvas.drawing.YGraphics#fillRect() to support gradients.

com.yworks.canvas.drawing.YGraphics#drawStyledString() allows to use css styles when drawing strings.

com.yworks.canvas.input.AbstractInputMode now dispatches events when being installed/uninstalled.

Class com.yworks.canvas.input.ContextMenuInputMode now allows to configure whether the custom menu items should be removed before dispatching the context menu event, using the autoCleanCustomMenuItems property. The old behvaior was to always remove these items.

com.yworks.graph.drawing.BevelNodeStyle can no provide a radius handle.

Server (Java)

Improved support for working with grouped layout graphs using a yFiles Java server component.

Server-side (de)serialization for the client-side ComponentNodeStyle has been added.

Improved label size handling on the server.

Bugfixes

Client

Fixed a bug that caused a null reference error to be thrown when modifying certain graph hierarchies.

Fixed a bug in the undo engine that could throw a null reference error in a sequence of cut,undo,redo operations.

The setter of com.yworks.canvas.input.MoveInputMode's releasedRecognizer property will now correctly set the event recognizer for the release event. Also, MoveInputMode's hoverRecognizer property now allows to set a custom event recognizer that determines whether the mouse is hovering over a movable item.

Fixed stroke handling when drawing arrows, such that the stroke is correctly restored after the arrow has been drawn.

The insets of com.yworks.graph.drawing.BevelNodeStyle are now correctly considered by the drawing engine.

Fixed a bug that would corrupt the state of the graph canvas when multiple graph animations were triggered simultaneously.

Incompatible Changes

Client

Mouse event handling of the canvas component changed: except during drag gestures, only events that occur while the mouse is hovering over the canvas are dispatched. This fixes some issues that could occur when using the yFiles FLEX canvas in a complex component hierarchy.

com.yworks.graph.drawing.BevelNodeStyleRenderer now doesn't require a style to be passed to the constructor anymore.

Insets of group nodes are now correctly transferred between client and server.

Incompatible Changes

Client

Class com.yworks.canvas.input.CanvasMouseEvent now extends flash.events.Event instead of flash.events.MouseEvent. This change was necessary because of a compatibility issue with the Adobe AIR framework.

The signature of the textProvider Function of class com.yworks.canvas.input.MouseHoverInputMode was changed: It now expects an instance of com.yworks.canvas.input.IInputModeContext instead of a com.yworks.canvas.CanvasComponent as the first argument.

The signature of the nodeCreator Function of class com.yworks.canvas.input.GraphEditorInputMode was changed: A parameter of type com.yworks.canvas.input.IInputModeContext was added.

The constructor of classes com.yworks.canvas.input.CanvasContextMenuEvent now expects an additional parameter of type com.yworks.canvas.input.IInputModeContext.

The "viewPortChanged" event dispatched by class com.yworks.canvas.CanvasComponent now dispatched a com.yworks.canvas.CanvasEvent.

Interface com.yworks.graph.drawing.IIconLabelStyle now uses an instance of class com.yworks.graph.drawing.IIcon instead of a DisplayObject as its icon.

com.yworks.io.graphml.reader.deserializer.ComponentNodeStyleDeserializer now passes the element node that represents the serialized component to the actual deserializer of the component, instead of its parent xml element.

Server (Java)

Class com.yworks.yfiles.server.graphml.support.GraphRoundtripSupport is now configured to read and write yFiles FLEX client compatibility data objects instead of xml DocumentFragments. In order to use DocumentFragments, setDocumentFragmentMode(true) can be used.

Bugfixes

Client

The drawing color is now correctly reset when drawing arrows with custom border colors.

Fixed a bug that would sometimes prevent correct parsing of shared references on the client.

The clipText property of class com.yworks.canvas.drawing.SimpleLabelStyle is now correctly read and written.

Input modes can now be set directly on the com.yworks.canvas.CanvasComponent using the inputMode property and methods addInputMode(), removeInputMode().

com.yworks.canvas.input.ClickInputMode can now be configured to "swallow" the first mouse click event if the focus was gained with this gesture.

The lookup implementation now uses a com.yworks.graph.model.AbstractModelItem delegate lookup implementation that can be passed to the constructor of all graph model items or set using setLookupImplementation(). The lookup behavior of the default graph model items is now implemented in the corresponding lookup delegate implementations DefaultNodeLookup, DefaultEdgeLookup, DefaultLabelLookup, DefaultBendLookup and DefaultPortLookup.

Bugfixes

Client

Setting the cursor property on com.yworks.canvas.CanvasComponent will now always change the current cursor immediately, if the mouse pointer is located over the canvas.

com.yworks.canvas.input.ContextMenuInputMode now won't throw an Error if a context menu is opened before it was correctly installed.

Fixed serialization of default arrows with arrow type ArrowType.NONE. Using ArrowType.NONE could throw an Error upon deserialization before this bug was fixed.

Changing the selection model on an input mode will now correctly reset the selection state.

Minor Changes

Client

New method iterateHits of com.yworks.canvas.CanvasComponent allows to easily iterate all canvas objects that are located at a given coordinate. The canvas objects can be filtered before hit testing using a custom filter function.

Improved performance of com.yworks.canvas.geom.Yrectangle#reshape()

com.yworks.canvas.input.ReshapeableHandle and com.yworks.canvas.input.ReshapeableHandles now support a minimumEnclosedArea.

New com.yworks.graph.drawing.DelegatingStyle.

New client- and server classes for conveniently handling graph uploads.

Improved collections: new double-linked list com.yworks.support.YList and new HashSet implementation. com.yworks.support.ArrayList and com.yworks.support.YList now support for .. in iteration and the array access operator.

Incompatible Changes

Client

All input modes now use an com.yworks.canvas.input.IInputModeContext. Therefore, the interface com.yworks.canvas.input.IInputMode has changed. All inheritors of IInputMode have been adapted accordingly.

Interface com.yworks.canvas.input.IPositionHandler has also been changed to use com.yworks.canvas.input.IInputModeContext.

Dispatching of mouse events has changed for com.yworks.canvas.CanvasComponent. Please see the migrations section of the README file contained in the yFiles FLEX distribution for details.

yFiles FLEX 1.2.1 changes since 1.2

Improvements

Client

Support for client-side export of bitmap images through class com.yworks.remote.ImageExportHandler.

Improved support for SWF nodes using class com.yworks.graph.drawing.SWFNodeStyle.

Performance optimizations related to mouse gestures.

Interactive relocation of labels implemented for most label models.

All icon resources located in the com.yworks.resources.actions package were replaced by icons created by yWorks.

Documentation

All yFiles FLEX Documentation can now be easily added to the Eclipse/Flex Builder help system.

The getting started guide now includes a .NET server section.

Demos

Added an example component serializer/deserializer to the callout demo.

Added client-side export of bitmap images to the graph canvas demo.

Bugfixes

Client

The CanvasComponent is now correctly updated when its size is changed interactively.

SWF nodes that were deserialized from base64 strings will not flicker anymore when the canvas is repainted.

com.yworks.canvas.input.MoveInputMode can now correctly be cancelled.

Fixed focus issue of text fields for interactive label editing.

Fixed a bug that would sometimes cause an error to be thrown while painting a ComponentNodeStyle.

Fixed a bug that caused arrows to be created even if not needed when parsing old GraphML format.

ISerializers and IDeserializers that were registered last will now correctly be used first.

The erroneous click offset of the hand cursor was corrected.

yFiles FLEX 1.2 changes since 1.2-RC-1

Improvements

Client

The com.yworks.canvas.input.GraphEditorInputMode now comes with a MoveLabelMode per default.

The com.yworks.graph.drawing.ImageNodeStyle was improved to allow for more ways of specifiying the image to be displayed. Also, (de)serialization of embedded bitmap images passed to the ImageNodeStyle was improved.

Dashed/dotted strokes are now correctly (de)serialized.

Bugfixes

Server (yFiles Java)

Class com.yworks.yfiles.server.graphml.support.Graph2DRoundtripSupport will now correctly configure the io handler, so no duplicate node- or edge realizers will appear in the GraphML output anymore.

Client

A bug in the visibility calculation of the default edge renderer was fixed that would sometimes prevent interactive bend creation at certain coordinates.

Setting com.yworks.io.graphml.GraphMLIOHandler#writeSharedReferences to false now actually has the desired effect.

The smoothing parameter of com.yworks.graph.drawing.IPolylineEdgeStyle will now be correctly (de)serialized.

Dashed/dotted edge strokes will now be correctly (de)serialized when using the yFiles for Java GraphML format.

Class com.yworks.remote.HttpServiceFactory will now append a <service-extension> parameter specified in the config file to all service urls.

New backgroundGroup property for com.yworks.ui.GraphCanvasComponent.

Server (yFiles.NET)

The default Web.Config now uses the .ashx file extension for defining http handler mappings. If no file extension is used, the web site will not work with some IIS versions.

Incompatible Changes

Server (yFiles for Java)

Class com.yworks.yfiles.server.graphml.support.GraphRoundtripSupport now only has a default constructor. Instead of using class GraphRoundtripSupport in Graph2D mode, the new class Graph2DRoundtripSupport should now be used.

Client

Instead of creating a new instance for every roundtrip, com.yworks.remote.RoundtripHandler will now reuse the inputIOHandler instance. createInputIOHandler will only be called the first time the property is accessed.

Bugfixes

Client

com.yworks.canvas.drawing.AdvancedStroke.drawPath now correctly transforms the path using the current graphics transformation.

Setting GraphEditorInputMode.handleInputMode.enabled to false won't lead to inconsistent behavior anymore.

com.yworks.ui.GraphCanvasComponent.morphGraph() will now correctly restore the scroll policies to their old values after the animation has finished.

Bugfixes

Client

An image drawn with com.yworks.canvas.drawing.YGraphics#drawImage will now be correctly transformed using the current graphics transformation.

Server (yFiles.NET)

yWorks.yFiles.Graph.Web.SaveGraphHandler will now correctly decode GraphML data send from the client before writing it to the save stream.

yFiles FLEX 1.1 changes since 1.1-RC2

Bugfixes

Client

Fixed a bug that would cause arrows to be deserialized incorrectly when GraphML data was send from a yFiles Java server.

Fixed a bug that caused serialization of target arrows as source arrows.

Fixed a bug in com.yworks.canvas.input.MultiplexingInputMode#remove

Fixed a bug in com.yworks.canvas.geom.GeomSupport#setCenter that caused the RotatingEdgeLabelModel to draw calculate its geometry with an erroneous offset.

Reverted to a previous version of the Adobe Flex SDK libraries for building the bundled yFiles FLEX client library, since the newer libraries caused the blue box of the label editor to stay visible when the label editor was removed.

yFiles FLEX 1.1-RC2 changes since 1.1-RC1

Improvements

General

Client

Support for client-side compression: compress property on com.yworks.remote.RoundtripSupport and com.yworks.remote.DownloadHandler

New edge label model: com.yworks.graph.model.FreeEdgeLabelModel.

New distance and edgeRelativeDistance parameters for com.yworks.graph.model.RotatingEdgeLabelModel.

Improved serialization of label models when the yFiles Java compatibility mode is used.

Bugfixes

Client

Fixed a bug that would cause arrows to be deserialized incorrectly when GraphML data was send from a yFiles Java server.

Fixed a bug that caused serialization of target arrows as source arrows.

Server

The support class com.yworks.yfiles.server.graphml.support.GraphRoundtripSupport for yFiles Java server components will now try to map client label models to yFiles Java label models, if setMapLabelModels( boolean ) is set to true (the default).

com.yworks.yfiles.server.graphml.support.GraphRoundtripSupport will now automatically deflate/decode the GraphML data sent from the client, using the new com.yworks.yfiles.server.graphml.support.GraphDecoder class.

yFiles FLEX 1.1-RC1 changes since 1.0.2

Improvements

General

A small .NET server library and C# source code demo applications have been included in the distribution, demonstrating the fact that yFiles FLEX can be used both with our yFiles Java and yFiles .NET libraries.

Improvements

Client

The GraphML file format has changed for arrows and user tag objects. Reading/writing the old format is still supported.

Support for reading default values in GraphML files.

The default arrow implementation is now able to serialize itself.

New backgroundAlpha property for com.yworks.canvas.CanvasComponent.

Added a scale parameter to the constructor of com.yworks.graph.model.DefaultArrow.

The client can now read/write named colors (compatible to color names in the .NET framework) to/from GraphML files.

com.yworks.canvas.input.MainInputMode#collectionModel is now writable.

When the selection model of the com.yworks.canvas.input.MainInputMode is replaced, the internal state is now correctly updated.

com.yworks.graph.input.CreateEdgeInputMode#getTargetPortCandidateProvider now won't be called with a null sourcePortCandidate when the first edge is created.

com.yworks.graph.model.DefaultArrow#create now doesn't use a default IStroke and/or IFill anymore, if null is passed as the stroke or fill parameter. Use com.yworks.graph.model.DefaultArrow#createDefault to create an arrow with default stroke and fill.

The lookup implementations of com.yworks.graph.model.DefaultEdge, com.yworks.graph.model.DefaultLabel and com.yworks.graph.model.DefaultPort will now correctly delegate at first to the lookup implementations of their style renderers.

Server

com.yworks.yfiles.server.graphml.servlets.LoadGraphServlet and com.yworks.yfiles.server.graphml.servlets.DownloadServlet now allow to set the content type of the response header.

yFiles FLEX 1.0.1 - changes since 1.0

Bugfixes

Some of the IInputMode implementations that are based on StateMachineInputMode did not cancel correctly. This led to inconsistent states in the editor which in turn could lead to exceptions.

During the editing of a label the TextEditorInputMode's input field did not react properly to mouse events and got into a bad state once the mouse had been clicked in it.

The EventRecognizers.SHIFT_PRESSED function will now only return true if the event target has the focus.