/*******************************************************************************
* Copyright (c) 2004, 2005 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.gef.editparts;
import org.eclipse.draw2d.ColorConstants;
import org.eclipse.draw2d.FigureUtilities;
import org.eclipse.draw2d.FreeformLayer;
import org.eclipse.draw2d.Graphics;
import org.eclipse.draw2d.IFigure;
import org.eclipse.draw2d.geometry.Dimension;
import org.eclipse.draw2d.geometry.Point;
import org.eclipse.gef.SnapToGrid;
/**
* This is a layer that displays the grid. The default grid color is {@link
* org.eclipse.draw2d.ColorConstants#lightGray light gray}. To change the grid color, set
* the foreground color for this layer.
*
* @author Pratik Shah
* @since 3.0
*/
public class GridLayer
extends FreeformLayer
{
/**
* Field indicating the horizontal grid spacing
*/
protected int gridX = SnapToGrid.DEFAULT_GRID_SIZE;
/**
* Field for the vertical grid spacing
*/
protected int gridY = SnapToGrid.DEFAULT_GRID_SIZE;
/**
* Field indicating what the grid origin is. This is used simply to determine the
* offset from 0,0.
*/
protected Point origin = new Point();
/**
* Constructor
* Sets the default grid color: ColorConstants.lightGray
*/
public GridLayer() {
super();
setForegroundColor(ColorConstants.lightGray);
}
/**
* Overridden to indicate no preferred size. The grid layer should not affect the size of
* the layered pane in which it is placed.
* @see org.eclipse.draw2d.Figure#getPreferredSize(int, int)
*/
public Dimension getPreferredSize(int wHint, int hHint) {
return new Dimension();
}
/**
* @see org.eclipse.draw2d.Figure#paintFigure(org.eclipse.draw2d.Graphics)
*/
protected void paintFigure(Graphics graphics) {
super.paintFigure(graphics);
paintGrid(graphics);
}
/**
* Paints the grid. Sub-classes can override to customize the grid's look. If this layer
* is being used with SnapToGrid, this method will only be invoked when the {@link
* SnapToGrid#PROPERTY_GRID_VISIBLE visibility} property is set to true.
*
* @param g The Graphics object to be used to do the painting
* @see FigureUtilities#paintGrid(Graphics, IFigure, Point, int, int)
*/
protected void paintGrid(Graphics g) {
FigureUtilities.paintGrid(g, this, origin, gridX, gridY);
}
/**
* Sets the origin of the grid. The origin is used only to determine the offset from 0,0.
* @param p the origin
*/
public void setOrigin(Point p) {
if (p == null)
p = new Point();
if (!origin.equals(p)) {
origin = p;
repaint();
}
}
/**
* Sets the horizontal and vertical spacing of the grid. A grid spacing of 0 will be
* replaced with the {@link SnapToGrid#DEFAULT_GRID_SIZE default} spacing. A negative
* spacing will cause no grid lines to be drawn for that dimension.
*
* @param spacing A Dimension representing the horizontal (width) and vertical
* (height) gaps
*/
public void setSpacing(Dimension spacing) {
if (spacing == null)
spacing = new Dimension(SnapToGrid.DEFAULT_GRID_SIZE,
SnapToGrid.DEFAULT_GRID_SIZE);
if (!spacing.equals(gridX, gridY)) {
gridX = spacing.width != 0 ? spacing.width : gridX;
gridY = spacing.height != 0 ? spacing.height : gridY;
repaint();
}
}
}