// ============================================================================
//
// Copyright (C) 2006-2016 Talend Inc. - www.talend.com
//
// This source code is available under agreement available at
// %InstallDIR%\features\org.talend.rcp.branding.%PRODUCTNAME%\%PRODUCTNAME%license.txt
//
// You should have received a copy of the agreement
// along with this program; if not, write to Talend SA
// 9 rue Pages 92150 Suresnes, France
//
// ============================================================================
package com.amalto.workbench.widgets.composites;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.resource.StringConverter;
import org.eclipse.jface.text.TextAttribute;
import org.eclipse.jface.text.rules.IToken;
import org.eclipse.jface.text.rules.Token;
import org.eclipse.jface.util.PropertyChangeEvent;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.RGB;
import org.eclipse.swt.widgets.Display;
public class ElementFKInfoColorProvider {
private Map<RGB, Color> colorTable = new HashMap<RGB, Color>(10);
private Map<String, IToken> tokenTable = new HashMap<String, IToken>(10);
IPreferenceStore store;
public ElementFKInfoColorProvider(IPreferenceStore store) {
this.store = store;
}
public IToken getToken(String prefKey) {
Token token = (Token) tokenTable.get(prefKey);
if (token == null) {
String colorName = store.getString(prefKey);
if (colorName == null || colorName.isEmpty()) {
if (prefKey.equals(ElementFKInfoConfiguration.PREF_COLOR_DEFAULT)) {
colorName = "0,128,0"; //$NON-NLS-1$
} else if (prefKey.equals(ElementFKInfoConfiguration.PREF_COLOR_STRING)) {
colorName = "0,0,255"; //$NON-NLS-1$
} else if (prefKey.equals(ElementFKInfoConfiguration.PREF_COLOR_KEYWORD)) {
colorName = "0,0,128"; //$NON-NLS-1$
}
}
RGB rgb = StringConverter.asRGB(colorName);
token = new Token(new TextAttribute(getColor(rgb)));
tokenTable.put(prefKey, token);
}
return token;
}
public void dispose() {
Iterator<Color> e = colorTable.values().iterator();
while (e.hasNext()) {
e.next().dispose();
}
}
public Color getColor(String prefKey) {
String colorName = store.getString(prefKey);
RGB rgb = StringConverter.asRGB(colorName);
return getColor(rgb);
}
private Color getColor(RGB rgb) {
Color color = colorTable.get(rgb);
if (color == null) {
color = new Color(Display.getCurrent(), rgb);
colorTable.put(rgb, color);
}
return color;
}
public boolean affectsTextPresentation(PropertyChangeEvent event) {
Token token = (Token) tokenTable.get(event.getProperty());
return (token != null);
}
public void handlePreferenceStoreChanged(PropertyChangeEvent event) {
String prefKey = event.getProperty();
Token token = (Token) tokenTable.get(prefKey);
if (token != null) {
String colorName = store.getString(prefKey);
RGB rgb = StringConverter.asRGB(colorName);
token.setData(new TextAttribute(getColor(rgb)));
}
}
}