Skip to main content

Notice: this Wiki will be going read only early in 2024 and edits will no longer be possible. Please see: https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/wikis/Wiki-shutdown-plan for the plan.

Jump to: navigation, search

Difference between revisions of "GEF/New and Noteworthy/3.10"

(Migrated Zest.Core layout examples (M5))
(Migrated Zest.Core layout examples (M5))
Line 84: Line 84:
 
The examples demonstrate different layout algorithms. Therefore they rather belong to the [[GEF/GEF4/Layout |GEF4 Layout]] component. Moreover, the original examples used zest.core for the visualization, which is replaced by Zest.FX in the migrated examples.
 
The examples demonstrate different layout algorithms. Therefore they rather belong to the [[GEF/GEF4/Layout |GEF4 Layout]] component. Moreover, the original examples used zest.core for the visualization, which is replaced by Zest.FX in the migrated examples.
  
[[File:GEF4-Layout-SpringLayoutExample.png]]
+
[[File:GEF4-Layout-SpringLayoutExample.png|300px]]
  
 
----
 
----

Revision as of 05:46, 12 May 2015

General

The Eclipse 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 Draw2d 3.x, GEF (MVC) 3.x, and Zest 1.x production components are not further developed but only maintained, and that development is currently focussing the GEF4 alone.

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. 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

Tooltip Delay (3.10.0 M1)

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


GEF (MVC) 3.10.0

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).


GEF4 Common 0.1.0

The GEF4 Common component has been created by extracting generic parts 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.

Creation of Component (M1)

GEF4 Common component was created by extracting generic abstractions from GEF4 MVC and GEF4 FX, including some generic abstractions like IActivatable, IAdaptable, or IPropertyChangeNotifier, as well as related utility/support classes.

Introduction of AdapterMap-Binding-Support (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)

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)


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-Layout-SpringLayoutExample.png


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 Viewer 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 Viewer was introduced, which is based on Zest.FX and Zest.FX.UI and thus uses JavaFX for visualization purposes (see Bug #441129 for details).

GEF4-DOT-GraphView.png

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).

DotEditor.png

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 API (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)

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.

Created Zest.FX and Zest.FX.UI as a replacement for Zest2 Core (M1)

Implemented Pruning/Unpruning of child nodes (M3)

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)

Implemented rendering of nested graphs (M5)

Implemented navigating nested graphs with continuous zoom (M5)

Implemented a replacement API for Zest JFace (M6)

This completes the migration of the Zest code base (Bug #438734) and opens a migration path for users of the previous API. Custom content and "label" providers are defined within o.e.g4.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.

Back to the top