001: /*******************************************************************************
002: * Copyright (c) 2000, 2006 IBM Corporation and others.
003: * All rights reserved. This program and the accompanying materials
004: * are made available under the terms of the Eclipse Public License v1.0
005: * which accompanies this distribution, and is available at
006: * http://www.eclipse.org/legal/epl-v10.html
007: *
008: * Contributors:
009: * IBM Corporation - initial API and implementation
010: *******************************************************************************/package org.eclipse.pde.internal.ui.editor.text;
011:
012: import java.util.HashMap;
013: import java.util.Iterator;
014: import java.util.Map;
015:
016: import org.eclipse.jdt.internal.ui.JavaPlugin;
017: import org.eclipse.jface.preference.IPreferenceStore;
018: import org.eclipse.jface.preference.PreferenceConverter;
019: import org.eclipse.jface.resource.StringConverter;
020: import org.eclipse.jface.util.PropertyChangeEvent;
021: import org.eclipse.pde.internal.ui.PDEPlugin;
022: import org.eclipse.swt.SWT;
023: import org.eclipse.swt.graphics.Color;
024: import org.eclipse.swt.graphics.RGB;
025: import org.eclipse.swt.widgets.Display;
026:
027: public class ColorManager implements IColorManager, IPDEColorConstants {
028:
029: private static ColorManager fColorManager;
030: private Map fColorTable = new HashMap(5);
031: private static int counter = 0;
032:
033: public ColorManager() {
034: initialize();
035: }
036:
037: public static IColorManager getDefault() {
038: if (fColorManager == null)
039: fColorManager = new ColorManager();
040:
041: counter += 1;
042: return fColorManager;
043: }
044:
045: public static void initializeDefaults(IPreferenceStore store) {
046: PreferenceConverter.setDefault(store, P_DEFAULT, DEFAULT);
047: PreferenceConverter.setDefault(store, P_PROC_INSTR, PROC_INSTR);
048: PreferenceConverter.setDefault(store, P_STRING, STRING);
049: PreferenceConverter.setDefault(store, P_EXTERNALIZED_STRING,
050: EXTERNALIZED_STRING);
051: PreferenceConverter.setDefault(store, P_TAG, TAG);
052: PreferenceConverter.setDefault(store, P_XML_COMMENT,
053: XML_COMMENT);
054: PreferenceConverter.setDefault(store, P_HEADER_KEY, HEADER_KEY);
055: PreferenceConverter.setDefault(store, P_HEADER_OSGI,
056: HEADER_OSGI);
057: store.setDefault(P_HEADER_OSGI
058: + IPDEColorConstants.P_BOLD_SUFFIX, true);
059: PreferenceConverter.setDefault(store, P_HEADER_VALUE,
060: HEADER_VALUE);
061: PreferenceConverter.setDefault(store, P_HEADER_ATTRIBUTES,
062: HEADER_ATTRIBUTES);
063: store.setDefault(P_HEADER_ATTRIBUTES
064: + IPDEColorConstants.P_ITALIC_SUFFIX, true);
065: PreferenceConverter.setDefault(store, P_HEADER_ASSIGNMENT,
066: HEADER_ASSIGNMENT);
067: }
068:
069: private void initialize() {
070: IPreferenceStore pstore = PDEPlugin.getDefault()
071: .getPreferenceStore();
072: putColor(pstore, P_DEFAULT);
073: putColor(pstore, P_PROC_INSTR);
074: putColor(pstore, P_STRING);
075: putColor(pstore, P_EXTERNALIZED_STRING);
076: putColor(pstore, P_TAG);
077: putColor(pstore, P_XML_COMMENT);
078: putColor(pstore, P_HEADER_KEY);
079: putColor(pstore, P_HEADER_OSGI);
080: putColor(pstore, P_HEADER_VALUE);
081: putColor(pstore, P_HEADER_ATTRIBUTES);
082: putColor(pstore, P_HEADER_ASSIGNMENT);
083: pstore = JavaPlugin.getDefault().getCombinedPreferenceStore();
084: for (int i = 0; i < IColorManager.PROPERTIES_COLORS.length; i++) {
085: putColor(pstore, IColorManager.PROPERTIES_COLORS[i]);
086: }
087: }
088:
089: public void disposeColors(boolean resetSingleton) {
090: Iterator e = fColorTable.values().iterator();
091: while (e.hasNext())
092: ((Color) e.next()).dispose();
093: if (resetSingleton)
094: fColorManager = null;
095:
096: }
097:
098: public void dispose() {
099: counter--;
100: if (counter == 0)
101: disposeColors(true);
102: }
103:
104: private void putColor(IPreferenceStore pstore, String property) {
105: putColor(property, PreferenceConverter.getColor(pstore,
106: property));
107: }
108:
109: private void putColor(String property, RGB setting) {
110: Color oldColor = (Color) fColorTable.get(property);
111: if (oldColor != null) {
112: if (oldColor.getRGB().equals(setting))
113: return;
114: oldColor.dispose();
115: }
116: fColorTable.put(property, new Color(Display.getCurrent(),
117: setting));
118: }
119:
120: public Color getColor(String key) {
121: Color color = (Color) fColorTable.get(key);
122: if (color == null)
123: color = Display.getCurrent().getSystemColor(
124: SWT.COLOR_LIST_FOREGROUND);
125: return color;
126: }
127:
128: public void handlePropertyChangeEvent(PropertyChangeEvent event) {
129: Object color = event.getNewValue();
130: if (color instanceof RGB) {
131: putColor(event.getProperty(), (RGB) color);
132: } else {
133: putColor(event.getProperty(), StringConverter.asRGB(color
134: .toString()));
135: }
136: }
137: }
|