GEF/New and Noteworthy/3.10
- New and Noteworthy in 3.0
- New and Noteworthy in 3.5
- New and Noteworthy in 3.6
- New and Noteworthy in 3.7
- New and Noteworthy in 3.8
- New and Noteworthy in 3.9
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.
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)
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).
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.
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)
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<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
Added support for Guice-based scoping of instances to IAdaptables (M5)
Implemented a specific Guice
AdaptableScope) that allows to (transitively) scope instances to
IAdaptables (see Bug #458320).
GEF4 Geometry 0.1.0
Introduced support for computing nearest intersection w.r.t .to reference point (M2)
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
GEF4 Graph 0.1.0
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)
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)
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 (
CrossingReducer) into the
SugiyamaLayoutAlgorithm as nested classes. Removed the
ExpandCollapseManager from the
LayoutContext, as it is specific to the
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
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
SwtFXControlAdapter) can work with an arbitrary JavaFX
Scene (see Bug #441463).
Revised IFXAnchor (M2)
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)
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
Added grid layer and implemented snap-to-grid support (M2)
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
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.
Added support for transaction-based execution of operations (M3)
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)
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)
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).
The MVC logo example furthermore demonstrates creation of connections via hover handles (see #445847).
Added support for gesture-based interactions (M5, M7)
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.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.
Only one level of a hierarchy is rendered as once, but you can open a nested graph by double clicking the corresponding 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).
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)
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
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.