Jump to: navigation, search

GEF/New and Noteworthy/3.10


The GEF 3.10.0 (Mars) release provides minor releases for the production components Draw2d 3.x (3.10.0), GEF (MVC) 3.x (3.10.0), and Zest 1.x (1.6.0), as well as a first release (0.1.0) of the new GEF4 components. It has to be pointed out that the Draw2d 3.x, GEF (MVC) 3.x, and Zest 1.x production components are not further developed but only maintained, while development is currently focussing the GEF4.

While GEF4 Common, GEF4 Geometry, GEF4 FX, and GEF4 MVC components have been mostly written from scratch, the GEF4 Graph, GEF4 Layout, GEF4 DOT, GEF4 Zest, and GEF4 Clodio components are (at least partially) based on the former Zest2 code base. However, in contrast to it, everything contributed to the 3.10.0 (Mars) release is completely self-contained, i.e. all components have been migrated/re-written so that none them relies on the API provided by Draw2d 3.x, GEF (MVC) 3.x, or Zest 1.x.

An overview of all GEF4 components and detailed documentation on each can be found under GEF4 reference documentation. Here, only a short history and a list of the most significant changes, implemented during the Mars release timeframe, is given per component.

Draw2d 3.10.0

Only minor changes have been applied to the Draw2d 3.x production component, which is in maintenance mode.

Tooltip Delay (3.10.0 M1)

