/*
* Created on 10-Feb-2004
*/
package pipe.gui;
import pipe.constants.GUIConstants;
import java.awt.Color;
import java.awt.Container;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.GeneralPath;
/**
* This class represents a grid that will draw itself on an object
*/
public class Grid {
/**
* Color for the grid
*/
private static final Color GRID_COLOR = new Color(240, 240, 255);
/**
* Spacing between grid items
*/
private float gridSpacing = GUIConstants.PLACE_TRANSITION_HEIGHT / 2;
/**
* Graphical grid display
*/
private GeneralPath gridDisplay;
/**
* True if the grid should be displayed
*/
private boolean enabled = true;
/**
* Height of the overall grid
*/
private int gridHeight;
/**
* Width of the overall gird
*/
private int gridWidth;
/**
* Grid count
*/
private int gridCount = 1;
/**
* Increment the grid size
*/
public void increment() {
gridCount++;
gridCount %= 4;
if (gridCount == 3) {
disableGrid();
} else {
enableGrid();
setGridSpacing(Math.pow(2, gridCount - 2));
}
}
/**
* Disable the grid from showing
*/
public void disableGrid() {
if (enabled) {
enabled = false;
}
}
/**
* Set the grid to be displayed
*/
public void enableGrid() {
enabled = true;
}
/**
* Set the spacing between the grid items
* @param spacing
*/
private void setGridSpacing(double spacing) {
gridSpacing = (float) (spacing * GUIConstants.PLACE_TRANSITION_HEIGHT);
}
/**
*
* @return true if the grid should be displayed
*/
public boolean isEnabled() {
return enabled;
}
/**
* Set the size to that of the parent boundaries
* @param parent container
*/
public void updateSize(Container parent) {
if (enabled) {
gridHeight = parent.getHeight();
gridWidth = parent.getWidth();
createGrid();
}
}
/**
* Create the path of the grid
*/
private void createGrid() {
gridDisplay = new GeneralPath();
for (float i = gridSpacing; i <= gridWidth; i += gridSpacing) {
gridDisplay.moveTo(i, 2);
gridDisplay.lineTo(i, gridHeight);
}
for (float i = gridSpacing; i <= gridHeight; i += gridSpacing) {
gridDisplay.moveTo(2, i);
gridDisplay.lineTo(gridWidth, i);
}
}
/**
* Draw the grid on the parent using the graphics
* @param g graphics
*/
public void drawGrid(Graphics g) {
Graphics2D g2d = (Graphics2D) g;
g2d.setPaint(GRID_COLOR);
g2d.draw(gridDisplay);
}
}