com.mxgraph.view.mxLayoutManager Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of jgraphx Show documentation
Show all versions of jgraphx Show documentation
JGraphX Swing Component - Java Graph Visualization Library
This is a binary & source redistribution of the original, unmodified JGraphX library originating from:
"https://github.com/jgraph/jgraphx/archive/v3.4.1.3.zip".
The purpose of this redistribution is to make the library available to other Maven projects.
package com.mxgraph.view;
import java.awt.Point;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import com.mxgraph.layout.mxIGraphLayout;
import com.mxgraph.model.mxGraphModel;
import com.mxgraph.model.mxIGraphModel;
import com.mxgraph.model.mxGraphModel.mxChildChange;
import com.mxgraph.model.mxGraphModel.mxGeometryChange;
import com.mxgraph.model.mxGraphModel.mxRootChange;
import com.mxgraph.model.mxGraphModel.mxTerminalChange;
import com.mxgraph.util.mxEvent;
import com.mxgraph.util.mxEventObject;
import com.mxgraph.util.mxEventSource;
import com.mxgraph.util.mxUndoableEdit;
import com.mxgraph.util.mxUtils;
import com.mxgraph.util.mxUndoableEdit.mxUndoableChange;
/**
* Implements a layout manager that updates the layout for a given transaction.
* The following example installs an automatic tree layout in a graph:
*
*
* new mxLayoutManager(graph) {
*
* mxCompactTreeLayout layout = new mxCompactTreeLayout(graph);
*
* public mxIGraphLayout getLayout(Object parent)
* {
* if (graph.getModel().getChildCount(parent) > 0) {
* return layout;
* }
* return null;
* }
* };
*
*
* This class fires the following event:
*
* mxEvent.LAYOUT_CELLS fires between begin- and endUpdate after all cells have
* been layouted in layoutCells. The cells
property contains all
* cells that have been passed to layoutCells.
*/
public class mxLayoutManager extends mxEventSource
{
/**
* Defines the type of the source or target terminal. The type is a string
* passed to mxCell.is to check if the rule applies to a cell.
*/
protected mxGraph graph;
/**
* Optional string that specifies the value of the attribute to be passed
* to mxCell.is to check if the rule applies to a cell. Default is true.
*/
protected boolean enabled = true;
/**
* Optional string that specifies the attributename to be passed to
* mxCell.is to check if the rule applies to a cell. Default is true.
*/
protected boolean bubbling = true;
/**
*
*/
protected mxIEventListener undoHandler = new mxIEventListener()
{
public void invoke(Object source, mxEventObject evt)
{
if (isEnabled())
{
beforeUndo((mxUndoableEdit) evt.getProperty("edit"));
}
}
};
/**
*
*/
protected mxIEventListener moveHandler = new mxIEventListener()
{
public void invoke(Object source, mxEventObject evt)
{
if (isEnabled())
{
cellsMoved((Object[]) evt.getProperty("cells"), (Point) evt
.getProperty("location"));
}
}
};
/**
*
*/
public mxLayoutManager(mxGraph graph)
{
setGraph(graph);
}
/**
* @return the enabled
*/
public boolean isEnabled()
{
return enabled;
}
/**
* @param value the enabled to set
*/
public void setEnabled(boolean value)
{
enabled = value;
}
/**
* @return the bubbling
*/
public boolean isBubbling()
{
return bubbling;
}
/**
* @param value the bubbling to set
*/
public void setBubbling(boolean value)
{
bubbling = value;
}
/**
* @return the graph
*/
public mxGraph getGraph()
{
return graph;
}
/**
* @param value the graph to set
*/
public void setGraph(mxGraph value)
{
if (graph != null)
{
mxIGraphModel model = graph.getModel();
model.removeListener(undoHandler);
graph.removeListener(moveHandler);
}
graph = value;
if (graph != null)
{
mxIGraphModel model = graph.getModel();
model.addListener(mxEvent.BEFORE_UNDO, undoHandler);
graph.addListener(mxEvent.MOVE_CELLS, moveHandler);
}
}
/**
*
*/
protected mxIGraphLayout getLayout(Object parent)
{
return null;
}
/**
*
*/
protected void cellsMoved(Object[] cells, Point location)
{
if (cells != null && location != null)
{
mxIGraphModel model = getGraph().getModel();
// Checks if a layout exists to take care of the moving
for (int i = 0; i < cells.length; i++)
{
mxIGraphLayout layout = getLayout(model.getParent(cells[i]));
if (layout != null)
{
layout.moveCell(cells[i], location.x, location.y);
}
}
}
}
/**
*
*/
protected void beforeUndo(mxUndoableEdit edit)
{
Collection