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/GEF4/Layout"

< GEF‎ | GEF4
(Migration from Zest 1.x to GEF4 Layout)
Line 58: Line 58:
  
 
== Migration from Zest 1.x to GEF4 Layout ==
 
== Migration from Zest 1.x to GEF4 Layout ==
In GEF4, the layout API has been reworked.
+
The layout API that was part of Zest 1.x has been migrated into the [[GEF/GEF4/Layout|GEF4 Layout]] component, where it has been reworked.
  
 
=== Custom Layouts ===
 
=== Custom Layouts ===

Revision as of 04:02, 22 May 2015

Note to non-wiki readers: This documentation is generated from the Eclipse wiki - if you have corrections or additions it would be awesome if you added them in the original wiki page.


Introduction

The GEF4 Layout component provides basic abstractions for layout algorithms and related listeners, as well as a set of layout algorithm implementations. It is internally decomposed into the single Layout module.

Layout

  • bundle: org.eclipse.gef4.layout

Layout

  • package: org.eclipse.gef4.layout

Layout Algorithms

  • package: org.eclipse.gef4.layout.algorithms

This package provides different implementations of concrete layout algorithms.

BoxLayoutAlgorithm

A BoxLayoutAlgorithm is a simple layout algorithm that places all elements in a single column or row, depending on a specifiable orientation.

GridLayoutAlgorithm

A GridLayoutAlgorithm is a simple layout algorithm that places all elements into a grid, where the number of columns and rows is computed by the algorithm.

HorizontalShiftLayoutAlgorithm

A HorizontalShiftLayoutAlgorithm is a simple layout algorithm that shifts overlapping nodes to the right.

RadialLayoutAlgorithm

A RadialLayoutAlgorithm lays out a tree in a circular fashion, where the roots are located in the center.

GEF4-Layout-radial.png

SpaceTreeLayoutAlgorithm

The SpaceTreeLayoutAlgorithm keeps track of node positions all the time, always trying to form a nice tree structure. This means movement of nodes with the mouse is somehow restricted (you can move a node within its current layer, but only if it doesn't cause nodes to be pushed out of the graph area. When an expand operation is requested on a node, the node is centered and its subtree is shown, as long as there's enough space (other parts of the tree can be collapsed to extend available space).

Zest-tree-layout-spacetree.png

SpringLayoutAlgorithm

GEF4-Layout-spring.png

SugiyamaLayoutAlgorithm

GEF4-Layout-sugiyama.png

TreeLayoutAlgorithm

The TreeLayoutAlgorithm was designed with the PDE Dependency Visualization in mind and is based on its layout algorithm. Initially only nodes without predecessors are expanded. Other nodes become visible if they have at least one direct predecessor which is visible and expanded. Collapsed nodes can have outcoming connections if the target node is visible because of a predecessor. There's an option to hide such connections.

Zest-tree-layout-dag.png

Layout Listeners

  • package: org.eclipse.gef4.layout.listeners

Migration from Zest 1.x to GEF4 Layout

The layout API that was part of Zest 1.x has been migrated into the GEF4 Layout component, where it has been reworked.

Custom Layouts

To define custom layouts, instead of extending AbstractLayoutAlgorithm implement ILayoutAlgorithm (see example below and full code in CustomLayoutExample.java in the examples bundle).

ILayoutAlgorithm layoutAlgorithm = new ILayoutAlgorithm() {
  private ILayoutContext context;
 
  @Override
  public void applyLayout(boolean clean) {
    IEntityLayout[] entitiesToLayout = context.getEntities();
    int totalSteps = entitiesToLayout.length;
    double distance = LayoutProperties.getBounds(context).getWidth() / totalSteps;
    int xLocation = 0;
 
    for (int currentStep = 0; currentStep < entitiesToLayout.length; currentStep++) {
      IEntityLayout layoutEntity = entitiesToLayout[currentStep];
      LayoutProperties.setLocation(layoutEntity, xLocation,
      /* LayoutProperties.getLocation(layoutEntity).y */0);
      xLocation += distance;
    }
  }
 
  @Override
  public ILayoutContext getLayoutContext() {
    return context;
  }
 
  @Override
  public void setLayoutContext(ILayoutContext context) {
    this.context = context;
  }
};

Back to the top