TooltipHelper now allows clients to set the tooltip delay (see Bug #323656).

GEF (MVC) 3.10.0

Only minor changes have been applied to the GEF (MVC) 3.x production component, which is in maintenance mode.

Redoing Commands (M2)

Added Command#canRedo(), which by default delegates to Command#canExecute() but can be overwritten to decide whether a command is redoable or not. The CommandStack now evaluates this when checking of the command on its top can be redone (CommandStack#canRedo()) (see Bug #332351).

Zest 1.6.0

Only minor changes have been applied to the Zest 1.x production component, which is in maintenance mode.

GEF4 Common 0.1.0

The GEF4 Common component has been created by extracting generic abstractions (e.g. IActivatable, IAdaptable, or IPropertyChangeNotifier) and supporting classes from the GEF4 MVC and GEF4 FX during the 3.10 development stream. It provides functionality that is (potentially) used by all other components and was basically written from scratch.

Added support for AdapterMap-Bindings (M1)

To combine the IAdaptable-mechanism with Google Guice-based dependency injection, a specific map-binding was introduced, which allows to inject adapters into an IAdaptable (see 'IAdaptable - GEF4's interpretation of a classic' for details).

Added support for registering/querying adapters with parameterized types (M4)

Augmented IAdaptable to enable registration and retrieval of adapters based on TypeToken keys. This way, registration of adapters can not only be performed based on raw types (e.g. Provider.class) but also using parameterized types (e.g. Provider<IGeometry> or Provider<IFXAnchor>) (see Bug #453119 and 'IAdaptable - GEF4's interpretation of a classic' for details).

Added IPropertyStore and PropertyStoreSupport (M4)

You can use an IPropertyStorey to manage properties for which changes can be observed using the IPropertyChangeNotifier mechanism.

Added support for Guice-based scoping of instances to IAdaptables (M5)

Implemented a specific Guice Scope (AdaptableScope) that allows to (transitively) scope instances to IAdaptables (see Bug #458320).

GEF4 Geometry 0.1.0

The GEF4 Geometry component has been written from scratch to provide a decent double-based geometry API, as a replacement to the geometry classes provided by Draw2d 3.x.

Introduced support for computing nearest intersection w.r.t .to reference point (M2)

Extended the ICurve interface with a method (getNearestIntersection(ICurve, Point)) that allows to compute the intersection point with another ICurve nearest to some reference point. This is e.g. quite handy when computing anchor position within FXChopBoxAnchor.

GEF4 Graph 0.1.0

The GEF4 Graph component has been factored out of the Zest2 code base (DOT4Zest).

Added methods to alter a Graph's nodes, edges, and attributes (M4)

Changed that a constructed Graph is immmutable. The limitation of read-only access had prevented use cases of GEF4 Zest and GEF4 DOT, where a constructed Graph had to be modified after its initial construction.

Added support for nested graphs (M4)

A Node can have a nested Graph assigned to it. The node containing the nested graph is referred to as the 'nesting node'.

Migrated GraphCopier from GEF4 DOT (M5)

The GraphCopier that was initially bundled within DOT as ZestGraphImport was moved to GEF4 Graph, as it provides generic capabilities to copy Graph instances and is not bound to GEF4 Zest or GEF4 DOT.

GEF4 Layout 0.1.0

The GEF4 Layout component was factored out of the former Zest2 code base (org.eclipse.gef4.zest.layouts), which was initially created by forking Zest 1.x (org.eclipse.zest.layouts). It has been significantly refactored within this process.

Cleaned-up layout interfaces (M4)

Moved the Sugiyama-specific abstractions (LayerProvider, NodeWrapper, CrossingReducer) into the SugiyamaLayoutAlgorithm as nested classes. Removed the ExpandCollapseManager from the LayoutContext, as it is specific to the SpaceTreeLayoutAlgorithm.

Migrated Zest.Core layout examples (M5)

The examples demonstrate different layout algorithms. Therefore they rather belong to the GEF4 Layout component. Moreover, the original examples used zest.core for the visualization, which is replaced by Zest.FX in the migrated examples.


GEF4 DOT 0.1.0

The GEF4 DOT component has been factored out of the Zest2 code base (DOT4Zest) and has been migrated to be based on GEF4 Zest.

Re-created DOT Graph view based on GEF4 Zest (M3)

Replacing the former Zest2 code within org.eclipse.gef4.zest.ui that still depended on Draw2d, a new GEF4 DOT Graph view was introduced, which is based on GEF4 Zest and thus uses JavaFX for visualization purposes (see Bug #441129 for details).


Refactored grammar definition and fixed parsing problems within DOT editor (M4)

Refactored grammar definition and fixed several parsing issues within DOT editor (see Bug #451097 for details).

Added concise lexical and semantic syntax coloring to DOT editor (M4)

Add proper support for lexical and semantic syntax coloring within DOT editor (see Bug #450448 for details).

Added proper outline view for DOT editor (M4)

Implemented a proper outline view for the DOT editor (see Bug #452650 for details).


Refactored tests and examples (M5)

Mainly, unnecessary classes were removed and classes with similar purpose were merged.

GEF4 FX 0.1.0

The GEF4 FX component has been written from scratch to replace the Draw2d 3.x production component. Parts of it were provided as a distinct SwtFx component up to M1 (see Bug #441464), when the code was merged in as the FX.UI module. It uses JavaFX for visualization and provides support for integrating JavaFX into SWT. A lightweight rendering support for SWT (as provided by Draw2d is not part of this component).

Removed SwtFXScene (M1)

Removed the need for specific SwtFXScene implementation by ensuring that FXControlAdapter (formerly SwtFXControlAdapter) can work with an arbitrary JavaFX Scene (see Bug #441463).

Revised IFXAnchor (M2)

IFXAnchor#attach() and IFXAnchor#detach() now take an additional IAdaptable argument, which may be used to provide additional information to the specific anchor. In case of an FXChopBoxAnchor, this mechanism is used to pass in a FXChopBoxAnchor$ReferencePointProvider, thereby replicating the old FXChopBoxHelper mechanism which involved direct coupling. Furthermore, an FXChopBoxAnchor$ComputationStrategy interface has been extracted from the FXChopBoxAnchor (an implementation can be passed in via its constructor), so the strategy, which is used to compute anchor positions, can be replaced (see Bug #442971, Bug #444009).

Introduced IFXConnectionRouter (M2)

An IFXConnectionRouter interface has been extracted from FXConnection. It can be passed in via FXConnection#setRouter() and is responsible of computing a curve geometry from the passed in (manually provided) waypoints of the connection (see Bug #443781).

Introduced ScrollPaneEx (M5)

The ScrollPaneEx is an alternative to JavaFX's ScrollPane. The ScrollPaneEx provides a set-up which is suitable for graphical viewers/editors, i.e. an "infinite" canvas with viewport transformation, reveal(Node) functionality, fully controllable behavior, etc.

GEF4 MVC 0.1.0

The GEF4 MVC component has been written from scratch to replace the GEF (MVC) 3.x production component. While some proven concepts have been adopted, the component is a complete re-design.

Added grid layer and implemented snap-to-grid support (M2)

The FXRootPart now creates an FXGridLayer (which was added to the GEF4/FX component) as underlying layer by default. Visibility of the layer can be controlled via a GridModel, which is to be registered as an IViewer adapter. The GridModel allows to select the grid cell height and width and whether the grid is to be zoomed with the contents layer or not. It can also be used to enable/disable snap-to-grid, which is respected by the FXResizeRelocatePolicy and FXBendPoliy.

FXGridLayer integrated in GEF4 MVC Logo example

Added support for hover handles (M3)

To enable that handles are only displayed during mouse hover (and a short delay after), FXHoverBehavior and the FXDefaultHandlePartFactory now support the creation (and automatic removal) of hover handles.

Hover handle integrated in GEF4 Zest Graph example

Added support for transaction-based execution of operations (M3)

The IDomain now allows to open/close transactions, executing a set of related IUndoableOperation as an atomic (composite) operation. This way, several (transaction) policies can independently execute operations during an interaction, while undo/redo is performed for the overall transaction.

Introduced ContentPolicy and moved responsibility for content operations into IContentPart (M3)

Introduced ContentPolicy to formalize that parts of the interaction that affects the content (i.e. the to be visualized model). The content ContentPolicy provides undoable operations to add child content to a parent, to anchor content on other content, etc. All these operations delegate to the respective host IContentPart. As the respective content parts have to be implemented by adopters anyway, the model visualization and model manipulation related code can be kept in a single place (namely within the IContentPart). Furthermore, the ContentPolicy is generic and can be re-used independently.

Added support for content creation (M4, M7)

The CreationPolicy uses the ContentPolicy to create new content. In the MVC logo example, a simple creation-menu is integrated, which can be activated using the secondary mouse button (see #45495).

Creation menu integrated in GEF4 MVC Logo example

The MVC logo example furthermore demonstrates creation of connections via hover handles (see #445847).

Hover handle for connection creation in GEF4 MVC Logo exampleConnection created via hover handle in GEF4 MVC Logo example

Added support for gesture-based interactions (M5, M7)

MVC.FX offers support for pinch-spread, scroll, and rotate-gestures. The MVC logo example demonstrates gesture-based panning/scrolling, zooming, and rotating (see Bug #449129 and Bug #462787).

GEF4 Zest 0.1.0

The GEF4 Zest component has been basically re-written from scratch to replace the Zest 1.x production component, as well as the intermediary replacement in the form of the Zest2 code base (org.eclipse.gef4.zest.core and org.eclipse.gef4.zest.jface), which was initially created by forking Zest 1.x (org.eclipse.zest.core). It is now based on GEF4 Graph, GEF4 Layout, which were factored out of the Zest2 code base, and uses GEF4 MVC as the underlying model-view-controller framework.

Implemented hiding/unhiding of nodes (M3)

Nodes can now be hidden using the '-' hover handle on the node.


Sibling nodes, connected to the hidden node will indicate the number of hidden nodes, connected to them, by means of a (red circle) decoration. Using the '+' hover handle on any such sibling node, will make the hidden nodes visible again.


Implemented navigating nested graphs (M4)

Only one level of a hierarchy is rendered as once, but you can open a nested graph by double clicking the corresponding node.

Nesting node

Implemented rotation of nodes (M5, M7)

Nodes can now be rotated using mouse and 'Ctrl' key via selection handles, or directly by means of rotation gestures (on devices which support touch gestures).


Implemented inline-rendering of nested graphs (M5)

Nesting nodes will now render their nested nodes at a certain zoom threshold. Zooming can be performed with the mouse wheel and 'Alt' or 'Ctrl' key, or by using a pinch-spread gesture (on devices which support touch gestures).


Implemented navigating nested graphs with continuous zoom (M5)

When zooming a nesting node further, from a certain zoom threshold onwards, the viewer contents will be switched to render only the nested graph. Zooming out will return to the above graph level.


Implemented replacement API for zest.core (M6)

Re-implemented the functionality of zest.core within Zest.FX and Zest.FX.UI modules (see Bug #438734 for details).

Implemented replacement API for zest.jface (M6)

This completes the migration of the Zest 2 code base (Bug #438734) and opens a migration path for users of the previous API. Custom content and "label" providers are defined within org.eclipse.gef4.zest.fx.ui.jface, but the ZestContentViewer does also support the JFace ILabelProvider, IColorProvider, IFontProvider, and IToolTipProvider (see Bug #441131 for details).

GEF4 Cloudio 0.1.0

The GEF4 Cloudio component has been factored out of the Zest2 code base (Cloudio) into a standalone component. It does not rely on other GEF4 components and was not yet migrated to use JavaFX for rendering.