Package org.eclipse.wst.sse.ui.internal.preferences.ui

Source Code of org.eclipse.wst.sse.ui.internal.preferences.ui.ColorHelper

/*******************************************************************************
* Copyright (c) 2001, 2008 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.jface.resource.ColorRegistry;
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 | Italic true/false | Strikethrough true/false | Underline 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;
  }
 
  /**
   * Attempts to lookup the RGB value for <code>key</code> from the color
   * registry. If one is not found, the <code>defaultRGB</code> is used.
   * @param registry The ColorRegistry to search for the RGB value
   * @param key The key that the RGB value is stored under in the registry
   * @param defaultRGB The default RGB value to return in the absence of one
   * from the color registry
   *
   * @return The RGB value from the color registry for a given key, if it exists.
   * Otherwise, return the default RGB value.
   */
  public static RGB findRGB(ColorRegistry registry, String key, RGB defaultRGB) {
    if(registry.hasValueFor(key))
      return registry.getRGB(key);
    return defaultRGB;
  }
 
  /**
   * Attempts to find the RGB string for <code>key</code> from the color registry.
   * If one is not found, an RGB string is generated from the parameters <code>r,g,b</code>.
   *
   * @param registry The ColorRegistry to search for the RGB value
   * @param key The key that the RGB value is stored under in the registry
   * @param r The default red value
   * @param g The default green value
   * @param b The default blue value
   *
   * @return The String RGB value from the color registry for a given key, if it exists.
   * Otherwise, return the string RGB value created from the default r,g,b parameters.
   *
   */
  public static String findRGBString(ColorRegistry registry, String key, int r, int g, int b) {
    if(registry.hasValueFor(key))
      return toRGBString(registry.getRGB(key));
    return getColorString(r, g, b);
  }
 
}
TOP

Related Classes of org.eclipse.wst.sse.ui.internal.preferences.ui.ColorHelper

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.