1 11 package org.eclipse.pde.internal.ui.editor.text; 12 13 import java.util.HashMap ; 14 import java.util.Iterator ; 15 import java.util.Map ; 16 17 import org.eclipse.jdt.internal.ui.JavaPlugin; 18 import org.eclipse.jface.preference.IPreferenceStore; 19 import org.eclipse.jface.preference.PreferenceConverter; 20 import org.eclipse.jface.resource.StringConverter; 21 import org.eclipse.jface.util.PropertyChangeEvent; 22 import org.eclipse.pde.internal.ui.PDEPlugin; 23 import org.eclipse.swt.SWT; 24 import org.eclipse.swt.graphics.Color; 25 import org.eclipse.swt.graphics.RGB; 26 import org.eclipse.swt.widgets.Display; 27 28 public class ColorManager implements IColorManager, IPDEColorConstants { 29 30 private static ColorManager fColorManager; 31 private Map fColorTable = new HashMap (5); 32 private static int counter = 0; 33 34 public ColorManager() { 35 initialize(); 36 } 37 38 public static IColorManager getDefault(){ 39 if (fColorManager == null) 40 fColorManager = new ColorManager(); 41 42 counter += 1; 43 return fColorManager; 44 } 45 46 public static void initializeDefaults(IPreferenceStore store) { 47 PreferenceConverter.setDefault(store, P_DEFAULT, DEFAULT); 48 PreferenceConverter.setDefault(store, P_PROC_INSTR, PROC_INSTR); 49 PreferenceConverter.setDefault(store, P_STRING, STRING); 50 PreferenceConverter.setDefault(store, P_TAG, TAG); 51 PreferenceConverter.setDefault(store, P_XML_COMMENT, XML_COMMENT); 52 PreferenceConverter.setDefault(store, P_HEADER_KEY, HEADER_KEY); 53 PreferenceConverter.setDefault(store, P_HEADER_OSGI, HEADER_OSGI); 54 store.setDefault(P_HEADER_OSGI + IPDEColorConstants.P_BOLD_SUFFIX, true); 55 PreferenceConverter.setDefault(store, P_HEADER_VALUE, HEADER_VALUE); 56 PreferenceConverter.setDefault(store, P_HEADER_ATTRIBUTES, HEADER_ATTRIBUTES); 57 store.setDefault(P_HEADER_ATTRIBUTES + IPDEColorConstants.P_ITALIC_SUFFIX, true); 58 PreferenceConverter.setDefault(store, P_HEADER_ASSIGNMENT, HEADER_ASSIGNMENT); 59 } 60 61 private void initialize() { 62 IPreferenceStore pstore = PDEPlugin.getDefault().getPreferenceStore(); 63 putColor(pstore, P_DEFAULT); 64 putColor(pstore, P_PROC_INSTR); 65 putColor(pstore, P_STRING); 66 putColor(pstore, P_TAG); 67 putColor(pstore, P_XML_COMMENT); 68 putColor(pstore, P_HEADER_KEY); 69 putColor(pstore, P_HEADER_OSGI); 70 putColor(pstore, P_HEADER_VALUE); 71 putColor(pstore, P_HEADER_ATTRIBUTES); 72 putColor(pstore, P_HEADER_ASSIGNMENT); 73 pstore = JavaPlugin.getDefault().getCombinedPreferenceStore(); 74 for (int i = 0; i < IColorManager.PROPERTIES_COLORS.length; i++) { 75 putColor(pstore, IColorManager.PROPERTIES_COLORS[i]); 76 } 77 } 78 79 public void disposeColors(boolean resetSingleton) { 80 Iterator e = fColorTable.values().iterator(); 81 while (e.hasNext()) 82 ((Color) e.next()).dispose(); 83 if (resetSingleton) 84 fColorManager = null; 85 86 } 87 public void dispose() { 88 counter--; 89 if (counter == 0) 90 disposeColors(true); 91 } 92 93 private void putColor(IPreferenceStore pstore, String property) { 94 putColor(property, PreferenceConverter.getColor(pstore, property)); 95 } 96 97 private void putColor(String property, RGB setting) { 98 Color oldColor = (Color) fColorTable.get(property); 99 if (oldColor != null){ 100 if (oldColor.getRGB().equals(setting)) 101 return; 102 oldColor.dispose(); 103 } 104 fColorTable.put(property, new Color(Display.getCurrent(), setting)); 105 } 106 107 public Color getColor(String key) { 108 Color color = (Color) fColorTable.get(key); 109 if (color == null) 110 color = Display.getCurrent().getSystemColor(SWT.COLOR_LIST_FOREGROUND); 111 return color; 112 } 113 114 public void handlePropertyChangeEvent(PropertyChangeEvent event) { 115 Object color = event.getNewValue(); 116 if (color instanceof RGB) { 117 putColor(event.getProperty(), (RGB)color); 118 } else { 119 putColor(event.getProperty(), StringConverter.asRGB(color.toString())); 120 } 121 } 122 } 123 | Popular Tags |