]> gitweb.fperrin.net Git - GpsPrune.git/blobdiff - src/tim/prune/config/ColourScheme.java
Moved source into separate src directory due to popular request
[GpsPrune.git] / src / tim / prune / config / ColourScheme.java
diff --git a/src/tim/prune/config/ColourScheme.java b/src/tim/prune/config/ColourScheme.java
new file mode 100644 (file)
index 0000000..babe9e1
--- /dev/null
@@ -0,0 +1,89 @@
+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();
+       }
+}