package org.xmind.ui.internal.resourcemanager;
import java.util.HashMap;
import java.util.Map;
import org.eclipse.jface.resource.ColorDescriptor;
import org.eclipse.jface.resource.JFaceResources;
import org.eclipse.jface.resource.ResourceManager;
import org.eclipse.jface.util.Util;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.graphics.RGB;
import org.xmind.ui.resources.ColorUtils;
import org.xmind.ui.tabfolder.MTabFolder;
import org.xmind.ui.tabfolder.MTabItem;
import org.xmind.ui.util.IStyleProvider;
public class ResourceManagerStyleProvider implements IStyleProvider {
private ResourceManager resourceManager;
private Map<String, RGB> keyToRGB = new HashMap<String, RGB>();
public ResourceManagerStyleProvider(ResourceManager resourceManager) {
this.resourceManager = resourceManager;
}
public Color getColor(Object widget, String key) {
String defaultValue = null;
if (widget instanceof MTabItem) {
MTabItem item = (MTabItem) widget;
if (FILL.equals(key)
&& (item.isSelected() || item.isPreselected())) {
defaultValue = "#008EFC"; //$NON-NLS-1$
} else if (TEXT.equals(key)) {
if (item.isSelected()) {
defaultValue = "#FFFFFF"; //$NON-NLS-1$
} else {
defaultValue = "#000000"; //$NON-NLS-1$
}
}
} else if (widget instanceof MTabFolder) {
if (MTabFolder.TAB_BAR.equals(key)) {
defaultValue = "#FFFFFF"; //$NON-NLS-1$
}
if (MTabFolder.BODY.equals(key)) {
defaultValue = "#F2F2F2"; //$NON-NLS-1$
}
}
if (defaultValue != null) {
RGB rgb = ColorUtils.toRGB(defaultValue);
return (Color) resourceManager.get(ColorDescriptor.createFrom(rgb));
}
return null;
}
public int getAlpha(Object widget, String key, int defaultValue) {
if (widget instanceof MTabItem) {
MTabItem item = (MTabItem) widget;
if (FILL.equals(key)) {
if (item.isSelected())
return 0xFF;
if (item.isPreselected())
return 0x13;
}
}
return defaultValue;
}
public Font getFont(Object widget, String key) {
int fontHeight;
if (Util.isMac()) {
fontHeight = 12;//font size
} else {
fontHeight = 8;//font pixels
}
if (widget instanceof MTabItem) {
if (TEXT.equals(key))
return (Font) resourceManager.get(JFaceResources
.getDefaultFontDescriptor().setHeight(fontHeight));
}
return null;
}
public int getWidth(Object widget, String key, int defaultValue) {
if (widget instanceof MTabItem) {
if (IMAGE.equals(key))
return 26;
if (MARGIN.equals(key))
return 17;
if (SEPARATOR.equals(key))
return 2;//TODO:system-based
if (key == null)
return 131;
}
return defaultValue;
}
public int getHeight(Object widget, String key, int defaultValue) {
if (widget instanceof MTabItem) {
if (IMAGE.equals(key))
return 26;
if (MARGIN.equals(key))
return 10;
if (SEPARATOR.equals(key))
return 2;
if (key == null)
return 46;
}
return defaultValue;
}
public int getPosition(Object widget, String key, int defaultValue) {
if (widget instanceof MTabItem && TEXT.equals(key)) {
return SWT.RIGHT;
} else if (widget instanceof MTabFolder
&& MTabFolder.TAB_BAR.equals(key)) {
return SWT.LEFT;
}
return defaultValue;
}
@Override
public int getTextAlign(Object widget, String key, int defaultValue) {
if (widget instanceof MTabItem && TEXT_ALIGN.equals(key)) {
return SWT.LEFT;
}
return defaultValue;
}
public void setColor(String key, RGB value) {
keyToRGB.put(key, value);
}
public boolean getVisibility(Object widget, String key,
boolean defaultValue) {
return defaultValue;
}
}