1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 package org.diyefi.openlogviewer.coloring;
24
25 import java.awt.Color;
26 import java.util.List;
27 import java.util.LinkedList;
28 import java.util.ListIterator;
29
30
31
32
33
34
35 public enum InitialLineColoring {
36
37 INSTANCE;
38
39 private final List<MarkedColor> colorList;
40
41 private InitialLineColoring() {
42 colorList = new LinkedList<MarkedColor>();
43
44 colorList.add(new MarkedColor(Color.getHSBColor(1.0F, 1.0F, 1.0F), true, 0.0));
45 colorList.add(new MarkedColor(Color.getHSBColor(0.25F, 1.0F, 1.0F), true, 0.0));
46 colorList.add(new MarkedColor(Color.getHSBColor(0.5F, 1.0F, 1.0F), true, 0.0));
47 colorList.add(new MarkedColor(Color.getHSBColor(0.75F, 1.0F, 1.0F), true, 0.0));
48
49 for (long i = 8; i < 128; i *= 2) {
50 this.addColors(i);
51 }
52 }
53
54 private void addColors(final long hueOffsetDinominator) {
55 final long numColors = hueOffsetDinominator / 2;
56 final double hueOffset = 1.0 / hueOffsetDinominator;
57
58 for (long i = 0; i < (numColors - 1); i++) {
59 double hue = 0.0;
60 hue += hueOffset;
61
62 for (int j = 0; j < 4; j++) {
63 final MarkedColor newColor = new MarkedColor(Color.getHSBColor((float) hue, 1.0F, 1.0F), true, hue);
64 if (!colorList.contains(newColor)) {
65 colorList.add(newColor);
66 }
67 hue += 0.25;
68 }
69 }
70 }
71
72 public Color getBestAvailableColor() {
73 Color nextColor = Color.gray;
74 final ListIterator<MarkedColor> i = colorList.listIterator();
75
76 for (boolean found = false; i.hasNext() && !found;) {
77 final MarkedColor c = i.next();
78
79 if (c.isAvailable()) {
80 c.setAvailability(false);
81 nextColor = c.getColor();
82 found = true;
83 }
84 }
85 return nextColor;
86 }
87
88 public void giveBackColor(final Color c) {
89 if (colorList.contains(c)) {
90 colorList.get(colorList.indexOf(c)).setAvailability(true);
91 }
92 }
93 }