blob: 77e67fb9a1ff3c32b8c5af6f0c83168276c8df68 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2001, 2004 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
* Jens Lukowski/Innoopract - initial renaming/restructuring
*
*******************************************************************************/
package org.eclipse.wst.sse.ui.internal.preferences.ui;
import org.eclipse.swt.graphics.RGB;
import org.eclipse.wst.sse.ui.internal.Logger;
import com.ibm.icu.util.StringTokenizer;
public class ColorHelper {
public final static String BACKGROUND = "background";//$NON-NLS-1$
public final static String BOLD = "bold";//$NON-NLS-1$
public final static String FOREGROUND = "foreground";//$NON-NLS-1$
public final static String NAME = "name";//$NON-NLS-1$
private final static String STYLE_SEPARATOR = "|"; //$NON-NLS-1$
private final static String NULL = "null"; //$NON-NLS-1$
/**
* Return an RGB String given the int r, g, b values
*/
public static String getColorString(int r, int g, int b) {
return "#" + getHexString(r, 2) + getHexString(g, 2) + getHexString(b, 2);//$NON-NLS-1$
}
private static String getHexString(int value, int minWidth) {
String hexString = Integer.toHexString(value);
for (int i = hexString.length(); i < minWidth; i++) {
hexString = "0" + hexString;//$NON-NLS-1$
}
return hexString;
}
/**
* Generates a preference string to be placed in preferences from the
* given String array.
*
* @param stylePrefs
* assumes not null and should be in the form of String[0] =
* Foreground RGB String, String[1] = Background RGB String,
* String[2] = Bold true/false
*
* @return String in the form of Foreground RGB String | Background RGB
* String | Bold true/false
*/
public static String packStylePreferences(String[] stylePrefs) {
StringBuffer styleString = new StringBuffer();
for (int i = 0; i < stylePrefs.length; ++i) {
String s = stylePrefs[i];
if (i < 2) {
if (s != null) {
styleString.append(s);
}
else {
styleString.append(NULL);
}
}
else {
styleString.append(Boolean.valueOf(s));
}
// add in the separator (except on last iteration)
if (i < stylePrefs.length - 1) {
styleString.append(" " + STYLE_SEPARATOR + " "); //$NON-NLS-1$ //$NON-NLS-2$
}
}
return styleString.toString();
}
/**
* @return org.eclipse.swt.graphics.RGB
* @param anRGBString
* java.lang.String
*/
public static RGB toRGB(String anRGBString) {
RGB result = null;
if (anRGBString.length() > 6 && anRGBString.charAt(0) == '#') {
int r = 0;
int g = 0;
int b = 0;
try {
r = Integer.valueOf(anRGBString.substring(1, 3), 16).intValue();
g = Integer.valueOf(anRGBString.substring(3, 5), 16).intValue();
b = Integer.valueOf(anRGBString.substring(5, 7), 16).intValue();
result = new RGB(r, g, b);
} catch (NumberFormatException nfExc) {
Logger.logException("Could not load highlighting preference for color " + anRGBString, nfExc);//$NON-NLS-1$
}
}
return result;
}
/**
* @return java.lang.String
* @param anRGB
* org.eclipse.swt.graphics.RGB
*/
public static String toRGBString(RGB anRGB) {
if (anRGB == null)
return "#000000";//$NON-NLS-1$
String red = Integer.toHexString(anRGB.red);
while (red.length() < 2)
red = "0" + red;//$NON-NLS-1$
String green = Integer.toHexString(anRGB.green);
while (green.length() < 2)
green = "0" + green;//$NON-NLS-1$
String blue = Integer.toHexString(anRGB.blue);
while (blue.length() < 2)
blue = "0" + blue;//$NON-NLS-1$
return "#" + red + green + blue;//$NON-NLS-1$
}
/**
* Extracts the foreground (RGB String), background (RGB String), bold
* (boolean String) from the given preference string.
*
* @param preference
* should be in the form of Foreground RGB String | Background
* RGB String | Bold true/false
* @return String[] where String[0] = Foreground RGB String, String[1] =
* Background RGB String, String[2] = Bold true/false, 3 = Italic
* true/false, 4 = Strikethrough true/false, 5 = Underline
* true/false; indexes 2-4 may be null if we ran into problems
* extracting
*/
public static String[] unpackStylePreferences(String preference) {
String[] stylePrefs = new String[6];
if (preference != null) {
StringTokenizer st = new StringTokenizer(preference, STYLE_SEPARATOR);
if (st.hasMoreTokens()) {
String foreground = st.nextToken().trim();
stylePrefs[0] = foreground;
}
else {
stylePrefs[0] = NULL;
}
if (st.hasMoreTokens()) {
String background = st.nextToken().trim();
stylePrefs[1] = background;
}
else {
stylePrefs[1] = NULL;
}
if (st.hasMoreTokens()) {
String bold = st.nextToken().trim();
stylePrefs[2] = Boolean.valueOf(bold).toString();
}
else {
stylePrefs[2] = Boolean.FALSE.toString();
}
if (st.hasMoreTokens()) {
String italic = st.nextToken().trim();
stylePrefs[3] = Boolean.valueOf(italic).toString();
}
else {
stylePrefs[3] = Boolean.FALSE.toString();
}
if (st.hasMoreTokens()) {
String strikethrough = st.nextToken().trim();
stylePrefs[4] = Boolean.valueOf(strikethrough).toString();
}
else {
stylePrefs[4] = Boolean.FALSE.toString();
}
if (st.hasMoreTokens()) {
String underline = st.nextToken().trim();
stylePrefs[5] = Boolean.valueOf(underline).toString();
}
else {
stylePrefs[5] = Boolean.FALSE.toString();
}
}
return stylePrefs;
}
}