package tim.prune.config;
import java.awt.Color;
/**
* Class to hold a colour scheme for GpsPrune, including
* colours for background, points, selections and texts
*/
public class ColourScheme
{
// Current colours
private Color[] _colours = new Color[NUM_COLOURS];
// Default colours
private static final Color[] DEFAULT_COLOURS = {Color.WHITE, Color.BLUE, Color.GREEN,
Color.BLACK, Color.RED, Color.ORANGE, Color.BLACK, Color.GRAY};
// Colour indices
public static final int IDX_BACKGROUND = 0;
public static final int IDX_POINT = 1;
public static final int IDX_SELECTION = 2;
public static final int IDX_TEXT = 3;
public static final int IDX_PRIMARY = 4;
public static final int IDX_SECONDARY = 5;
public static final int IDX_BORDERS = 6;
public static final int IDX_LINES = 7;
// Number of colours
private static final int NUM_COLOURS = 8;
/**
* Load the colour scheme from the given String
* @param inCodes comma-separated hex codes describing colours
*/
public void loadFromHex(String inCodes)
{
if (inCodes != null && inCodes.length() > 5)
{
String[] codes = inCodes.split(",");
final int numCodes = (codes.length > NUM_COLOURS ? NUM_COLOURS : codes.length);
for (int i=0; i<numCodes; i++) {
_colours[i] = ColourUtils.colourFromHex(codes[i]);
}
}
}
/**
* @return colour to use for given index
*/
public Color getColour(int inIndex)
{
assert (inIndex >= 0 && inIndex < NUM_COLOURS);
Color currColour = _colours[inIndex];
return (currColour != null ? currColour : DEFAULT_COLOURS[inIndex]);
}
/**
* @return default colour for given index
*/
public static Color getDefaultColour(int inIndex)
{
assert (inIndex >= 0 && inIndex < NUM_COLOURS);
return DEFAULT_COLOURS[inIndex];
}
/**
* Edit one of the colours to a new value
* @param inIndex index of colour
* @param inColour colour to set
*/
public void setColour(int inIndex, Color inColour)
{
assert (inIndex >= 0 && inIndex < NUM_COLOURS);
_colours[inIndex] = inColour;
}
/**
* @return colour scheme as string of concatenated hex codes
*/
public String toString()
{
StringBuffer buff = new StringBuffer();
for (int i=0; i<NUM_COLOURS; i++) {
buff.append(ColourUtils.makeHexCode(getColour(i)));
buff.append(',');
}
return buff.toString();
}
}