⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mxstacklayout.java

📁 经典的java图像处理程序源码
💻 JAVA
字号:
package com.mxgraph.layout;import com.mxgraph.model.mxGeometry;import com.mxgraph.model.mxICell;import com.mxgraph.model.mxIGraphModel;import com.mxgraph.util.mxRectangle;import com.mxgraph.view.mxCellState;import com.mxgraph.view.mxGraph;public class mxStackLayout extends mxGraphLayout{	/**	 * Specifies the orientation of the layout. Default is true.	 */	protected boolean horizontal;	/**	 * Specifies the spacing between the cells. Default is gridSize.	 */	protected int spacing;	/**	 * Specifies the horizontal origin of the layout. Default is spacing.	 */	protected int x0;	/**	 * Specifies the vertical origin of the layout. Default is spacing.	 */	protected int y0;	/**	 * Boolean indicating if dimension should be changed to fill out the parent	 * cell. Default is false.	 */	protected boolean fill = false;	/**	 * If the parent should be resized to match the width/height of the	 * stack. Default is false.	 */	protected boolean resizeParent = false;	/**	 * Value at which a new column or row should be created. Default is 0.	 */	protected int wrap = 0;	/**	 * Constructs a new stack layout layout for the specified graph,	 * spacing, orientation and offset.	 */	public mxStackLayout(mxGraph graph)	{		this(graph, true);	}	/**	 * Constructs a new stack layout layout for the specified graph,	 * spacing, orientation and offset.	 */	public mxStackLayout(mxGraph graph, boolean horizontal)	{		this(graph, horizontal, graph.getGridSize());	}	/**	 * Constructs a new stack layout layout for the specified graph,	 * spacing, orientation and offset.	 */	public mxStackLayout(mxGraph graph, boolean horizontal, int spacing)	{		this(graph, horizontal, spacing, spacing, spacing);	}	/**	 * Constructs a new stack layout layout for the specified graph,	 * spacing, orientation and offset.	 */	public mxStackLayout(mxGraph graph, boolean horizontal, int spacing,			int x0, int y0)	{		super(graph);		this.horizontal = horizontal;		this.spacing = spacing;		this.x0 = x0;		this.y0 = y0;	}		/**	 * 	 */	public boolean isHorizontal()	{		return horizontal;	}	/*	 * (non-Javadoc)	 * @see com.mxgraph.layout.mxGraphLayout#move(java.lang.Object, double, double)	 */	public void moveCell(Object cell, double x, double y)	{		mxIGraphModel model = graph.getModel();		Object parent = model.getParent(cell);		boolean horizontal = isHorizontal();		if (cell instanceof mxICell && parent instanceof mxICell)		{			int i = 0;			double last = 0;			int childCount = model.getChildCount(parent);			double value = (horizontal) ? x : y;			mxCellState pstate = graph.getView().getState(parent);			if (pstate != null)			{				value -= (horizontal) ? pstate.getX() : pstate.getY();			}			for (i = 0; i < childCount; i++)			{				Object child = model.getChildAt(parent, i);				if (child != cell)				{					mxGeometry bounds = model.getGeometry(child);					if (bounds != null)					{						double tmp = (horizontal) ? bounds.getX()								+ bounds.getWidth() / 2 : bounds.getY()								+ bounds.getHeight() / 2;						if (last < value && tmp > value)						{							break;						}						last = tmp;					}				}			}			// Changes child order in parent			int idx = ((mxICell) parent).getIndex((mxICell) cell);			idx = Math.max(0, i - ((i > idx) ? 1 : 0));			model.add(parent, cell, idx);		}	}	/**	 * Hook for subclassers to return the container size.	 */	public mxRectangle getContainerSize()	{		return new mxRectangle();	}	/*	 * (non-Javadoc)	 * @see com.mxgraph.layout.mxIGraphLayout#execute(java.lang.Object)	 */	public void execute(Object parent)	{		if (parent != null)		{			double x0 = this.x0 + 1;			double y0 = this.y0;			boolean horizontal = isHorizontal();			mxIGraphModel model = graph.getModel();			mxGeometry pgeo = model.getGeometry(parent);			// Handles special case where the parent is either a layer with no			// geometry or the current root of the view in which case the size			// of the graph's container will be used.			if (pgeo == null && model.getParent(parent) == model.getRoot()					|| parent == graph.getView().getCurrentRoot())			{				mxRectangle tmp = getContainerSize();				pgeo = new mxGeometry(0, 0, tmp.getWidth(), tmp.getHeight());			}			double fillValue = 0;			if (pgeo != null)			{				fillValue = (horizontal) ? pgeo.getHeight() : pgeo.getWidth();			}			fillValue -= 2 * spacing;			// Handles swimlane start size			mxRectangle size = graph.getStartSize(parent);			fillValue -= (horizontal) ? size.getHeight() : size.getWidth();			x0 = this.x0 + size.getWidth();			y0 = this.y0 + size.getHeight();			model.beginUpdate();			try			{				double tmp = 0;				mxGeometry last = null;				int childCount = model.getChildCount(parent);				for (int i = 0; i < childCount; i++)				{					Object child = model.getChildAt(parent, i);					if (!isVertexIgnored(child) && isVertexMovable(child))					{						mxGeometry geo = model.getGeometry(child);						if (geo != null)						{							geo = (mxGeometry) geo.clone();							if (wrap != 0 && last != null)							{								if ((horizontal && last.getX()										+ last.getWidth() + geo.getWidth() + 2										* spacing > wrap)										|| (!horizontal && last.getY()												+ last.getHeight()												+ geo.getHeight() + 2 * spacing > wrap))								{									last = null;									if (horizontal)									{										y0 += tmp + spacing;									}									else									{										x0 += tmp + spacing;									}									tmp = 0;								}							}							tmp = Math.max(tmp, (horizontal) ? geo									.getHeight() : geo.getWidth());							if (last != null)							{								if (horizontal)								{									geo.setX(last.getX() + last.getWidth()											+ spacing);								}								else								{									geo.setY(last.getY() + last.getHeight()											+ spacing);								}							}							else							{								if (horizontal)								{									geo.setX(x0);								}								else								{									geo.setY(y0);								}							}							if (horizontal)							{								geo.setY(y0);							}							else							{								geo.setX(x0);							}							if (fill && fillValue > 0)							{								if (horizontal)								{									geo.setHeight(fillValue);								}								else								{									geo.setWidth(fillValue);								}							}							model.setGeometry(child, geo);							last = geo;						}					}				}				if (resizeParent && pgeo != null && last != null						&& !graph.isCellCollapsed(parent))				{					pgeo = (mxGeometry) pgeo.clone();					if (horizontal)					{						pgeo.setWidth(last.getX() + last.getWidth() + spacing);					}					else					{						pgeo								.setHeight(last.getY() + last.getHeight()										+ spacing);					}					model.setGeometry(parent, pgeo);				}			}			finally			{				model.endUpdate();			}		}	}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -