package org.archstudio.swtutils;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.swt.graphics.RGB;
// Generate new tetradic color schemes at:
// http://wellstyled.com/tools/colorscheme2/index-en.html
public class ColorSchemeLoader {
protected ColorScheme[] defaultColorSchemes = null;
private ColorSchemeLoader() {
}
public ColorScheme[] getDefaultColorSchemes() {
if (defaultColorSchemes == null) {
defaultColorSchemes = loadDefaultColorSchemes();
}
return defaultColorSchemes;
}
protected ColorScheme[] loadDefaultColorSchemes() {
InputStream is = ColorSchemeLoader.class.getClassLoader().getResourceAsStream(
"edu/uci/isr/widgets/swt/res/colorschemes.txt");
return loadColorSchemes(is);
}
public ColorScheme[] loadColorSchemes(InputStream is) {
List<ColorScheme> schemeList = new ArrayList<ColorScheme>();
String name = null;
List<RGB[]> colorArrayList = new ArrayList<RGB[]>();
try {
BufferedReader br = new BufferedReader(new InputStreamReader(is));
while (true) {
String line = br.readLine();
if (line == null) {
if (name != null) {
RGB[][] colorArrays = colorArrayList.toArray(new RGB[0][]);
ColorScheme scheme = new ColorScheme(name, colorArrays);
schemeList.add(scheme);
}
break;
}
line = line.trim();
if (line.length() == 0) {
continue;
}
else if (line.startsWith("#")) {
continue;
}
else if (line.startsWith("&")) {
if (name != null) {
RGB[][] colorArrays = colorArrayList.toArray(new RGB[0][]);
ColorScheme scheme = new ColorScheme(name, colorArrays);
schemeList.add(scheme);
}
name = line.substring(1).trim();
colorArrayList.clear();
}
else {
String[] colorStrings = line.split("\\b");
List<RGB> colorList = new ArrayList<RGB>();
for (String colorString2 : colorStrings) {
String colorString = colorString2.trim();
if (colorString.length() > 0) {
try {
int colorRgb = Integer.parseInt(colorString, 16);
int r = (colorRgb & 0xff0000) >> 16;
int g = (colorRgb & 0x00ff00) >> 8;
int b = colorRgb & 0x0000ff;
RGB rgb = new RGB(r, g, b);
colorList.add(rgb);
}
catch (NumberFormatException nfe) {
}
}
}
RGB[] colorArray = colorList.toArray(new RGB[0]);
colorArrayList.add(colorArray);
}
}
}
catch (IOException e) {
}
try {
is.close();
}
catch (IOException ioe2) {
}
ColorScheme[] colorSchemeArray = schemeList.toArray(new ColorScheme[0]);
return colorSchemeArray;
}
private static ColorSchemeLoader theInstance = null;
public static synchronized ColorSchemeLoader getInstance() {
if (theInstance == null) {
theInstance = new ColorSchemeLoader();
}
return theInstance;
}
}